google analyticsのイベントトラッキング

長年の疑問についに答えてくれる記事がWeb担に出ていたのでメモ。


Googleアナリティクスでの外部リンククリック計測3つの手法の利点と欠点を整理してみた」
http://web-tan.forum.impressrd.jp/e/2012/09/11/13623

setTimeout使う場合の罠

記事中にあるグーグル「意図的にズラすsetTimeoutを使うべし」は、私は下記で実装しています。

<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-【yournumber-n】']);
    _gaq.push(['_trackPageview']);
    (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);

        if(typeof(_gat) == 'object') {
            var pageTracker = _gat._getTracker('UA-【yournumber-n】');
            pageTracker._trackPageview();
        }
    })();
    function recordOutboundLink(link, category, action) {
        try {
            if(typeof(_gat) == 'object') {
                var pageTracker=_gat._getTracker("UA-【yournumber-n】");
                pageTracker._trackEvent(category, action);
                setTimeout('document.location = "' + link.href + '"', 100);
            }
        }catch(err){}
    }
</script>

googleのマニュアルどおりに実装すると、IE7(まだユーザが一応いる!)でJSエラー

_gat is not defined

が発生してしまう、という罠があります。なので、回避策として、

        if(typeof(_gat) == 'object') {
            var pageTracker = _gat._getTracker('UA-【yournumber-n】');
            pageTracker._trackPageview();
        }

とカスタマイズを入れています。

setTimeout使う場合の注意点

PCサイトにおける外部リンクって、target="_blank" を入れて、別窓に開くようにすることが多いと思うのですよね。
ところが、JSから別窓を開こうとすると、IE系で、「ポップアップブロック」が発動してしまう。これは、ユーザビリティ上、難ありです。リンクを押しただけで、「このサイトのポップアップを常に許可」なんてイチイチやっていたら、離脱率が上がってしまうんじゃないかと。

なので、

'document.location = "' + link.href + '"'

と同一ウィンドウでの遷移にした方が良いと思うのです。
→ あれ?トラッキングしたいだけなのになんで画面遷移まで変えなきゃいけないんだろう、みたいな。

結論

Web担記事のとおり

「結論としては「外部リンクのクリック計測では漏れが発生するもの」という認識で、小細工せずにおくのが良い」

に賛成です。

でも、お客さんに出すクリックレポートが、素で入れると、0件になったりして恥ずかしいケースでは、小細工で良いと思う。
うーん、すごい細かいエントリだな・・・。