iOS9から、Safariを搭載しているiPhoneやiPadで広告ブロック機能が実装予定というニュースを見ました。
正確にはコンテンツブロック機能として実装されるようで、その機能を利用して製作された広告ブロック機能のようなものをON/OFFトグルスイッチで切り替え、使えるようになりそうです。
コンテンツを無料配信するかわりに広告を表示しているWebサイト運営者は、このニュースが気になるんじゃないかと思います。
というわけで、私が今まで存在は知っていたけど触っていなかった現時点で存在している広告ブロック機能であるアドブロックやアンチアドブロックについて、自サイトへの実装が必要になるかもしれないという今後のため、少し触ってみることに。
まずは自サイトへの全アクセス中、どの位の人がアドブロックを使っているのかを把握したかったので、アンチアドブロックのスクリプトを利用して、アドブロック使用者のみGoogleアナリティクスにイベント送信を行いカウントしてみることにしました。
まずはアンチアドブロックを入手します
Antiblock.org
上記サイトへアクセスしたら、真ん中のテキストエリア内にあるスクリプトをコピーします。
コピーしたら、1行になっているスクリプトを修正しやすいように改行、インデントのソースフォーマットを行い、数行修正を行います。
<script> (function(w,u){ var d=w.document,z=typeof u;function tea4(){ function c(c,i){ var e=d.createElement('font'),b=d.body,s=b.style,l=b.childNodes.length;if(typeof i!=z){ e.setAttribute('id',i);s.margin=s.padding=0;s.height='100%';l=Math.floor(Math.random()*l)+1 }e.innerHTML=c;b.insertBefore(e,b.childNodes[l-1]) } function g(i,t){ return !t?d.getElementById(i):d.getElementsByTagName(t) }; function f(v){ if(!g('tea4')){ var ip='${request.getRemoteAddr()}'; ga('send', 'event', 'AdBlock', 'action', ip, 1, {'nonInteraction': true}); } }; (function(){ var a=['ad-side-text','adzone_content','article_box_ad','boxAd300','hp_ad300x250','sponsoredResultsWide','topleaderboardad','ad','ads','adsense'],l=a.length,i,s='',e;for(i=0;i<l;i++){ if(!g(a[i])){ s+='<a id="'+a[i]+'"></a>' } }c(s);l=a.length;setTimeout(function(){ for(i=0;i<l;i++){ e=g(a[i]);if(e.offsetParent==null||(w.getComputedStyle?d.defaultView.getComputedStyle(e,null).getPropertyValue('display'):e.currentStyle.display)=='none'){ return f('#'+a[i]) } } },250) }()); (function(){ var t=g(0,'img'),a=['/ad-sprite.','/adboxes/ad','/ads_php/ad','/adseo.','/adtech;','/clickboothad.','/netads.','/sponslink_','_adcall_','_longad_'],i;if(typeof t[0]!=z&&typeof t[0].src!=z){ i=new Image();i.onload=function(){ this.onload=z;this.onerror=function(){ f(this.src) };this.src=t[0].src+'#'+a.join('') };i.src=t[0].src } }()); (function(){ var o={ 'http://pagead2.googlesyndication.com/pagead/show_ads.js':'google_ad_client','http://js.adscale.de/getads.js':'adscale_slot_id','http://get.mirando.de/mirando.js':'adPlaceId' },S=g(0,'script'),l=S.length-1,n,r,i,v,s;d.write=null;for(i=l;i>=0;--i){ s=S[i];if(typeof o[s.src]!=z){ n=d.createElement('script');n.type='text/javascript';n.src=s.src;v=o[s.src];w[v]=u;r=S[0];n.onload=n.onreadystatechange=function(){ if(typeof w[v]==z&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){ n.onload=n.onreadystatechange=null;r.parentNode.removeChild(n);w[v]=null } };r.parentNode.insertBefore(n,r);setTimeout(function(){ if(w[v]===u){ f(n.src) } },2000);break } } }()) }if(d.addEventListener){ w.addEventListener('load',tea4,false) }else{ w.attachEvent('onload',tea4) } })(window); </script>
上記ソースのハイライトしている14-15行目が修正箇所になります。
アドブロック使用者の場合、
if(!g('tea4')){
から中に入ってくるので、
var ip='${request.getRemoteAddr()}';
でIPを取得し、
ga('send', 'event', 'AdBlock', 'action', ip, 1, {'nonInteraction': true});
でアナリティクスにAdBlockイベントをIPと一緒に送信しています。
私はIPも取得したかったのでそうしていますが、JavaやPHPが使えない場合はIPの取得は出来ず空文字が送信されます。
アドブロック件数をカウントするだけの場合はIPの記録までは特に不要かと思います。
このスクリプトを、サイトのトップページや全ページに係るヘッダソースなどに貼り付ければ実装完了です。
アナリティクスでの確認は、iPhone版アナリティクスアプリの画面では下記のようになります。
[行動]>[上位のイベント]から、イベントカテゴリとしてgaメソッドの3つ目の引数に指定した’AdBlock’がカウントされます。(画像の名前は異なっています)
PC版とスマホ版で画面を切り替えて表示している場合、この名前をそれぞれ異なる名称(PC-AdBlockやSP-AdBlockなど)とすれば、PC/スマホそれぞれのアドブロック利用者数をカウントできます。
イベントアクションとして、gaメソッドの4つ目の引数に指定した’action’がカウントされます。(画像の名前は異なっています)
イベントラベルとして、gaメソッドの5つ目に指定したIPがカウントされます。
このような感じでアドブロック利用者のカウントができるようになりました。