target = _blank不适用于GA出站链接跟踪

时间:2014-11-14 21:02:15

标签: javascript jquery google-analytics event-tracking outbound

我想跟踪出站链接的点击次数并实施以下代码:

GA代码

var trackOutboundLink = function(url) {
   ga('send', 'event', 'outbound', 'click', url, {'hitCallback':
     function () {
     document.location = url;
     }
   });
}

链接

<a class="postLinks" href="<?php if (get_field('source_link')) echo get_field('source_link'); ?>" onclick="trackOutboundLink('<?php if (get_field("source_link")) echo get_field("source_link"); ?>'); return false;"><?php the_title(); ?></a>

目标= _blank

我通过jQuery添加target=_blank属性,基于网站的访问者是否勾选复选框(然后将选择存储在cookie中)。但是,如果我选择在新窗口中打开出站链接,则它不起作用。勾选复选框时,它会正确地将目标属性添加到链接中,但是当我单击链接时,它会在同一窗口中打开它。

与目标属性的链接

<a class="postLinks" href="<?php if (get_field('source_link')) echo get_field('source_link'); ?>" onclick="trackOutboundLink('<?php if (get_field("source_link")) echo get_field("source_link"); ?>'); return false;" target="_blank"><?php the_title(); ?></a>

有什么想法吗?

6 个答案:

答案 0 :(得分:14)

如果您通过更改document.location通过JavaScript更改页面网址,链接上的target =“_ blank”将无法执行任何操作。

但是,当您跟踪内部链接时,您只需要使用hitCallback。如果你有一个外部链接,因此target =“_ blank”,你的原始标签会保持打开状态,并且ga跟踪事件将照常完成 - 你不必担心在加载新页面之前确保它完成。< / p>

所以我认为您想要将您的点击处理程序更改为:

var trackOutboundLink = function(url, isExternal) {
    var params = {};

    if (!isExternal) {
        params.hitCallback = function () {
            document.location = url;
        }
    }
    ga('send', 'event', 'outbound', 'click', url, params);

    return isExternal;
}

当您将其附加为点击处理程序

onclick="return trackOutboundLink(urlGoesHere, isExternalGoesHere)"

更具体的例子:

<a href="/" onclick="return trackOutboundLink('/', false)">An internal link</a>
<a href="http://www.example.com/" onclick="return trackOutboundLink('http://www.example.com', true)">An external link</a>

答案 1 :(得分:5)

只想支持温尼伯的一些人回答上面的答案。不能让我评论,但他的解决方案有效!

Google建议的代码(无法在新标签中打开链接)是:

var trackOutboundLink = function(url) {
   ga('send', 'event', 'outbound', 'click', url, {
     'transport': 'beacon',
     'hitCallback': function(){document.location = url;}
 });
}

<a href="http://www.example.com" onclick="trackOutboundLink('http://www.example.com'); return false;">Check out example.com</a>

但是,如果您更改&#34; document.location = url;&#34; to&#34; document.location = href;&#34;并在链接标记中,更改&#34;返回false;&#34; to&#34;返回true;&#34;并添加&#34; target =&#34; _ blank&#34;,该链接将在新标签页中打开,并跟踪出站链接。

所以,有效的代码是:

var trackOutboundLink = function(url) {
  ga('send', 'event', 'outbound', 'click', url, {
    'transport': 'beacon',
    'hitCallback': function(){document.location = href;}
 });
}

<a href="http://www.example.com" onclick="trackOutboundLink('http://www.example.com'); return true;" target="_blank;">Check out example.com</a>

答案 2 :(得分:3)

这将使所有链接在新窗口中打开:

    var trackOutboundLink = function(url) {
   ga('send', 'event', 'outbound', 'click', url, {
     'transport': 'beacon',
     'hitCallback': function(){window.open(url);}
   });
}

我只是从https://support.google.com/analytics/answer/1136920

更改document.location = url;window.open(url);代码

您还可以更改函数名称,并为新窗口链接指定一个,并为同一窗口链接指定一个。这将改变第一行,如:

var trackOutboundNewWindow = function(url) {

然后链接将是

<a href="http://www.example.com" onclick="trackOutboundNewWindow('http://www.example.com'); return false;">Check out example.com</a>

答案 3 :(得分:1)

找到解决方案(截至2016年2月6日)

<script>
var trackOutboundLink = function(url) {
   ga('send', 'event', 'outbound', 'click', url, {
     'transport': 'beacon',
     'hitCallback': function(){document.location = href;}
   });
}
</script>

然后让你的链接看起来像这样......

<a href="http://www.example.com" onclick="trackOutboundLink('label name'); return true;" target="_blank">text</a>

答案 4 :(得分:0)

DRY - 使用“tracked”级别跟踪所有锚点。请注意,此代码对弹出窗口阻止程序很敏感。 window.open来电需要在ga来电之外。

/**
* Function that tracks a click on an outbound link in Analytics.
*/
$(function() {
    //only create event tracking if ga has loaded
    ga(function(){
        $("a.tracked").click(function(e) {
            var url = $(this).attr("href");
            var newWindow = ($(this)[0].target || '').toLowerCase() === '_blank';
            if(newWindow) {
                window.open(url, '_blank');
            }
            ga("send", "event", "outbound", "click", url, {
                "hitCallback": function () {
                    if(!newWindow) document.location = url;
                }
            });
            e.preventDefault();
        });
    });
});

答案 5 :(得分:-2)

这有效:

hitCallback': function(){window.open(url);}

希望事件跟踪不会受到任何影响。