Google Analytics中做跨域/跨站跟踪

Google Analytics 黄业忠 6年前 (2016-04-08) 5349次浏览 已收录 0个评论

Update:2021-10

跨域跟踪,也叫做跨站跟踪,是用户在不同网站(域名)之间跳转的时候能识别到是同一个人。

在实际的过程中,有时候多个站点需要看成一个站点来评估网站的流量情况,比如同一产品对不同地域使用不同域名,或壳站和主站之间,或主站与商城网站,这就需要对网站做跨域跟踪

原理

我们知道,Google Analytics是通过Client ID识别用户的,而Client-ID 是随机生成的独一无二的字符串,生成后的 ID 存储在浏览器的 Cookie 中,这样用户再次访问同一网站时即可被识别。

假设有两个网站A和B,当从A站点跳转到B站点的是时候用同一个Client ID,那么就可以实现跨域跟踪了,具体实现是通过URL传递Client ID,用户从A网站点击跳转到B网站,到达B网站的着陆页会附带A网站Client ID,然后B网站将这个Client ID作为自己的Client ID,从而识别到是同一个用户。

Google Analytics中做跨站跟踪主要是对allowLinker和linker做设置,allowLinker是链接器参数,作为是从URL上获取Client  ID并将其设置为自己的Client ID,linker是链接器插件,是从A跳转到B的时候,将A的Client ID添加到B的着陆页上。

假设现在有A.com和B.com需要做跨域跟踪,看看如何设置:

Universal Analytics跨站

Universal Analytics,其实就是统一版跟踪代码,有两种方式可以实现跨域:

硬编码

硬编码就是直接在Google Analytics的跟踪代码做修改实现跨域跟踪,未修改的跟踪代码是:

<!-- Google Analytics -->
<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','https://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->

A网站的跟踪代码修改为:

<!-- Google Analytics -->
<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','https://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXXXX-Y', 'auto', {'allowLinker': true}); 
ga('require', 'linker'); 
ga('linker:autoLink', ['B.com'] );
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->

B网站的跟踪代码修改为:

<!-- Google Analytics -->
<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','https://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXXXX-Y', 'auto', {'allowLinker': true}); 
ga('require', 'linker'); 
ga('linker:autoLink', ['A.com'] );
ga('send', 'pageview');

</script>
<!-- End Google Analytics -->

这个就是跨站跟踪,看上去和官方的示例是一模一样的,但往往实际上却是错误的,因为你除了跨站跟踪,往往还有一个单站的跟踪,也就是一个网站向多个GA发送数据,这种情况是需要使用跟踪器的,官方的跨站跟踪的示例是只做默认跟踪的,所以使用默认生成的跟踪器就可以的了,但你是向多个GA跟踪数据,所以需要使用跟踪器。

添加跟踪器后A网站的跟踪代码为:

<!-- Google Analytics -->
<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','https://www.google-analytics.com/analytics.js','ga');


ga('create', 'UA-XXXXXXX-Y', 'auto', 'clientTracker',{'allowLinker': true}); 
ga('require', 'linker'); 
ga('linker:autoLink', ['B.com'] );
ga('clientTracker.send', 'pageview');

ga('create', 'UA-XXXXX-Y', 'auto'); 
ga('send', 'pageview')

</script>
<!-- End Google Analytics -->

添加跟踪器后B网站的跟踪代码为:

<!-- Google Analytics -->
<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','https://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXXXX-Y', 'auto','clientTracker', {'allowLinker': true}); 
ga('require', 'linker'); 
ga('linker:autoLink', ['A.com'] );
ga('clientTracker.send', 'pageview');
ga('create', 'UA-XXXXX-Y', 'auto'); 
ga('send', 'pageview');

</script>
<!-- End Google Analytics -->

这样就可以实现想多个媒体资源/GA发送数据了。

注意:上面的代码是先跨站跟踪后做普通跟踪,不要先普通跟踪后跨站跟踪,因为这样会导致跨站跟踪的时候的Client ID覆盖了普通跟踪生成的Client ID,会影响原有的数据跟踪,普通跟踪中会将看做是一个New Users,还有另一种处理方式,就是将跨站传递的Client ID不适用默认的_ga用另一个cookie保存,这个专用于跨站,那么跟踪代码可以改为:

<!-- Google Analytics -->
<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','https://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXXXX-Y', 'auto','clientTracker', {name: 'rollup', cookieName: '_rollupGa','allowLinker': true}); 
ga('require', 'linker'); 
ga('linker:autoLink', ['A.com'] );
ga('clientTracker.send', 'pageview');
ga('create', 'UA-XXXXX-Y', 'auto'); 
ga('send', 'pageview');

</script>
<!-- End Google Analytics -->

是不是觉得有些复杂呢?所以我推荐使用GTM布署,GTM的方法就简单多了。

GTM上实现

每个站点对应一个GTM容器,每个站点在GTM都做同样配置,将不同站点的数据向同一个GA-view发送,Tag中的allowLinker和cookieDomain是解决不同站点同一用户的识别问题,用户在跨站的时候将用户唯一标示clientid传递到另一个站点公用,从而解决跨站用户唯一性的问题。Google Analytics中做跨域/跨站跟踪

