애드센스 무효클릭 IP추적 신고방법 블로그접속 차단하기

구글 태그매니저를 이용해 애드센스 클릭 IP를 추적하는 코드를 블로그에 심고, 애널리틱스에서 무효클릭 추정IP를 추리는 보고서를 만드는 방법, 그 데이터를 이용해 애드센스 무효클릭을 신고하고 블로그 접근차단까지 시키는 과정이다.

이 과정을 다 모아놓으면 글이 매우 길어질 것 같았지만, 그래도 한번에 총정리 하는것을 좋아해서 이 포스팅 하나에 다 넣어본다.

애드센스 수익페이지를 보면 금액이 적립이 되다가 줄어있기도 하고 오락가락한다. 메뉴에서 지급-결제정보 내역을 보면 매달의 정산금액 확정할때 항상 무효 트래픽 – 콘텐츠용 애드센스 항목으로 일부 금액이 취소된 것도 볼 수 있다.

이러한 무효클릭이 실수로 눌렀다 끄는 경우도 있겠지만, 누군가의 의도적인 공격에 의한 것인경우 IP를 추적해서 제제할 수 있다. 실제로 대법원 판례도 있다.

누군가 프로그래밍 봇을 이용해 다른 블로그의 애드센스 무효트래픽을 유발하는 공격을 한다면, 같은 블로그를 하는 경쟁자일 거라고만 생각했는데 이 판례를 보니 생각이 조금 달라졌다.

다른 블로거가 아니라 광고주가 누를수도 있다는 가능성이다. 광고주 입장에서도 경쟁업체에 손해를 유발시키고, 또 무효클릭을 다발해서 CPC (광고당 클릭단가)를 낮추면 본인이 더 싸게 게재를 할 수 있는 거니까. 사실이라면 양아치네 진짜…

구글 태그매니저 IP추적코드 세팅

구글 태그매니저를 이용할 것이지만 먼저 애널리틱스에서 할 작업이 있다. 티스토리 블로거니까 애널리틱스는 가입이 되어 있다고 가정하고…

태그매니저 IP추적코드 세팅

1) 애널리틱스 홈 화면에서 왼쪽 메뉴 최하단에 톱니바퀴 아이콘 (관리) 메뉴 클릭

2) 관리자 메뉴가 쭉 펼쳐지는데 중앙부분 속성에서 아래쪽에 보면 Dd 맞춤정의 메뉴가 있고 눌러서 <맞춤 측정기준>을 선택한다.

3) +새 맞춤 측정기준을 누른 뒤, 다음과 같이 기입하고 저장한다. (대소문자 구분)

이름 : IP addr

범위 : 세션

사용중 체크

4) 측정기준 예제코드 화면이 나오는데 아래에 완료 버튼을 누른다. 

5) 위와 같이 맞춤 측정기준 이름에 새로운 항목이 생겼다. 오른쪽에 차수 : 1 이라고 나와있는데 이 숫자를 확인해둔다. (나중에 진행할 단계에서 기입필요)

태그매니저 IP추적코드 세팅

1) 다음으로 속성 메뉴의 위쪽에 추적정보 – 추적코드를 누른다.

2) Google tag (gtag.js) 라고 나오는 소스 부분을 복사한다.

3) 티스토리 블로그 관리 – 스킨편집 – html 편집으로 들어가서 <head> 바로 아래에다가 붙여 넣는다.

애널리틱스에서의 설정이 완료되었으면,

다음으로 구글 태그매니저 사이트로 접속한다.

구글 태그매니저는 웹 인터페이스 분석과 광고 성과등 다양한 태그를 측정해서 관리할 수 있도록 제공하는 구글의 솔루션 서비스이다.

태그매니저 IP추적코드 세팅

1) 태그매니저 들어가서 우측 상단에 <계정 만들기>를 누른다.

2) 계정 정보를 다음과 같이 입력한다.

계정 이름 : 블로그명

국가 : 대한민국

컨테이너 이름 :  티스토리 블로그주소 url (https:// 부분 빼고 기입)

타겟 플랫폼 : 웹

3) 기입후 만들기를 클릭한다.

4) 약관 동의후 태그 관리자 설치코드가 나온다.

5) 첫번째 코드를 아까 애널리틱스 세팅할 때 했던 것처럼 티스토리 블로그관리 – 스킨편집 – html 편집으로 들어가서 <head> 바로 아래에다 붙여넣는다. 가능한 한 높은 위치에 코드를 붙이라고 되어 있으니 제일 위에 붙여준다.

