谷歌分析 - 一个页面上的多个跟踪器(cookie冲突)

时间:2009-08-06 13:56:51

标签: javascript cookies google-analytics widget

我正在编写一个应该嵌入其他人网站(一种小部件)的Web应用程序。我正在使用Google Analytics跟踪在嵌入网站上访问我脚本的所有实例的所有人。问题是我不知道如何使用它,因此它不会干扰这些网站自己的Google Analytics帐户。我将跟踪器变量存储在命名空间中,所以我认为应该这样做,但我还没有意识到GA将其设置存储在cookie中(__ utma,__ utmz等),并且这些cookie都被两个跟踪器使用,如果在同一页面上有两个...例如,如果我使用_setVar在Google Analytics中存储某种用户定义的变量,并且嵌入网站也这样做,我们会覆盖彼此的值......

当然,如果谷歌提供了一种将cookie的名称更改为自定义的方法,那将是最简单的,但我找不到任何方法。我想过使用cookie域或路径强制单独的cookie,但是这不起作用,因为如果我将域或路径设置为真实域/路径之外的其他内容,则重新加载后该页面的cookie不可读。 ..

有没有人知道如何在一个页面上安装两个跟踪器并让它们使用单​​独的cookie,以便它们不会覆盖彼此的设置?

或者,如果那是完全不可能的 - 是否有任何其他分析服务具有与GA类似的功能? (它必须具有事件和广告系列跟踪等高级功能......)

9 个答案:

答案 0 :(得分:56)

现在使用新的异步跟踪代码变得简单了。 :)

https://developers.google.com/analytics/devguides/collection/gajs/#MultipleCommands

答案 1 :(得分:18)

您可以在网页上安装多个Google Analytics跟踪代码实例,以便将数据发送到您帐户中的多个媒体资源。 https://support.google.com/analytics/answer/1032400?hl=en

或者您可以根据Google的说明发挥创意并执行以下操作。 https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced#multipletrackers

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-XXXX-Y', 'auto');
  ga('create', 'UA-XXXX-Y', 'auto', {'name': 'newTracker'});
  ga('send', 'pageview');
  ga('newTracker.send', 'pageview');

</script>

答案 2 :(得分:10)

不必使用不同的Cookie名称,因为Google Analytics可以在同一页面上与多个跟踪器配合使用。查看问题 Google Analytics - Multiple Trackers for Several Accounts? 的答案。

更新

事实证明,使用multiple trackers is a working method but has some pitfalls。其中之一就是,您不能为每个用户细分应用不同的用户细分。 John Henson演示了coerces GA to use different cookies的解决方法,您可能应该检查它。

答案 3 :(得分:8)

如果有人仍然遇到此问题并希望轻松粘贴,我的问题就是使用我自己的谷歌跟踪功能将我的代码添加到可能也在使用谷歌跟踪的其他人的网页上。我已对此进行了测试并确认其按预期工作:

var _gaq = _gaq || [];

_gaq.push(['some_unique_name._setAccount', 'UA-xxxxxxxx-1']);
_gaq.push(['some_unique_name._trackPageview']);

(function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

我也在使用事件

_gaq.push(['some_unique_name._trackEvent', 'Event Category', 'Event Action', 'Event Label']);

如果有人发现问题,请告诉我。

答案 4 :(得分:3)

根据Török列出的documentation,似乎正确的答案是使用_setCookiePath。这会导致每个跟踪器使用完全不同的cookie。

来自网站的示例代码:

<script type=”text/javascript”>
    var pageTracker = _gat._getTracker(”UA-11111-1″);

    pageTracker._setDomainName(’domain.com’);

    pageTracker._setCookiePath(’/subdirectory/’);
    pageTracker._trackPageview();

    var otherTracker = _gat._getTracker(”UA-22222-1″);
    otherTracker._setDomainName(’domain.com’);
    otherTracker._trackPageview();
</script>

当您从一个域链接到另一个域时,发布到另一个域的每个链接都必须如下所示:

<a href="pageTracker._linkByPost('otherdomain.com/petStoreCart/legalTerms.php');"

这将添加Google Analytics特定的查询字符串值,上述脚本将使用这些值来设置Cookie(source)。

答案 5 :(得分:3)

Google似乎反对这种做法:

  

在单个网页上安装多个Google Analytics跟踪代码实例不是受支持的实施方案。我们建议您删除除一个实例以外的所有实例,并确保在您要跟踪的每个页面上安装了正确配置文件中的代码。

https://support.google.com/analytics/bin/answer.py?hl=en-GB&answer=1032400

答案 6 :(得分:1)

我在我们的网站和客户网站上使用了这种结构,它就像一个魅力......

<script type="text/javascript"> 
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");    
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js'     type='text/javascript'%3E%3C/script%3E")); 
</script> <script type="text/javascript"> 

try {

//Original tracking
var pageTracker_ORIG = _gat._getTracker("UA-XXXXXXX-1");
pageTracker_ORIG._setDomainName('.sleepinggiantmedia.co.uk');
pageTracker_ORIG._trackPageview();

//New Analytics tag
var pageTracker_SGM = _gat._getTracker("UA-XXXXXXX-1");
pageTracker_SGM._setDomainName('.sleepinggiantmedia.co.uk');
pageTracker_SGM._trackPageview();


} catch(err) {}

答案 7 :(得分:-2)

var otherTracker = _gat._getTracker(”UA-22222-1″);
otherTracker._setDomainName(’domain.com’);
otherTracker._trackPageview();

答案 8 :(得分:-3)

This person在Google Analytics帮助中遇到了同样的问题。我建议看看这个帖子。但定期GA不支持多个跟踪器。

我自己喜欢Clicky,但这需要花钱。