竹磬网-邵珠庆の日记 生命只有一次,你可以用它来做些更多伟大的事情–Make the world a little better and easier

98月/126

Google Analytics跨域跟踪电子商务网站的实现方法

 

大多数情况遇到的是一个主域多个子域的数据追踪及谷歌关键字排名,据我目前所知的方法如下: 对所有子域使用相同的跟踪代码,然后使用过滤器来分离报告数据,这样既可以得到整站数据,又可以得到子域的数据。Google Analytics很好很强大,今天才意识到对GA的了解才仅仅入门,还有太多需要进一步研究与探索的空间,想想GA跟踪从商店到购物车的用户会话和广告系列数据,甚至是大致计算注册流程的流失率或订单的流程,我要恶补下了。

什么是跨域跟踪?

跨域跟踪是指Google Analytics在多个域(包括子域与主域)跟踪访问者的访问行为。

为什么要进行跨域跟踪?

这个问题与cookie的path、domain属性以及GA的域哈希值有关。path及domain决定了cookie的可见性。GA的 cookie默认情况下只能由设置的主域读写。虽然cookie可以在各子域间共享,但是,默认情况下,GA会为不同的子域指定不同的域哈希值,因此,子 域之间的GA数据无法共享。

另外,通过设置path可以将cookie限制仅为该域或子域下的某个目录可读写。

因此,当我们需要在子域间共享GA数据时,需要统一各子域的域哈希值。而主域间是无法共享cookie的,想一想如果你在A网站的cookie保存了密码信息,而B网站可以读取这些cookie信息是多么可怕的事情,因此,cookie自身的安全设置就禁止了这样的共享。

PS:通过不同的domain和Path设置,在一个域可以存储多组GA的cookie。

如何进行跨主域的跟踪?

主要有两种方式:

一、借助于第三方cookie。比如广告投放过程中,先在第三方域的一个页面进行跳转,然后在第三方域上设置cookie,当访问者访问A网站及B 网站时,都向第三方域发送信息,向第三方域发送请求时会在header中携带第三方域上的cookie。通过第三方域上的cookie信息就可以将访问者 在A网站及B网站的行为统一起来。

AdWords的转化跟踪就是采用这种方式。用户在点击AdWords广告时会在Google的域下写入相关cookie,当用户发生转化时,会向google发送一个图片请求,这个请求会携带之前点击广告时写入的cookie信息,从而在转化与广告点击之间建立联系。

但是,随着访问者隐私意识的不断提升,禁用第三方cookie的比例不断提升,一些浏览器的默认设置就是禁用第三方cookie,从而降低了使用第三方cookie跟踪的准确性。

二、使用第一方cookie,通过在几个主域间跳转的URL添加参数传递cookie信息。这是GA跨域跟踪采用的方式。也是本文下面将要介绍的主要内容。

如何使用GA进行跨域跟踪?

GA代码分析工具的跨域跟踪主要涉及到六个方法的使用。

1. _setDomainName

这个方法用来控制GA的cookie(__utma、__utmb、__utmc、__utmz等)的domain属性及域哈希值。默认情况 下,GA使用主域作为domain的值,通过这个方法,可以传递一个参数指定domain的值。主要有两种用法,一种是跨子域跟踪时,将主域作为参数传 入,可以在各子域间共用一个域哈希值;一种是关闭跨子域跟踪时,可以传入一个none,这样GA会将cookie的domain设置为子域,从而将各子域 作为独立主体跟踪,且不会影响主域的GA cookie。

2._setAllowHash

这个方法用来控制域哈希值,有一个参数,其值为布尔值,默认值为true,开启域哈希值,设置为false则会将域哈希值设置为1,关闭域哈希值。

3. _setAllowLinker

这个方法用来开启或关闭通过链接接受和传递cookie。只有一个参数布尔值,默认状态下为false,关闭通过链接接受和传递cookie;当需要跨主域跟踪时,才需要开启,设置为true。开启后必须与_link或_linkByPost一起使用。

4. _link

这个方法用在需要通过链接参数传递cookie的出站a标签上。有两个参数,第一个为URL,第二个为是否使用#传递cookie参数,此参数可选。

5. _linkByPost

这个方法通过将一个字符串附加到引荐表单的操作值 (HTTP POST),从而将 Cookie  从引荐表单传递到字符串中包含的另一网站。在从一个网站到第三方购物车网站跟踪用户行为时通常使用此方法,但也可用于将 Cookie  数据发送到弹出式窗口或 iFrame 中的其他域。同样支持两个参数,第一个为表单对象,第二个为是否使用#传递cookie参数。

