从之前的Google Analytics实施切换到跨域跟踪

时间:2010-06-24 10:33:07

标签: google-analytics cross-domain

我们已经实现了GA的简单实现,并且已经有一段时间了,我们使用的唯一其他方法是setVar和setSessionTimeout。有没有办法我们可以切换到GA的跨域跟踪配置(某些链接通过_link方法连接),而不会丢失客户端系统上的现有跟踪数据?

我已经进行了大量测试,解决的问题越多,出现的问题就越多。简而言之:

预先实施,客户有这些cookie:__ utm(a,b,c,z,v)。第一步是更改代码并添加_setAllowLinker和_setAllowHash方法,但这会引发TypeError。我发现可以通过在调用pageTracker方法之前删除__utmv cookie,然后再次调用_setVar来避免这种情况。

新代码似乎工作正常而不会抛出错误:

document.cookie = '__utmv=; expires=Tue, 22 Jun 2010 11:57:00 GMT;'+
  ' path=/; domain=XXXXXXX';
var pageTracker=_gat._getTracker(UA-XXXXXXXX);
pageTracker._setAllowLinker(true);
pageTracker._setAllowHash(false);
pageTracker._setSessionTimeout(XXXXX);
pageTracker._setVar(XXXXX);
pageTracker._trackPageview();

现在更新cookie不使用哈希值,因此现在可以跨域使用它们的值,但问题是__utm cookie中的值已使用新值刷新,这意味着我们丢失了用户历史记录(新的访问会爆炸)。

例如,__ utma:

  • 之前 - XX-HASHVALUE-XX.1379282990.1277294951.1277294951.1277294951.1
  • 之后 - 1.26318765.1277294984.1277294984.1277294984.1

如果无法在不丢失用户历史记录的情况下切换到跨域GA配置,是否有办法在链接上伪造它,这将点击进入下一个域。也就是说,从cookie构建链接URL并用1?

替换所有hashvalue前缀

谢谢!

1 个答案:

答案 0 :(得分:0)

不幸的是,使用ga.js API似乎没有正确的方法。我已经解决了这个问题:

var pageTracker = _gat._getTracker("UA-123456-7");
if (getCookie('__utma') && getCookie('__utma').substr(0, 2) == '1.') {
    // hash value safely removed, flick GA API switch
    pageTracker._setAllowHash(false);
}
pageTracker._trackPageview();

if (getCookie('__utmc') != '1') {
    // remove hash values from all GA cookies
    eraseCookieHash();
}

eraseCookieHash函数中,手动更新每个Cookie,使用http://code.google.com/apis/analytics/docs/concepts/gaConceptsCookies.html处的指南将哈希值替换为1,以确定过期值。