Google Analytics - 同一页面上使用多个跟踪器(cookie 冲突)

55
我正在编写一个网络应用程序,它将嵌入到其他人的网站中(类似小部件)。我正在使用Google Analytics来跟踪访问嵌入在这些网站上的所有脚本实例的人数。问题是,我不知道如何使用它,以使它不会干扰那些网站自己的Google Analytics账户。我将跟踪器变量存储在命名空间中,所以我认为这样做就可以了,但我没有意识到GA将其设置存储在cookie中(__utma、__utmz等),而这些cookie被两个跟踪器都使用,如果同一页有两个跟踪器...例如,如果我使用_setVar在Google Analytics中存储某种用户定义的变量,并且嵌入的网站也这样做,我们会互相覆盖彼此的值...
当然,如果Google提供一种方法来更改cookie的名称为自定义名称,那将是最简单的,但我找不到任何方法来做到这一点。我考虑过使用cookie域或路径来强制使用单独的cookie,但这行不通,因为如果我将域或路径设置为与真实域/路径不同的内容,则cookie在重新加载后无法读取...
有没有人知道如何在一个页面上使用两个跟踪器并使它们使用单独的cookie,以便它们不会互相覆盖?
或者,如果这完全不可能——是否有任何其他具有类似GA功能且可以实现此目的的分析服务?(它必须具有高级功能,如事件和活动跟踪...)

2
为什么你应该可以访问不属于你的网站的访客数据?你的组件是如何嵌入的? - pjp
6
因为我想知道小部件的使用方式。它实际上更像是一个嵌入式网站而不是小部件,“小部件”暗示着一些小而不复杂的东西... 它通过在网站中插入<script...>来实现嵌入,然后使用Javascript动态创建小部件的GUI,使用AJAX(JSONP)下载各种数据,并且应该使用Google Analytics跟踪用户在小部件内的操作。 - Kuba Suder
9个回答

56

9
更新链接:http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html#MultipleCommands - cope360
4
简单情况下可能可行,但需要小心谨慎,参见Torok帖子中的链接。Google不建议在同一页上使用多个分析帐户:https://developers.google.com/analytics/resources/concepts/gaConceptsCookies?hl=nl-NL = 如果您有多个跟踪相同网页或页面集的帐户,两个帐户将从同一组cookie中读取和设置数据。通常不建议这种设置。 - Clarence Liu

18
您可以在网页上安装多个Google Analytics跟踪代码实例,以向您的帐户中的多个属性发送数据。 https://support.google.com/analytics/answer/1032400?hl=zh-Hans 或者,您可以按照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>

10

我不是很确定。如果两个跟踪器都调用 _setVar 来设置自定义跟踪变量,似乎只有第二个跟踪器的变量可以在 cookies 中找到,而第一个跟踪器的变量会丢失。除非我做错了什么... - Kuba Suder
@Psionides:看起来是这样的 - 到目前为止,我总是为不同的跟踪器使用相同的设置。我更新了我的答案。 - viam0Zah

8

如果还有人遇到这个问题并且需要一个简单的粘贴方法,我的问题是我在其他人的网页上添加代码时使用了自己的Google跟踪,这些网页可能也在使用Google跟踪。我已经测试过并确认它可以正常工作:

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']);

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

谢谢arlomedia。这花了一些时间才弄清楚,因为这个页面和许多其他页面都有很多复杂的解决方案。 - Miles Lukas

3
根据Török提供的文档,正确的答案似乎是使用_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 (来源)。

是的,但它不能跨域工作 - 我无法为在地址栏中显示的不同域设置 cookie。因此,如果我的小部件嵌入在例如 http://website.com 中,并且脚本是从 http://widget.com 加载的,则我只能为 http://website.com 设置 cookie(并且嵌入式网站本身也是如此)- 我们仍然有冲突。 - Kuba Suder
为跨域链接添加了更多信息。 - Richard Nienaber

3

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) {}


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

-3

这个人在Google Analytics帮助论坛上遇到了同样的问题。我建议您查看一下该帖子。但通常情况下,GA不支持多个跟踪器。

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


是的,我看到了,但似乎建议的解决方案要么是下载GA脚本并对其进行修改,要么是从外部修改其内部变量——这两种方法听起来都很危险和不稳定... - Kuba Suder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接