横幅上点了拒绝,Application 面板里 _ga 和 _gid 还是被写进去,有效期两年,刷新一次再多一条,回访数据照跑不误。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
gtag('consent', 'default', {
ad_storage: 'denied',
analytics_storage: 'denied'
});
统计脚本在 head 里同步加载,consent 的默认值没有设成 denied,gtag 初始化时先把 cookie 落下来,再等用户点按钮,后面的拒绝只改了界面状态。这个顺序在源码里看不出来,得看 Network 的请求时刻。这一点先确认清楚,后面就不用反复试。
「Cookie 拒绝失效」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
具体做法是,把 gtag 的 consent default 提到所有统计代码最前面,ad_storage 和 analytics_storage 都写 denied;统计脚本改成同意之后才插入,别在 head 里写死 script 标签;拒绝时调一次 consent update,并把已有的 _ga 系列 cookie 逐个删掉,domain 和 path 要对上原值。
改完照着核一遍,点拒绝后 Application 里 _ga 消失,刷新两次也不再出现,Network 里没有 collect 请求。