注:目前为止,很少遇到这种类型的跨域,因此,以下内容不包括_linkByPost方法的使用及通过表单跨域。

6. _setCookiePath

这个方法可以将GA cookie的读写仅限于该域下的某个子目录。

常用的GA跨域跟踪情境及GA代码部署方式

了解了上面的基础知识,下面介绍一下常见的GA跨域跟踪情境及GA代码部署方式。

单一主域多个子域作为一个整体跟踪

这是最常见,同时也是最简单的跨域跟踪情境回报率 。根据上面的介绍,我们知道这种情况只是要在同一主域的不同子域间共享域哈希值。只需在_trackPageview方法前调用_setDomainName方法指定主域名。

GATC样例:

<script> 

var _gaq = _gaq || [];

_gaq.push(['_setAccount','GA网络资源ID']);

_gaq.push(['_setDomainName','你的主域']);

_gaq.push(['_addOrganic','baidu','word']);

_gaq.push(['_addOrganic','soso','w']);

_gaq.push(['_addOrganic','sogou','query']);

_gaq.push(['_trackPageview']);

_gaq.push(['_trackPageLoadTime']);

(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);

})();

</script>

注:本文的GATC都是以异步代码为准。

单一主域多个子域,整个主域作为一个整体跟踪,各个子域也各自作为一个整体跟踪

这种情况与上面的情况相比还涉及到多跟踪器部署。因为,对于每一个页面需要部署两个GA跟踪器,一个是主域的跟踪器,一个是子域的跟踪器。

跟踪器在GATC中用来标识GA账户的对象,异步代码的默认情况下,GA会使用一个名称为空的对象来标识GA账户。

这里的一个技巧是一个域不考虑path的情况下,郑州房产 www.zhengzhoufang.com只能存在两组GA cookie。一组是主域的cookie,一组是子域的cookie。

一个跟踪器使用_setDomainName(‘none’);,这个跟踪器会将cookie限制在子域,用于跟踪子域的流量,另一个跟踪器则调用_setDomainName(‘你的主域’),这个跟踪器使用的是主域的cookie,用于跟踪整个主域的流量。

GATC样例如下:

<script> 

var _gaq = _gaq || [];

_gaq.push(['_setAccount', '子域的网络资源ID']);

_gaq.push(['_setDomainName','none']);

_gaq.push(['_addOrganic','baidu','word']);

_gaq.push(['_addOrganic','soso','w']);

_gaq.push(['_addOrganic','sogou','query']);

_gaq.push(['_trackPageview']);

_gaq.push(['_trackPageLoadTime']);

_gaq.push(['t2._setAccount', '主域的网络资源ID']);

_gaq.push(['t2._setDomainName','你的主域']);

_gaq.push(['t2._addOrganic','baidu','word']);

_gaq.push(['t2._addOrganic','soso','w']);

_gaq.push(['t2._addOrganic','sogou','query']);

_gaq.push(['t2._trackPageview']);

_gaq.push(['t2._trackPageLoadTime']);

(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);

})();

</script>

注:部署多跟踪器时,需要注意,对于其他的一些自定义GATC,比如事件跟踪、自定义变量、电子商务也都需要指明跟踪器。如果这些数据是两个跟踪器所在的GA账户都需要的,则需要针对每一个跟踪器添加一次。

单一主域多个子域,整个主域作为一个整体跟踪,各个子目录也各自作为一个整体跟踪

这种情形与上面的情形类似,所不同的就是添加_setCookiePath指定cookie所属的目录。GATC样例如下:

<script> 

var _gaq = _gaq || [];

_gaq.push(['_setAccount', '子目录的网络资源ID ']);

_gaq.push(['_setDomainName','none']);

_gaq.push(['_setCookiePath', '/子目录名称/']);

_gaq.push(['_addOrganic','baidu','word']);

_gaq.push(['_addOrganic','soso','w']);

_gaq.push(['_addOrganic','sogou','query']);

_gaq.push(['_trackPageview']);

_gaq.push(['_trackPageLoadTime']);

_gaq.push(['t2._setAccount', '主域的网络资源ID ']);

_gaq.push(['t2._setDomainName','你的主域']);

_gaq.push(['t2._addOrganic','baidu','word']);

_gaq.push(['t2._addOrganic','soso','w']);