6) 두번째 코드는 <body>를 찾아서 그 바로 밑에 붙여 넣는다. body가 딱 <body> 라고만 되어있지 않고 <body id=”[##어쩌고 하면서 긴 문장으로 되어있을 것이다. 검색할때 <body 까지만 기입해서 찾도록 한다.

7) 소스코드 복사가 끝났으면 확인을 누른다.

태그매니저 IP추적코드 세팅

1) 왼쪽 메뉴에서 <변수>를 눌러 들어간 뒤 <새로 만들기>를 클릭한다.

2) 변수 생성창이 뜨면 화면 가운데 아이콘을 누르고, 변수유형 선택에서 페이지 변수 – 자바 스크립트 변수를 선택한다.

3) 변수 구성 – 전역 변수 이름 부분에 skp_ip_addr 을 입력한다. (대소문자 구분)

4) 저장을 클릭하고 변수 이름변경 창이 뜨면 VAR_IP_ADDR 을 기입한 뒤 저장한다.

태그매니저 IP추적코드 세팅

1) 왼쪽 메뉴에서 태그를 클릭후 새로 만들기를 눌러준다.

2) 태그 구성 화면에서 위쪽의 아이콘을 누르고 태그유형선택 – 맞춤HTML 을 선택한다.

3) 태그 구성 창이 나오면 HTML 소스 입력하는 창이 있는데, 아래 소스를 복사해서 넣어준다.

* [] 괄호를 <> 로 변경하여 사용

* [] 괄호를 <> 로 변경하여 사용

[script type="application/javascript"]
function getIP(json) {
skp_ip_addr = json.ip; 
}
[/script]
[script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"][/script]

4) HTML을 입력한 뒤, 아래에 고급설정을 클릭한다.

5) 태그실행 우선순위 : 300을 입력한다.

6) 태그생성 화면에서 아래에 있는 트리거 아이콘을 눌러준다.

7) 트리거 선택 목록이 나오면 제일 위에 All Pages 를 선택한다.

8) 태그 구성창이 나오면 오른쪽 위에 저장을 누른다.

9) 태그이름에 PUSH_ID_ADDR 을 입력하고 저장한다.

* PUSH_IP가 아니라 ID이다.(스크린샷에도 잘못 기재)

태그매니저 IP추적코드 세팅

1) 왼쪽 메뉴에서 트리거로 들어가서 새로 만들기를 누른다.

2) 중앙에 아이콘을 누르고 트리거 유형 선택에서 페이지뷰 – 창로드를 고른다.

3) 오른쪽 상단에 저장버튼을 누른다.

4) 트리거 이름은 PageView 로 기입한다. (대소문자 구분)

태그매니저 IP추적코드 세팅

1) 다시 왼쪽 메뉴에서 태그를 누르고 새로 만들기를 클릭한다.

2) 태그 구성에서 화면 가운데 아이콘을 눌러주고 태그유형 선택에서 추천에 제일 위에 떠있는 Google 애널리틱스 : 유니버설 애널리틱스를 골라준다.

3) 다음과 같이 설정한다.

추적유형 : 페이지뷰

이 태그의 설정 재정의 사용 체크

추적ID : 애널리틱스에서 UA- 로 시작하는 추적ID 찾아서 붙여넣기

기타설정에 맞춤 측정기준에서 지수 : 1

측정기준값 옆에 + 아이콘 누른다음 {{VAR_IP_ADDR}} 을 선택

4) 맞춤 측정기준 입력이 완료되면 태그구성 화면에서 아래에 트리거 아이콘 클릭

5) 트리거 선택에서 맨 마지막에 있는 PageView 선택하고 저장

6) 태그 이름은 GA로 입력하면 새로운 태그가 생겨있는 것을 볼 수 있다.

태그매니저 IP추적코드 세팅

1) 태그매니저 화면에서 우상단에 제출 – 게시를 입력한다.

2) 컨테이너 설명 창은 건너뛰기 클릭

3) 노래 부르면서 기다리라는 화면이 잠시 나오고 등록이 완료된다.

왔다갔다 매우 복잡한데 여기까지 따라했으면 IP를 추적할 수 있는 코드심기는 완성되었다.

애널리틱스 맞춤보고서로 신고하기

이제 설치해놓은 태그매니저 IP추적코드를 이용해서 애널리틱스에서 보고서를 생성해본다.

애널리틱스 보고서로 신고하기

애널리틱스 – 맞춤설정 – 맞춤보고서로 들어가서 +새 맞춤보고서 만들기를 클릭

