Javascript 跟踪Google Analytics中的所有出站链接
几个月来,我一直在使用脚本跟踪出站链接脚本可以运行,但在谷歌分析生成的报告中,许多URL的末尾都有一个尾随“:80”(默认端口号)。请继续阅读以了解更多详细信息 值得一提的是,跟踪这些出站链接的网站拥有巨大的出站流量(将你的幻想成倍增加)∞). 剧本的目的 它跟踪所有出站链接,并在Google Analytics中将其标记为“出站链接” 该脚本被大量注释,并有几个console.log()实例来帮助调试(这些都被注释掉) GA上的“出站链接”显示在: 内容>事件>热门事件>“出站链接”[点击它]>[显示所有点击URL的报告] 问题 在“Outbound Links”(出站链接)报告下,我得到了所有被点击的链接,在报告中至少有2/3的链接(可能更多)的末尾,我得到“:80”。GA将和视为不同的链接,在报告中将它们分开。这当然是不需要的 值得一提: 以“:80”结尾的链接的点击率总是比没有“:80”的链接的点击率高出40%到60% 想要的解决方案Javascript 跟踪Google Analytics中的所有出站链接,javascript,jquery,google-analytics,outbound,Javascript,Jquery,Google Analytics,Outbound,几个月来,我一直在使用脚本跟踪出站链接脚本可以运行,但在谷歌分析生成的报告中,许多URL的末尾都有一个尾随“:80”(默认端口号)。请继续阅读以了解更多详细信息 值得一提的是,跟踪这些出站链接的网站拥有巨大的出站流量(将你的幻想成倍增加)∞). 剧本的目的 它跟踪所有出站链接,并在Google Analytics中将其标记为“出站链接” 该脚本被大量注释,并有几个console.log()实例来帮助调试(这些都被注释掉) GA上的“出站链接”显示在: 内容>事件>热门事件>“出站链接”[点击它]
- 将以“:80”结尾的链接与未以“:80”结尾的链接合并,或
- 尽可能避免在链接中附加“:80”。
- 奖励:理解为什么我们得到的链接以“:80”结尾
输出中出现
:80
的原因是由于e.currentTarget.host
我不知道除了已经运行的url
变量之外,您为什么还要跟踪它,但您总是可以通过简单的字符串替换确保:80
不存在
\u gat.\u getTrackerByName()。\u trackEvent(“出站链接”,e.currentTarget.host.replace(':80',''),url,0);
Freshyeball的答案是正确的,但由于许多人一直在要求完整的答案,我将用Freshyeball的贡献发布最后的脚本
简本
完整版本(已注释且“可调试”)
window.open的问题是引用者将丢失。更好的解决方案是使用onmousedown而不是onclick。做了一些测试后,我知道使用window.open或使用setTimeout更有效。人们单击鼠标右键,但没有选择“在新选项卡中打开”或“在新窗口中打开”,这会导致误报,但onclick并不总是在所有浏览器上点击鼠标中键和右键。这是两个缺点中较小的一个
jQuery(function($){
$('a:not([href*="' + document.domain + '"])').mousedown(function(event){
// Just in case, be safe and don't do anything
if (typeof _gat == 'undefined') {
return;
}
var link = $(this);
var href = link.attr('href');
var noProtocol = href.replace(/http[s]?:\/\//, '');
// Track the event
_gat._getTrackerByName()._trackEvent('Outbound Links', noProtocol);
});
});
使用location.hostname而不是location.host.hostname不包括端口。这段代码对我很有用:
var hostname = window.location.hostname;
jQuery("body a").click(function(){
if(jQuery(this).attr("href").indexOf(hostname)== -1){
ga('send', 'event', {'eventCategory': "Outbound Links", 'eventAction': "OnClick", 'eventLabel': jQuery(this).attr("href")});
}
});
谷歌有一个官方支持的图书馆为你做这些事情 因此,您的整个分析片段将类似于:
<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
// Replace the following lines with the plugins you want to use.
ga('require', 'eventTracker');
ga('require', 'outboundLinkTracker');
ga('require', 'urlChangeTracker');
// ...
ga('send', 'pageview');
</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
<script async src="path/to/autotrack.js"></script>
window.ga=window.ga | |函数(){(ga.q=ga.q | |[]).push(参数)};ga.l=+新日期;
ga(“创建”、“UA-XXXXX-Y”、“自动”);
//用您想要使用的插件替换以下行。
ga(“要求”、“事件跟踪器”);
ga('require','outboundLinkTracker');
ga('require','urlChangeTracker');
// ...
ga(‘发送’、‘页面浏览’);
这是我使用
将其放在GA跟踪代码后面(可能在
中)
//跟踪出站链接
document.addEventListener(“DOMContentLoaded”,function()){
var trackOutboundLink=函数(url){
ga(‘发送’、‘事件’、‘出站’、‘单击’、url、{
“传输”:“信标”,
“hitCallback”:函数(){document.location=url;}
});
}
var a=document.getElementsByTagName('a');
对于(i=0;i
正如您所见,该函数包含所有锚定标记,因此我需要有一个“傻瓜式”条件来比较链接中的url与当前域的url。这就是使用if(e.currentTarget.host!=window.location.host)的想法
。我仍然需要做那个检查——或者类似的检查——因为这是确保Google Analytics中的事件跟踪只在链接指向当前域之外时发生的唯一方法。但感谢您指出了正确的方向。我将在明天推动更改,并在测试后尽快批准您的答复。;)“一经测试就批准你的回答”我发现你的答案只有一部分是正确的。那是因为接下来发生了什么”或“不正确-考虑到我们希望在GA中分配类别、操作和标签的方式。我们不希望操作与标签相同,如果我们使用e.currentTarget.href
或$(this.attr(“href”)
作为操作,就会出现这种情况。”。使用e.currentTarget.host.replace(':80','')
,我们只能以actionwww.example.com
的形式获取域,这对我们来说非常有用。参考。编辑您的答案,我会批准;)非常有价值。请考虑显示编辑后的代码。Windows不总是忽略引用者:“鼠标下移”的主要问题是它不会在一些触摸屏上工作。“一些触摸屏”,你能更具体一些吗?CTRL键检测还可以检测到中间鼠标轮是否被点击在链接上?
jQuery(function($){
$('a:not([href*="' + document.domain + '"])').mousedown(function(event){
// Just in case, be safe and don't do anything
if (typeof _gat == 'undefined') {
return;
}
var link = $(this);
var href = link.attr('href');
var noProtocol = href.replace(/http[s]?:\/\//, '');
// Track the event
_gat._getTrackerByName()._trackEvent('Outbound Links', noProtocol);
});
});
var hostname = window.location.hostname;
jQuery("body a").click(function(){
if(jQuery(this).attr("href").indexOf(hostname)== -1){
ga('send', 'event', {'eventCategory': "Outbound Links", 'eventAction': "OnClick", 'eventLabel': jQuery(this).attr("href")});
}
});
<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
// Replace the following lines with the plugins you want to use.
ga('require', 'eventTracker');
ga('require', 'outboundLinkTracker');
ga('require', 'urlChangeTracker');
// ...
ga('send', 'pageview');
</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
<script async src="path/to/autotrack.js"></script>
// TRACK OUTBOUND LINKS
document.addEventListener("DOMContentLoaded", function() {
var trackOutboundLink = function(url) {
ga('send', 'event', 'outbound', 'click', url, {
'transport': 'beacon',
'hitCallback': function(){document.location = url;}
});
}
var a = document.getElementsByTagName('a');
for(i = 0; i < a.length; i++){
if (a[i].href.indexOf(location.host) == -1 && a[i].href.match(/^http?s:\/\//i)){
a[i].onclick = function(){
trackOutboundLink(this.href);
}
}
}
});
// END