Google Analyticsでダウンロード(PDFとかZIPファイルとか)をトラッキングする(たぶん)正しい方法

やぁ鳥さんだよ。

Google Analyticsを埋め込めないファイルのトラッキング方法を説明するよっ
PDFとかAVI、ZIPファイルのダウンロードとかのトラッキングね。

まず、非同期トラッキング用の配列が無ければ作る。

var _gaq = _gaq || [];

今度は外部ファイルをクリックした時の関数を定義する。

function recordObjectLink(link) {
try {
var linkedURL = link.href.replace('http://' + document.domain, '');
linkedURL = linkedURL.replace('https://' + document.domain, '');
_gaq.push(['_trackPageview', linkedURL]);
var cl = '';
if (link.target && link.target !== '_self') {
switch (link.target) {
case '_parent':
cl = 'parent.document.location = "' + linkedURL + '"';
break;
case '_top':
cl = 'top.document.location = "' + linkedURL + '"';
break;
default:
cl ='var w = window.open("' + linkedURL + '", "' + link.target + '");if(!w){document.location = "' + linkedURL + '"}';
break;
}
} else {
cl = 'document.location = "' + linkedURL + '"';
}
setTimeout(cl, 100);
} catch (err) {}

return false;
}

ミソは、以下のとおり。

  • Google Analyticsはどうも_gaqに対するトリガーを仕掛けているのではなく、タイマーで定期的にクロールしているらしく、_gaqに突っ込んだ非同期イベントが、ページ遷移が早すぎるとトラックされないことがある。なので、ごく短い時間遅延させ、確実にトラッキングされるようにする
  • その影響で、setTimeoutで呼び出す式に、aでtarget指定されてた時の挙動をJavaScriptに引き継がないといけない。(HTMLと完全に一緒にするのは無理)
  • このトラッキング方法だと、ふつーにhrefに付いてるURLを渡してもドメイン名がいちいちくっ付いて来るので、それを引っぺがす。

で、最後にトラッキングしたいリンクにイベントを仕掛ける。

<a href="〜" onclick="return recordObjectLink(this);" target="_blank">

つまり、このJavaScript(要編集)を読み込んで、リンクにonclickを仕掛けておけば、トラッキングされるよっ

ページ内の特定のリンクに一気にイベントを仕掛けるなら、こんな方法もあるね。
以下は<div id="targetDiv">〜</div>にあるa要素すべてにトラッキングを仕掛ける場合だよ(jQuery利用の場合)

<script type="text/javascript">
$(function(){
$("#targetDiv").delegate('a', 'click', function (e) {
return recordObjectLink($(this)[0]);
});
});
</script>

参考

でわでわ。