애널리틱스 보고서로 신고하기

제목은 본인 마음대로 입력하고 아래 항목들을 골라준다.

유형 : 플랫 표

측정기준 : IP addr , 국가 , 날짜 , 시간 , 운영체제

측정항목 : 세션 시간 , 클릭한 애드센스 광고 , 애드센스 클릭률 , 애드센스 수익 , 애드센스 노출수 , 애드센스 eCPM

더 추가해서 세분화된 자세한 보고서를 보고 싶다면 항목을 추가해도 된다.

일단 이정도만 있어도 IP에 따라 무효클릭인지 판단은 할 수 있다.

애널리틱스 보고서로 신고하기

보고서를 생성하고 하루정도 지난 다음에 열어보면 위와 같이 IP별로 기록이 남게 된다.

여기서 클릭한 애드센스 광고를 내림차순 정렬을 해보면, 특정 IP에서 많게는 20회이상 광고클릭을 한 것을 알 수 있다.

심지어 세션 시간은 2초밖에 안되어서 들어와서 2초만에 광고클릭 20회를 유발시키고 나갔다는 것이다.

의도적인 악성 무효트래픽 유발공격이라고 볼 수 있다.

그런데 검색하다 보니 여기에 대한 다른 의견도 있었다.

저 무효클릭 IP추적 보고서에 잡히는 클릭수는, 실제로 자동로봇의 악성클릭 횟수가 아니라 CPM 값이 포함되어서 그렇다는 주장이다.

구글 애드센스 전체 수익은 CPC광고수익 + CPM광고수익으로 이루어지는데,

CPC 광고 : 유효한 클릭활동을 했을때 수익을 지급

CPM 광고 : 광고가 노출되었을 때 일정값을 지급 (매우 작음)

이 중에서 노출에 대한 값을 지불하는 CPM 광고를 클릭한 경우 실제 애드센스 상에서는 클릭수로 집계되지 않는다. 이부분 때문에 애드센스 보고서에 나오는 실제 클릭수와, 애널리틱스로 잡은 클릭수의 차이가 발생한다는 것이다.

CPC 광고의 경우 비구매자가 누르는 것을 싫어하여 잠재적 구매자에게 이끌리는 형태로 만들고, CPM 광고의 경우는 어차피 노출에 대한 비용이 지불되는 것이니 클릭율을 올리도록 자극적으로 만든다. 따라서 CPM 광고의 클릭율이 훨씬 높게되고 이것이 애널리틱스와 애드센스간의 클릭수 차이를 유발한다.

…라는 주장인데 음… 내 생각은 약간 다르다.

CPC이던 CPM이던 1,2초의 세션 체류시간 내에 20회를 클릭한 것을 정상이라고 볼 수 있을까? 

자동로봇이 들어와서 무효클릭 남발하고 떠나는데 이게 CPC인지 CPM인지 알고 누를까?

내 생각에는 애널리틱스와 애드센스의 광고 클릭수 차이가 나는것은, 애널리틱스에서는 누른 것을 모두 집계하기 때문이고 애드센스에서는 무효클릭을 알아서 다 빼주고 유효 클릭수만 나오고 있기 때문이다.

그리고 매일매일 저렇게 1,2초만에 몇차례의 클릭후 빠져나가는 IP들이 끊임없이 온다는 것은, 아예 24시간 온갖 블로그를 돌면서 공격해대는 자동 봇들이 수두룩하게 활동하고 있다고 생각된다. 프로그램 만들어놓고 VPN으로 IP 계속 바꿔가며 활동하게 만드는거야 어려운 일이 아닐테니.

다만 블로그를 오래할 수록 클릭 패턴을 애드센스 인공지능이 파악하고 있고, 저런 말도 안되는 비정상 클릭은 손쉽게 무효클릭으로 잡아내고 있을 뿐이지. 만약 못잡아낸다면 애드센스 상에서 실제로 클릭수와 수익이 올라가는 것처럼 집계될 것이고 나중에 이게 밝혀진다면 정말 게재제한 같은 조치를 당할수도 있을 것이다.

애널리틱스 보고서로 신고하기

효과가 있는지는 모르겠지만 저런 IP들을 신고할 수 있다.

맞춤 보고서 우측상단에 ↓내보내기 – Google Sheets 를 눌러주면

이렇게 구글 스프레드 시트가 열린다. IP찾기를 해보면 주소와 위도 경도가 나와서 서로다른 IP이지만 같은 곳에서 썼다는 것을 알아낼 수 있다.

