Google Analytics(分析) - 记录出站链接 - 打开新窗口

时间:2012-04-21 16:24:41

标签: javascript google-analytics

我使用以下link来记录通过Google Analytics的出站链接。是否可以在新窗口中打开链接?

<script type="text/javascript">
function recordOutboundLink(link, category, action) 
{  
try {    
    var myTracker=_gat._getTrackerByName();    
    _gaq.push(['myTracker._trackEvent', category ,  action ]);    
    setTimeout('document.location = "' + link.href + '"', 100)  
 }
catch(err)
{
}
}
</script>

 <a href="http://www.example.com" onClick="recordOutboundLink(this, 'Outbound Links', 'example.com');return false;">

5 个答案:

答案 0 :(得分:5)

编辑,我忘了添加target =“_ blank”:

我会这样跟踪出站链接:

<a href="http://outgoinglink.com" target="_blank" onclick="_gaq.push(['_trackEvent','outgoing_links','outgoinglink.com'])">Link Text</a>

答案 1 :(得分:1)

杰夫的回答非常接近我解决这个问题。谷歌推荐的代码打破了target = _blank,而window.open策略被弹出窗口拦截器捕获。我像这样修改了目标测试:

if (!link.target || link.target.match(/^_(self|parent|top)$/i)){
    return false;
    setTimeout(function() { document.location = link.href }, 100);
} else {
    return true;
}

答案 2 :(得分:1)

document.location = url;替换为window.open(url),它会在新窗口中打开并同时跟踪。您不需要修改链接,只需在onclick上调用JS函数。

答案 3 :(得分:0)

以下是您提供的链接的修改后的片段,该片段既适用于在当前窗口中打开的链接,也适用于在新窗口中打开但未经任何修改的链接:

<script type="text/javascript">
// Records an event for an outbound link.  Supports links even if they open in a
// different window (target="_blank").
// Don't forget to return the return value of this function from the onclick handler.
// link - A reference to the <a> anchor object to which this call is attached
// parameters - Parameters to pass to the event, in an array:
//              category/action/label/value/noninteraction or some subset; see GA docs.
//              Pass "undefined" (the value, not the string) for unspecified optional params if necessary.
// Exmaple:
// <a href="http://www.google.com"
//    onclick="return recordOutboundLink(this, ['category', 'action', 'label', 6.6, false);">link</a>
function recordOutboundLink(link, parameters) {
    try {
        _gaq.push(['_trackEvent'].concat(parameters));
        if (link.target == '_blank') {
            return true;
        } else {
            setTimeout(function() { document.location = link.href }, 100);
            return false;
        }
    } catch (err) {
        return true;
    }
}
</script>

以下是两种链接类型。请注意,onclick处理程序在两者中都是相同的:

<a href="http://www.example.com"
   onClick="return recordOutboundLink(this, ['Outbound Links', 'example.com']);">

<a href="http://www.example.com"
   target="_blank"
   onClick="return recordOutboundLink(this, ['Outbound Links', 'example.com']);">

<强>限制

  • 如果浏览器忽略'target =“blank”'而是在同一窗口中打开URL(例如Facebook iOS应用程序内的UIWebView),则可能无法跟踪该链接。 ErikdR接受的答案也是如此。您可以添加代码来检测此类案例(例如detect ipad/iphone webview via javascript)。
  • 如果用户尝试ctrl- / shift- / cmd-单击(即在新选项卡或窗口中打开)没有'target =“blank”'的链接,则URL将在现有窗口中打开而不是在新窗口中打开。 Roslyn的代码片段(以及Google的官方代码示例)也是如此。同样,您可以添加代码来处理这些特殊情况。

答案 4 :(得分:0)

在一般情况下

更常见的情况是target是什么,比如

  • 空字符串 - <a>元素的默认值。与_self的含义相同。
  • _blank - 将网址加载到新窗口/标签页
  • _self - 网址替换当前页面。
  • _parent - 将网址加载到父框架
  • _top - 网址替换了可能加载的所有框架集
  • name - 窗口名称

你可以修改一行

setTimeout('document.location = "' + link.href + '"', 100)

到此:

setTimeout('window.open("' + link.href + '", link.target == "" ? "_self" : link.target)', 100)

奇怪的是,向""提供window.open与提供_blank相同,因此需要额外的?:运算符。

顺便提一下:您提供的代码(以及官方Google示例提供的代码)应略微修改以正常工作,请参阅How do I set up Google Analytics to track outbound links? The official example doesn't work