티스토리 뷰
들어가며
- 최근 블로그에 달아놓은 광고로 A/B Test 를 해보면 어떨까 싶어 구글 애드센스 클릭을 트래킹을 하고자 했었다.
- 간단하겠지 싶었는데 막상 해보니 생각보다 쉽지가 않아서 우여곡절 끝에 해결 했던 방법을 포스팅 하게 되었다.
물론 꼼수라고 볼수도 있을 것 같긴 하지만
해결 방법
문제 상황
- 필자의 경우 tistory 에서 기본으로 제공하는 애드센스 설정을 사용하고 있는데 이 경우 google 에서 제공하는 js 를 통해서 결과적으로 iframe 형태로 광고 배너가 렌더링 된다.
- 처음에는 간단하게 iframe 에 접근 하여 핸들러를 다는 방법을 생각했는데 (아래 써드 파티가 있어 간단하겠다고 생각했지만)
- 당연하게도 google 측에서 Cross-Origin Read Blocking (CORB) 정책으로 막고 있어 접근이 불가능 했다.
- 사실 이쯤에서 포기하려 했었지만 오기가 생겼다.
차선책
- 구글링 중에 괜찮은 예제를 하나 찾게되었다.
- 해당 예제에서는 element 가 focus 를 잃었을 때 발생하는 blur event 를 활용하여 iframe 이 클릭되어 화면의 focus 를 잃은 경우를 트래킹 하는 예제다.
- 자세한 구현을 살펴보자면
- iframe 영역에 mouse enter event 이벤트를 감지하여 광고 영역에 마우스가 진입 여부를 캡쳐
- window 객체의 blur 이벤트를 통해서 현재 window 에서 focus out 이 된 순간에 mouse enter 가 되어 있었다면 이를 광고가 클릭 되었다고 판단
var myConfObj = {
iframeMouseOver : false
}
window.addEventListener('blur',function(){
if(myConfObj.iframeMouseOver){
console.log('Wow! Iframe Click!');
}
});
document.getElementById('YOUR_CONTAINER_ID').addEventListener('mouseover',function(){
myConfObj.iframeMouseOver = true;
});
document.getElementById('YOUR_CONTAINER_ID').addEventListener('mouseout',function(){
myConfObj.iframeMouseOver = false;
});
적용하기
- 이제 블로그에 적용을 해보자.
- 아래 코드는 애드센스 상단, 하단 광고 배너에 대한 click 리스너를 등록하는 코드이다.
<script>
let adClickContext = {
isMouseOver : false,
AdId: ''
}
initAdIframe("aswift_0"); // 상단 광고 배너 등록
initAdIframe("aswift_1"); // 하단 광고 배너 등록
window.addEventListener('blur',function(){
if(adClickContext.isMouseOver){
console.log("광고 클릭됨 [배너 id: " + adClickContext.AdId + "]");
}
});
function initAdIframe(elementId) {
// 일부 광고중 화면에 diaplay 되지 않으면 iframe 이 로드 되지 않는 경우가 있기 때문에 display 될때까지 체크 함.
const load = setInterval(function(){
const iframe = document.getElementById(elementId);
if(iframe != null) {
iframe.addEventListener('mouseover', function (e) {
adClickContext.isMouseOver = true;
adClickContext.AdId = e.target.getAttribute('id');
});
iframe.addEventListener('mouseout', function (e) {
adClickContext.isMouseOver = false;
adClickContext.AdId = '';
});
console.log("광고 배너 클릭 리스너 초기화 완료 [배너 id: " + elementId + "]");
clearInterval(load);
}
}, 1000);
}
</script>
- 위 코드를 티스토리 HTML 편집을 통해서 <head> 태그 안에 적당한 위치에 넣어주자.
- 티스토리 HTML 편집 방법은 이 글을 참고
- 적용후에 포스팅을 열고 개발자 도구를 확인해보면
광고 배너 클릭 리스너 초기화 완료 [배너 id: aswift_0]
라는 로그가 보인다면 초기화 성공이다.
테스트
- 애드센스의 경우 광고를 직접 클릭 하여 테스트 하는 것은 부정 클릭의 소지가 있어 리스크가 있어 테스트 용도로 iframe 을 띄워 테스트를 해보겠다. (https://www.openstreetmap.org 에서 제공하는 embed iframe 을 이용)
- 위에서 추가한 코드 블럭 밑에 아래 코드 블럭을 그대로 집어 넣겠다.
- 필자는 하단 iframe 을 동적으로 만들어 포스팅 하단 element 에 넣어주었다.
- 혹여 다른 위치에 넣어야 하는 경우 코드를 수정하면 된다.
<script>
initAdIframe("test");
window.addEventListener('load', async (event) => {
const testElemeht = document.createElement('iframe');
testElemeht.src ="https://www.openstreetmap.org/export/embed.html?bbox=-0.004017949104309083%2C51.47612752641776%2C0.00030577182769775396%2C51.478569861898606&layer=mapnik"
testElemeht.id = "test"
testElemeht.width = "1000"
document.getElementsByClassName('revenue_unit_wrap')[1].parentElement.insertBefore(testElemeht, document.getElementsByClassName('revenue_unit_wrap')[1]);
});
</script>
- 적용후에 블로그를 열어보면 아래와 같이 포스팅에 추가한 앙증맞은 iframe 이 보인다.
- 개발자 도구를 열어
광고 배너 클릭 리스너 초기화 완료 [배너 id: test]
라는 로그를 확인하여 초기화 된 것을 확인하자.
- 그리고 iframe 에 클릭을 하거나 OpenStreamMap 링크를 클릭하고 개발자 도구를 확인해보면
광고 클릭됨 [배너 id: test]
로그를 확인한다면 테스트 성공이다 !
마치며
- 이 포스팅을 통해 광고 클릭을 트래킹할 수 있게 되면서 여러 실험들을 할 수 있는 초석을 다질 수 있었다.
- 추후에 이를 토대로 A/B 테스트를 연동하여 광고클릭율을 증가를 측정해볼 예정이다 !
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- intelij
- 방통대 과제물
- 자전거
- 스프링부트
- 일본 자전거 여행
- 자전거 여행
- 배낭 여행
- JavaFX Window Close
- java
- 이펙티브 자바
- 일본여행
- JavaFX 종료
- 일본 여행
- JavaFX Table View
- git
- 텐트
- 이펙티브자바
- 일본 배낭여행
- windows
- Java UI
- 인텔리제이
- effectivejava
- effective java
- 이펙티브
- springboot
- 자바
- JavaFX 테이블뷰
- TableView
- JavaFX
- 배낭여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함