访客在弹窗里点了「仅必要」,Network 面板里照样有发往 /g/collect 的请求,请求参数里 gcs 还是同意的取值。乍看像缓存或者权限的锅,追下去往往不是。

gtag('consent', 'default', { analytics_storage: 'denied' });
gtag('consent', 'update', { analytics_storage: 'granted' });

追下去是这么回事:页面加载时没有先设 consent default,gtag 按 granted 初始化,等用户点拒绝时已经发过一次请求。拒绝回调也只改了本地状态,没调用 consent update。

「Consent Mode 默认值」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,在 gtag 初始化前设置 analytics_storage 为 denied;用户点同意后再 update 成 granted;拒绝时清掉已经写入的 _ga cookie;用无痕窗口分别测试同意和拒绝两条路径。

验收就看一点,点「仅必要」后不再出现 collect 请求,_ga cookie 也查不到。

作者 9823189