设置过程

将跨站用的Tracking ID用一个常量变量存储,命名为“跨站跟踪专用TrackingID”:

Google Analytics中做跨域/跨站跟踪

创建一个常量变量,命名为“跨站专用Cookie”,作如下设置:

Google Analytics中做跨域/跨站跟踪

创建一个谷歌分析设置变量命名为“跨站跟踪”,做如下设置:

Google Analytics中做跨域/跨站跟踪

 

创建一个Tag命名为“跨站跟踪基础代码”,做如下设置:

Google Analytics中做跨域/跨站跟踪

这样就完成了跨站跟踪

 

一样的问题,这样跨站会跨站用户在原跟踪中被看做是新用户,需要用一个专门的cookie存储跨站用的Client ID,设置改为:

Google Analytics中做跨域/跨站跟踪

Global Site Tag跨站

Global Site Tag就是全局版,分为普通全局版和混合全局版,带它们的代码结构是一直的,设置也是一样的,如:

普通全局版

普通全局版使用的Tracking ID,未修改的跟踪代码是:

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXXX-X"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-XXXXXXXX-X');
</script>

混合全局版

混合全局版使用的测试D,未修改的跟踪代码是:

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XJGBFSLMD8"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

gtag('js', new Date());
gtag('config', 'G-XJGBFSLMD8'); 
</script>

就ID不一样,所以直接以混合全局版作为示例,AB网站的共用一样的跟踪代码,修改为:

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XJGBFSMD8"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

gtag('js', new Date());
gtag('config', 'G-XJGBFSMD8',{
'linker': {
  'accept_incoming': true,
  'domains': ['A.com','B.com']
  }
}); </script>

也可以用set在前面加载:

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XJGBFSMD8"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('set', 'linker', {'domains': ['A.com','B.com'], 'accept_incoming': true;}); gtag('js', new Date()); gtag('config', 'G-XJGBFSMD8'); </script>

 向多个测量ID发送数据的时候要使用group,类似统一版的跟踪器的作用,如果没设置就默认default。

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XJGBFSMD8"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

gtag('js', new Date()); 
gtag('config', 'G-XJGBFSMD8',{'groups': 'agency',
'linker': {
  'accept_incoming': true,
  'domains': ['A.com','B.com']
  }
}); gtag('config', 'GA_MEASUREMENT_ID'); </script>

如果是用测量ID的,我估计在GTM也可以做跨站跟踪,但官方目前还没提供GTM里面的详细参数文档,你可以根据硬编码的文档提供的关键字去GTM里面尝试去设置。

Google Analytics 4上跨站

Google Analytics 4 上做跨站跟踪简单很多,直接在报告界面就可以配置实现,但是有前提的:两个站点要使用相同的跟踪代码将数据发送到同一个媒体资源。

假设现在要对www.test.com和www.ichdata.com做跨行跟踪。

现在已经在这两个网站上布署了相同的跟踪代码,将数据发送到同一个媒体资源,现在来做跨站跟踪。

设置的地方在数据流详情里面,点击“更多标记设置”——“选择您的网域”:

Google Analytics中做跨域/跨站跟踪

直接将要跨站的两个域名添加上去即可:

Google Analytics中做跨域/跨站跟踪

特殊的几种跨站跟踪

前面所讲的跨站跟踪只是普通的形式,如果是特殊情形的,还会需要做特别的配置,特殊情况有以下几种:

  • 表单的形式:在A站点从点击一个表单然后跳转到B站点
  • iframe的形式:在A站点通过iframe的引入B站点的内容
  • 其他特殊情况:其他上述方法都不适用的情况

表单的形式

表单形式的需要开启装饰表单功能

Google Analytics中做跨域/跨站跟踪

 

上述设置是对所有的页面都生效的,如果只想针对特定位置的,由于这里是表单的形式,所以可以用表单提交触发器,可以新建一个Tag,跟踪类型选择装饰表单:

Google Analytics中做跨域/跨站跟踪

触发器就用表单跟踪的触发器。

iframe的形式

IFrame的形式请看:https://www.simoahava.com/analytics/cookieless-tracking-cross-site-iframes/

其他特殊情况

特殊情况的解决方式就是用js实现将client  id添加到跳转页面的链接上。

 

验证跨站跟踪是否成功

做完跨站跟踪后,需要验证跨站跟踪是否成功,有两种方法:

一种是跨站位置的链接是否有client id,对于成功做跨站跟踪的,在跨站的链接上是有client id的。

Google Analytics中做跨域/跨站跟踪

 

一种是直接点击跨站的位置,然后着陆页上的信息,URL上面有client id也表示成功

Google Analytics中做跨域/跨站跟踪

跨站跟踪失败的几个可能

  • 中间有跳转,比如你要做的是AB之间的跨站跟踪,但在A点击的时候是去C,然后才跳转去B,这种情况就会跟踪失败。

GA小站, 版权所有丨如未注明 , 均为原创

转载请注明标题:Google Analytics中做跨域/跨站跟踪
链接:https://www.ichdata.com/using-gtn-to-do-cross-site-tracking.html

喜欢 (4)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址