概要
そんな気はしてたけど、下記のようにonclick
で_gaq.push()
するとページ遷移でトラッキングが中断されて計測漏れすることがあるらしい。
<a href="hoge.html" onclick="_gaq.push(['_trackPageview', 'click/hoge']);">hogeへ</a>
_trackPageView
や_trackEvent
のコールバックを設定できるようになったので、トラッキング完了してからページ遷移することで計測漏れをなくせるはず。
_gaq.push(['_trackPageview', {
page : 'click/hoge',
hitCallback: function () {
console.log('トラッキング完了!');
}
}]);
コールバックを使ってトラック完了後にページ遷移する
注意点としては、Ctrl
やCommand
を押下しながらのリンククリックや、target
が_self
以外の時は別窓で開くのでそもそもコールバックで何かする必要はないということ。同じ窓でページ遷移する場合のみコールバックでページ遷移する(if
内の処理)。
$.extend($, {
gaPageview: function(page, callback) {
_gaq.push([
'_trackPageview', {
page: page,
hitCallback: callback
}
]);
}
});
$.fn.extend({
gaPageview: function(attr) {
return this.on('click', function(e) {
var $el, callback, page, target;
$el = $(this);
page = $el.attr(attr);
if (page == null) {
return;
}
if ($el.is('a')) {
target = $el.attr('target');
if (!e.ctrlKey && !e.metaKey && (!target || target === '_self')) {
e.preventDefault();
callback = function() {
location.href = $el.attr('href');
};
}
}
$.gaPageview(page, callback);
});
}
});
こんな感じでjQueryを拡張しておくと、下記のように設定も楽。
$(function () {
$('a[data-ga]').gaPageview('data-ga');
});
<ul>
<li><a href="#hoge" data-ga="internal">internal</a></li>
<li><a href="dummy.html" data-ga="none">none</a></li>
<li><a href="dummy.html" target="" data-ga="empty">empty</a></li>
<li><a href="dummy.html" target="_self" data-ga="_self">_self</a></li>
<li><a href="dummy.html" target="_blank" data-ga="_blank">_blank</a></li>
<li><a href="dummy.html" target="dummy" data-ga="dummy">dummy</a></li>
</ul>
関連記事
Googleアナリティクス非同期コードにおける新しいAPIについて|コラム アユダンテ株式会社
Advanced Configuration - Web Tracking (analytics.js) - Google Analytics — Google Developers
JavaScript - この夏Google Analyticsが新しくなるって知ってた?Universal Analyticsを予習しよう - Qiita [キータ]