スクリプトを使用してアウトバウンド リンクを追跡してから数か月が経ちました。スクリプトは機能しますが、Google アナリティクスによって生成されたレポートでは、多くの URL の末尾に「:80」(デフォルトのポート番号) が付きます。詳細については、以下をお読みください。
これらのアウトバウンド リンクを追跡している Web サイトには、膨大な量のアウトバウンド トラフィックがあることに注意してください (想像力を ∞ 倍してください)。
スクリプトの目的
すべてのアウトバウンド リンクを追跡し、Google アナリティクスで「アウトバウンド リンク」としてタグ付けします。
スクリプトには多くのコメントが付けられており、デバッグに役立つように console.log() のインスタンスがいくつかあります (これらはコメント アウトされています)。
「Outbound Links」は、GA で次のように表示されます。
コンテンツ > イベント > トップ イベント > 「アウトバウンドリンク」 [クリック] > [クリックされたすべての URL を示すレポート]
問題
クリックされたすべてのリンクを取得する「アウトバウンド リンク」レポートでは、報告されたすべてのリンクの少なくとも 2/3 (おそらくそれ以上) の最後に「:80」が表示されます。GA はhttp://example.comとhttp://example.com:80を別のリンクとして扱い、レポート内でそれらを分離します。もちろん、それは望ましくありません。
言及する価値があります:
":80" で終わるリンクは常に、":80" を付けないリンクよりもヒット数が多く、40% から 60% ヒットします。
望んでいた解決策
- ":80" で終わるリンクをそれがないリンクとマージする、または
- 可能であれば、リンクに「:80」を追加しないでください。
- おまけ: 「:80」で終わるリンクを取得する理由を理解してください。
スクリプト
// Outbound Link Tracking with Google Analytics
// Requires jQuery 1.7 or higher (use .live if using a lower version)
$(function() {
$("a").on('click',function(e){
var url = $(this).attr("href");
// Console logs shows the domain name of the link being clicked and the current window
// console.log('e.currentTarget.host: ' + e.currentTarget.host);
// console.log('window.location.host: ' + window.location.host);
// If the domains names are different, it assumes it is an external link
// Be careful with this if you use subdomains
if (e.currentTarget.host != window.location.host) {
// console.log('external link click');
// Outbound link! Fires the Google tracker code.
_gat._getTrackerByName()._trackEvent("Outbound Links", e.currentTarget.host, url, 0);
// Checks to see if the ctrl or command key is held down
// which could indicate the link is being opened in a new tab
if (e.metaKey || e.ctrlKey) {
// console.log('ctrl or meta key pressed');
var newtab = true;
}
// If it is not a new tab, we need to delay the loading
// of the new link for a just a second in order to give the
// Google track event time to fully fire
if (!newtab) {
// console.log('default prevented');
e.preventDefault();
// console.log('loading link after brief timeout');
setTimeout('document.location = "' + url + '"', 100);
}
}
/*
else {
console.log('internal link click');
}
*/
});
});