같은 장소에서 IP를 바꿔가며 내 블로그에 들어와서 방문당 1,2초 머물며 체류시간도 줄여버리고 광고까지 수십번 누르고 나갔다. 이게 무효클릭이 아니고 CPM 때문에 생긴 오차다? 라고는 생각하기가 어렵다. 나는 실제 봇에 의한 무효클릭이라고 생각한다.

애널리틱스 보고서로 신고하기

구글 시트는 공유를 누르면 이렇게 링크가 있는 모든 사용자가 열어볼 수 있게 설정할 수 있다. 링크 복사를 누른 뒤 이 무효클릭 IP추적 데이터를 구글 애드센스 측에 제출해주면 된다.

1) 계정에 문제가 없는 상태에서 무효클릭을 신고하려는 경우 : 

☑️ 구글 애드센스 무효클릭 신고양식

2) 계정에 제한이 걸린 상태에서 이의신청을 하려는 경우 : 

☑️ 구글 애드센스 무효트래픽 이의신청

애널리틱스 보고서로 신고하기

이런 식으로 날짜와 시간, 간단한 설명을 적고 방금 작성한 구글 시트의 공유주소 url 을 기입한 뒤 제출하면 된다.

애드센스 유저들 천명이 대동단결해서 매일 이렇게 신고를 해주면 IP가 아무리 많아도 결국 잡히고 그중에 동일 IP나 같은 주소에서 접속한 다른 본계정도 날려버릴 수 있을텐데 말이다.

애드센스 무효클릭IP 접속차단

이렇게 추적한 무효클릭 공격 IP들을 아예 블로그 접속을 못하도록 차단하는 방법도 있다.

* [] 를 <> 로 바꾸어서 사용하기

<!-- 애드센스 무효클릭 추적대상IP 차단 -->
[script]
(function () {
  function resp() {
  var arrUserIP = ['1.228.178.166','223.39.250.134','211.108.169.172','211.234.180.95','221.140.226.11','223.38.11.1','106.101.64.210','182.225.201.136','222.102.207.168','106.101.66.102'
  ,''];  
  // 차단할 아이피 입력
  var json = JSON.parse(this.responseText);
  for (var i = 0; i < arrUserIP.length; i++) {
    if (arrUserIP[i] == json.ip) {
      // 차단할 아이피 접속 시 보여줄 메시지(특정 주소로만 보내려면 아래 줄 삭제)
      alert("부정클릭 형법처벌대상IP는 접근이 차단됩니다.")
      // 다른 곳으로 보낼 URL주소 입력
      window.location.replace("https://support.google.com/adsense/contact/appeal_form_adsense_admob?visit_id=638013513406037173-3715435625&rd=1");
    }
  }
}

var request = new XMLHttpRequest();
request.addEventListener("load", resp);
request.open("GET", 'https://api.ipify.org?format=json');
request.send();
}());
[/script]

이 코드를 skin.html <head> 부분의 애드센스 로딩코드 앞에 넣어주면 방문시 광고보기 전에 튕겨나간다. 위와 같이 넣어 놓으면 등록된 대상이 블로그 접근시 부정클릭 신고하는 사이트로 보내버리게 된다.

그런데 고민하다가 이 코드는 빼기로 했다.

1) 무효클릭 추적IP 개수가 어마어마하게 많아질텐데, skin.html 안에 수많은 IP주소들로 도배해놓으면 좋지 않은 영향이 생길 것 같아서

2) 저런 자동 로봇을 쓰는 놈들이라면 이런걸로 막아논다고 해도 쉽게 뚫고 악성 공격을 계속할 수 있을 것 같아서

이 블로그 내용을 보면 IP 리스트를 Github의 Gist에 만들어 놓고, 그것을 불러오는 코드로 깔끔하게 수정을 하였는데 이상하게 적용하면 제대로 동작하지를 않는다. 이게 되면 할까 했는데 안하기로..

구글이 괜히 구글인가. 어차피 애드센스와 애널리틱스가 자체적으로 무효클릭, 무효트래픽을 잘 잡아낼거라 믿고 가끔 신고하기 한번씩 넣어주면 도움이 되겠지. 자기가 글을 쓰고 경쟁을 이겨서 검색엔진의 선택을 받을 생각은 안하고 남한테 꼼수를 부려서 날로 먹으려 하다니 참 괘씸하다.

어쩌다 보니 티스토리 블로그 글번호 2000번 포스팅을 애드센스 무효클릭 IP추적하는 방법으로 하게 되었다. 허허…