从 shop.example.com 跳到 www.example.com 之后,同一个用户在报表里变成两个新用户,会话数也翻倍,两边 _ga 里的 client_id 完全不同。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,_ga 默认写在当前主机名下,浏览器按主机隔离 cookie,子域之间不共享。跳转时又没带 linker 参数,接收方只能重新生成一个 client_id。
「跨子域 _ga 不共享」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。改完顺手把文档补一句,省得下次自己重新推一遍。
gtag('config', 'G-XXXXXXX', {
cookie_domain: 'example.com',
linker: { domains: ['shop.example.com', 'www.example.com'] }
});
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,在 gtag config 里显式设置 cookie_domain,写成一级域名,让子域共用一份;打开跨域 linker,跳转链接由统计脚本自动补 _gl 参数;在接收页确认 _ga 没有重新生成,client_id 前后一致。
最后用这个标准收尾,两个子域下 _ga 的 client_id 相同,跨域访问被算作同一个用户的一次会话。
