同意横幅还没点,网络面板里已经发出一次 page_view 并写入了 _ga,隐私扫描工具直接标红。代码里 consent default 写的是 granted。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', { analytics_storage: 'denied', ad_storage: 'denied' });
gtag('js', new Date());
gtag('config', 'G-XXXXXXX');
Consent Mode 的默认值决定脚本在用户选择前能不能写 cookie。默认 granted 等于先放行再等用户拒绝,第一次请求已经带着标识发出去了,顺序和取值任何一个写错都会这样。这一点先确认清楚,后面就不用反复试。
「Consent Mode 默认授权」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
具体做法是,在 gtag.js 加载前把 consent default 设成 denied,只保留必要存储;用户点同意后再调 consent update,把对应项改成 granted;用无痕窗口从头走一遍,确认拒绝分支没有任何统计请求。
改完照着核一遍,未点击同意前网络面板没有 collect 请求,localStorage 里也没有 _ga;点同意后才出现。
