我们有一个网站,我们的应用程序在多个域和子域的 iFrame 中运行。主网站 (www.example.com) 只有静态内容,其中包含指向带有框架应用程序站点的站点的链接。所以 sub.example.com、sub2.example.com、search.another.com 都有运行应用程序的所有 iFrame。
我们希望使用 Google Analytics (GA) 跟踪所有这些网站。子域跟踪工作正常,但我找不到使跨域准确工作的方法。主要问题是我无法在顶级域之间共享访问者 cookie 信息。因此,访问 sub.example.com 和 search.another.com 的同一访问者会获得 2 个不同的 cookie,这会导致各种问题。(例如膨胀的访客计数器,无法正确跟踪推荐信息等)
你能帮我解决这个问题吗?
(我在网上做了一个相当彻底的搜索,尝试了几个场景,但到目前为止没有运气)
这是我们 GA 实现的核心:
在 sub.example.com(以及主网站的所有子域)上
_gaq.push(['b._setAccount', 'UA-XXX']);
_gaq.push(['b._setDomainName', 'example.com']);
_gaq.push(['b._setAllowLinker', true]);
_gaq.push(['b._addIgnoredRef', 'example.com']);
_gaq.push(['b._addIgnoredRef', 'search.another.com']);
_gaq.push(['b._trackPageview']);
在 search.another.com 上(所有外部子域都有变体)
_gaq.push(['b._setAccount', 'UA-XXX']);
_gaq.push(['b._setDomainName', 'search.another.com']);
_gaq.push(['b._setAllowLinker', true]);
_gaq.push(['b._addIgnoredRef', 'example.com']);
_gaq.push(['b._addIgnoredRef', 'search.another.com']);
_gaq.push(['b._trackPageview']);
就在所有页面上的 iframe 之后
<script type="text/javascript">
_gaq.push(function ()
{
var iFrameTracker = _gat._getTrackerByName('b');
var iframe = document.getElementById('myframe');
iframe.src = iFrameTracker._getLinkerUrl(iframe.src);
});
</script>
在 www.example.com 上的链接上
<a href="http://search.another.com" onClick="_gaq.push(function ()
{
var tracker = _gat._getTrackerByName('b');
var linkerUrl = tracker._getLinkerUrl('http://search.another.com');
});">
linkerUrl 具有正确的 Url 和 www.example.com 的 cookie。但出于某种奇怪的原因,GA 在 search.another.com 上分配了一个新的 cookie。我尝试将域名设置为无(['b._setDomainName', 'none']),但没有帮助。我不确定我是否在这里遗漏了一个简单的基本点。我猜这个问题可能与跨域 iFrame 有关,链接可以在 iFrame 或框架集中。所以我想跟踪两者。
我使用 Chrome GA Debugger 插件进行调试。
(顺便说一句,理论上我们可以拥有无限数量的顶级/子域。因此,不能在 GA 上手动为每个域创建过滤器。)