如果你用的是Google Analytics 4 ,请看 Google Analytics 4 中做跨站跟踪
跨域跟踪,也叫做跨站跟踪,是用户在不同网站(域名)之间跳转的时候能识别到是同一个人。
在实际的过程中,有时候多个站点需要看成一个站点来评估网站的流量情况,比如同一产品对不同地域使用不同域名,或壳站和主站之间,或主站与商城网站,这就需要对网站做跨域跟踪。
原理
我们知道,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需要做跨域跟踪,看看如何设置:
Google Analytics 4上跨站
Google Analytics 4 上做跨站跟踪简单很多,直接在报告界面就可以配置实现,但是有前提的:两个站点要使用相同的跟踪代码将数据发送到同一个媒体资源。
假设现在要对www.test.com和www.ichdata.com做跨行跟踪。
现在已经在这两个网站上布署了相同的跟踪代码,将数据发送到同一个媒体资源,现在来做跨站跟踪。
设置的地方在数据流详情里面,点击“更多标记设置”——“选择您的网域”:
直接将要跨站的两个域名添加上去即可:
更详细的请看:Google Analytics 4 中做跨站跟踪
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传递到另一个站点公用,从而解决跨站用户唯一性的问题。
设置过程
将跨站用的Tracking ID用一个常量变量存储,命名为“跨站跟踪专用TrackingID”:
创建一个常量变量,命名为“跨站专用Cookie”,作如下设置:
创建一个谷歌分析设置变量命名为“跨站跟踪”,做如下设置:
创建一个Tag命名为“跨站跟踪基础代码”,做如下设置:
这样就完成了跨站跟踪。
一样的问题,这样跨站会跨站用户在原跟踪中被看做是新用户,需要用一个专门的cookie存储跨站用的Client ID,设置改为:
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里面尝试去设置。
特殊的几种跨站跟踪
前面所讲的跨站跟踪只是普通的形式,如果是特殊情形的,还会需要做特别的配置,特殊情况有以下几种:
- 表单的形式:在A站点从点击一个表单然后跳转到B站点
- iframe的形式:在A站点通过iframe的引入B站点的内容
- 其他特殊情况:其他上述方法都不适用的情况
表单的形式
表单形式的需要开启装饰表单功能
上述设置是对所有的页面都生效的,如果只想针对特定位置的,由于这里是表单的形式,所以可以用表单提交触发器,可以新建一个Tag,跟踪类型选择装饰表单:
触发器就用表单跟踪的触发器。
iframe的形式
IFrame的形式请看:https://www.simoahava.com/analytics/cookieless-tracking-cross-site-iframes/
其他特殊情况
特殊情况的解决方式就是用js实现将client id添加到跳转页面的链接上。
验证跨站跟踪是否成功
做完跨站跟踪后,需要验证跨站跟踪是否成功,有两种方法:
一种是跨站位置的链接是否有client id,对于成功做跨站跟踪的,在跨站的链接上是有client id的。
一种是直接点击跨站的位置,然后着陆页上的信息,URL上面有client id也表示成功
跨站跟踪失败的几个原因
- 中间有跳转,比如你要做的是AB之间的跨站跟踪,但在A点击的时候是去C,然后才跳转去B,这种情况就会跟踪失败。