GA中涉及很多的一对多或者说多对一的问题,比如在GA的账户结构中,一个账户可以有多个媒体资源,一个媒体资源可以有多个视图,一个用户可以被授权访问视图中的某一个或多个。而本文主要讨论下GA代码部署中常涉及到的一对多或多对一问题,包括一个站点添加多套GA统计代码、多个站点添加同一套统计代码和多个站点共用同一套页面源文件的问题。
一、一个站点添加多套GA代码
这是非常常见的一种情况。比如某个站点的数据既要单独收集放在一个媒体资源下,又有作为另一个汇总型媒体资源数据的一部分,典型的例子是跨国企业在各个地区的网站都放置了一套同样的GA代码,而各地区的网站自己需要做一些精细化的数据收集工作,就需要在该地区网站上另外加一套GA代码了。
这种问题在GA中被称为多个跟踪器对象(Multiple Tracking Objects)问题。GA代码中的跟踪器对象,是ga对象调用create方法的时候创建的,即这行代码:
ga(‘create’, ‘UA-58722781-1’, ‘auto’);
像这样创建的跟踪器对象其name为t0,如果之后需要创建新的跟踪器对象,那就需要在创建时使用name字段,并且之后凡是需要使用该跟踪器对象有关的方法,都需要带上对应的name值,比如:
ga(‘create’, ‘UA-58722781-2’, ‘auto’, {‘name’: ‘b’} );
ga(‘
b.
send’, ‘pageview’);
举例,假设已经在网站上加好了一套ID为UA-58722781-1的GA代码,现在还需要加一套ID为UA-58722781-2的代码,那么代码部署的方式可以为:
<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-58722781-1’, ‘auto’);
ga(‘create’, ‘UA-58722781-2’, ‘auto’, {‘name’: ‘b’});
ga(‘send’, ‘pageview’);
ga(‘b.send’, ‘pageview’);
</script>
如上,因为ID为UA-58722781-1没有使用name,所以其name就为默认值即t0,与默认跟踪器对象有关的方法调用,其t0.可省略,即上面代码中的这个:
ga(‘send’, ‘pageview’);
实际上等价于
ga(‘ t0. send’, ‘pageview’);
二、多个站点添加同一套统计代码
1. 多个站点根域名相同
Google Analytics最新版本Universal Analytics默认就支持跨子域名的数据统计,不过需要注意的有两点:
1)基础代码中的create跟踪器对象时,可选参数需要为auto;
2)引荐排除列表需要有排除根域名的设置;
前者使得ga自动将cookie写到根域名,保证了跨子域名时用户数(Users)这一指标不会虚高;后者避免了自我引荐问题,保证会话数(sessions)的计算足够准确。
2. 多个站点根域名不相同
GA中跨根域名的数据统计,本质上是在用户从其中一个域名跳转到另一个域名时,使其cookie信息也传递过去。UA中提供了autoLink的插件专门用来支持跨根域名。其基本使用方法为,在创建跟踪器对象时,将allowLinker设置为true;在GA代码加载时,加载这个插件;定义跨域的域名,代码所在域名无需写入跨域的域名列表。
同样举个例子,如果有两个站点分别为site1.com和site2.com,这两个站点都将使用ID为UA-58722781-3的代码,site1上有链向site2的链接,site2上也有链向site1的链接,那么site1上的代码应该为:
<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-58722781-3’, ‘auto’, {‘allowLinker’: true} );
ga(‘require’, ‘linker’);
ga(‘linker:autoLink’, [‘ site2.com ‘]);
ga(‘send’, ‘pageview’);
</script>
对应地,site2上的代码应该为:
<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-58722781-3’, ‘auto’, { ‘allowLinker’: true} );
ga(‘require’, ‘linker’);
ga(‘linker:autoLink’, [‘ site1.com ‘]);
ga(‘send’, ‘pageview’);
</script>
最后,引荐排除列表中需要有site1.com和site2.com
三、多个站点共用同一套页面源文件
有时候我们可能有多个不同的站点,并让这多个站点(域名)都指向同一个IP,使用该服务器上的同一份页面源文件。这种情况下可能有两种需求,一种是各个站点的数据需要分开统计,l另一种是各个站点数据要放在一块(使用同一个媒体资源ID)。
如果需要分别看各个站点较为准确的数据,建议还是使用多个不同的ID来统计,即在GA后台新建多个不同的媒体资源,每个媒体资源对应一个站点。在实际代码部署中,根据host来判断需要创建哪个媒体资源ID。
举个例子,如果有三个不同的站点www.mysite1.com, www.mysite2.com, www.mysite3.com,在GA后台其分别对应的ID为UA-12345-1,UA-12345-2,UA-12345-3,那么在共用的页面源文件中,其代码部署可以为:
<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’);
if (document.location.host == ‘www.mysite1.com’ ) {
ga(‘create’, ‘UA-12345-1’, ‘auto’);
ga(‘send’, ‘pageview’);
} else if (document.location.host == ‘www.mysite2.com’ ) {
ga(‘create’, ‘UA-12345-2’, ‘auto’);
ga(‘send’, ‘pageview’);
} else {
ga(‘create’, ‘UA-12345-3’, ‘auto’);
ga(‘send’, ‘pageview’);
}
</script>
以上代码虽然可用,但还比较粗糙,使用时请根据实际情况改写判断的规则,如将host等于的判断改为host子串匹配。
以上可满足多个不同域名分开统计数据的需求,但如果还需要看汇总数据,则需要再加一套GA代码,其添加方法参照上述第一种情况。如果多个站点间还存在相互链接的情况,那么还需要设置跨域,其设置方法参照第二种情况中的多个站点根域名不相同。
好文啊,正在用谷歌分析,感觉学一学