Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跟踪Google Analytics中的所有出站链接_Javascript_Jquery_Google Analytics_Outbound - Fatal编程技术网

Javascript 跟踪Google Analytics中的所有出站链接

Javascript 跟踪Google Analytics中的所有出站链接,javascript,jquery,google-analytics,outbound,Javascript,Jquery,Google Analytics,Outbound,几个月来,我一直在使用脚本跟踪出站链接脚本可以运行,但在谷歌分析生成的报告中,许多URL的末尾都有一个尾随“:80”(默认端口号)。请继续阅读以了解更多详细信息 值得一提的是,跟踪这些出站链接的网站拥有巨大的出站流量(将你的幻想成倍增加)∞). 剧本的目的 它跟踪所有出站链接,并在Google Analytics中将其标记为“出站链接” 该脚本被大量注释,并有几个console.log()实例来帮助调试(这些都被注释掉) GA上的“出站链接”显示在: 内容>事件>热门事件>“出站链接”[点击它]

几个月来,我一直在使用脚本跟踪出站链接脚本可以运行,但在谷歌分析生成的报告中,许多URL的末尾都有一个尾随“:80”(默认端口号)。请继续阅读以了解更多详细信息

值得一提的是,跟踪这些出站链接的网站拥有巨大的出站流量(将你的幻想成倍增加)∞).

剧本的目的 它跟踪所有出站链接,并在Google Analytics中将其标记为“出站链接”

该脚本被大量注释,并有几个console.log()实例来帮助调试(这些都被注释掉)

GA上的“出站链接”显示在:

内容>事件>热门事件>“出站链接”[点击它]>[显示所有点击URL的报告]

问题 在“Outbound Links”(出站链接)报告下,我得到了所有被点击的链接,在报告中至少有2/3的链接(可能更多)的末尾,我得到“:80”。GA将和视为不同的链接,在报告中将它们分开。这当然是不需要的

值得一提:

以“:80”结尾的链接的点击率总是比没有“:80”的链接的点击率高出40%到60%

想要的解决方案
  • 将以“: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','')
,我们只能以action
www.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