_gaq.push(['t2._addOrganic','sogou','query']);

_gaq.push(['t2._trackPageview']);

_gaq.push(['t2._trackPageLoadTime']);

(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);

})();

</script>

多个主域作为一个整体跟踪

跨主域跟踪才是GA中较复杂的情况,除了需要在GATC中作出修改,还需要在跨域的链接及表单上作出对应的修改。

首先,需要调用_setDomainName(‘主域名’)及_setAllowHash(false)将域哈希值关闭。这里没有使用 _setDomainName(‘none’)的原因是_setDomainName(‘none’)会将GA  cookie的Domain属性设置子域,这样的话,会将情况变得更复杂,我们需要在各个子域之间的跳转链接传递cookie。

其次,需要调用_setAllowLinker(true),开启通过URL参数接受和传递cookie值。

最后,也是最复杂的,在每个出站链接上调用_link方法。

GATC样例如下:

<script> 

var _gaq = _gaq || [];

_gaq.push(['_setAccount', '总的网络资源ID ']);

_gaq.push(['_setDomainName','网站主域']);

_gaq.push(['_setAllowLinker', true]);

_gaq.push(['_setAllowHash', false]);

_gaq.push(['_addOrganic','baidu','word']);

_gaq.push(['_addOrganic','soso','w']);

_gaq.push(['_addOrganic','sogou','query']);

_gaq.push(['_trackPageview']);

_gaq.push(['_trackPageLoadTime']);

(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);

})();

</script>

主域间跳转链接的_link方法使用样例:

<a href=”http://example.com/test.html[/url]” 

onclick=”_gaq.push(['_link', 'http://example.com/test.html']); return false;”>click me</a>

手动在每个主域间跳转的链接上添加_link方法几乎是不可能完成的任务。可以利用下面的JS遍历a标签,在主域间跳转的链接上添加_link方法。

<script> 

var oldwhandler=window.onload

window.onload =function whandler () {

if (!!oldwhandler){oldwhandler()};

var links = document.getElementsByTagName(‘a’);

for (var x=0; x < links.length; x++) {

var oldlhandler=links[x].onclick

links[x].onclick = function () {

if (!!oldlhandler){oldlhandler()};

var mydomain = new RegExp(‘你的主域名’, ‘i’);//不包括.com、.cn等后缀

if(!mydomain.test(this.getAttribute(‘href’))) {

_gaq.push(['_link', this.getAttribute("href")]);return false;

}

};

}

}

</script>

注:这里需要注意的是,这段JS必须在页面完全加载后才会执行,因此,当访问者在页面没有加载完成前点击跨主域的链接,会导致跨域跟踪失败。

多个带有子域的主域,每个主域作为一个整体跟踪,且多个主域作为统一的整体跟踪

这种跨主域跟踪是更复杂的情况。除了上面的设置外,还涉及到多跟踪器。

GATC样例:

<script> 

var _gaq = _gaq || [];

_gaq.push(['_setAccount', '具体主域的网络资源ID ']);

_gaq.push(['_setDomainName','网站主域']);

_gaq.push(['_setAllowHash', false]);

_gaq.push(['_setAllowLinker', true]);

_gaq.push(['_addOrganic','baidu','word']);

_gaq.push(['_addOrganic','soso','w']);

_gaq.push(['_addOrganic','sogou','query']);

_gaq.push(['_trackPageview']);

_gaq.push(['_trackPageLoadTime']);

_gaq.push(['t2._setAccount', '总的网络资源ID ']);

_gaq.push(['t2._setDomainName','网站主域']);

_gaq.push(['t2._setAllowHash', false]);

_gaq.push(['t2._setAllowLinker', true]);

_gaq.push(['t2._addOrganic','baidu','word']);

_gaq.push(['t2._addOrganic','soso','w']);

_gaq.push(['t2._addOrganic','sogou','query']);

_gaq.push(['t2._trackPageview']);

_gaq.push(['t2._trackPageLoadTime']);

(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);

})();

</script>

喜欢这个文章吗?

考虑订阅我们的RSS Feed吧!

发布在 邵珠庆

评论 (6) 引用 (0)
  1. The aim of life is to live, and to live means to be aware, joyously, drunkenly, serenely, divinely aware.

  2. Be of love a little more careful than of anything.

  3. 这种方法还是挺实用的,感谢分享。做电子商务就是需要你们这种人才。

  4. A simple and ineltligent point, well made. Thanks!


取消回复

还没有引用.