Consent Mode v2 的关键是默认值先于标签、update 及时触发、v2 参数和地区策略都验证过。
- 01先读摘要,判断是否与你的场景相关。
- 02再看来源,保留继续查证的路径。
- 03最后看步骤、风险和可复用动作。
Consent Mode v2 的核心不是加一个弹窗,而是让 Google 标签在用户同意前就知道该收集什么、同意后立刻更新什么。默认值、update 时机、ad_user_data、ad_personalization 和 region 配置会共同决定测量是否合法、是否完整。下面这套流程按 Google 官方开发者指南排,适合自己维护 gtag.js 或 Tag Manager 的小站负责人。
适用场景
- 你的站点接入 GA4、Google Ads 或转化跟踪,并且向欧洲用户展示同意横幅。
- 你希望默认拒绝广告和统计存储,但用户同意后能恢复测量。
- 你需要在不同地区使用不同默认值,例如 EU 拒绝、其他地区正常。
- 你准备上线 v2 参数,但先要在 Tag Assistant 中验证 update 是否生效。
不适用场景
- 你的站点不向用户展示任何同意选项,也不处理个人数据。
- 你只用了第三方 CMP,但 CMP 模板还没有与 Google 标签连接。
- 你希望 consent mode 替代隐私政策和数据处理说明。
- 你只需要把代码复制进去,不准备测试默认值、update 和地区行为。
准备材料
- 能访问 gtag.js 代码或 Tag Manager 容器的权限。
- 当前 GA4、Google Ads 和转化标签清单。
- 同意横幅或 CMP 的实现方式和触发时机。
- 一个测试站点或无痕浏览器,用来检查 Tag Assistant。
- 记录默认值、更新值和地区策略的配置表。
步骤一:先确认要设置哪些 consent type
官方指南列出 `ad_storage`、`ad_user_data`、`ad_personalization` 和 `analytics_storage` 等 consent type。v2 新增的 `ad_user_data` 控制是否允许把用户数据用于广告,`ad_personalization` 控制个性化广告。默认值建议设为 `denied`,再由用户选择触发 update。
- 广告投放使用 ad_storage、ad_user_data、ad_personalization。
- GA4 分析使用 analytics_storage。
- 如果页面只有基础统计,不需要为不存在的广告参数硬编码。
- 把每个参数是否默认拒绝写进配置表,避免上线时靠猜。
步骤二:在加载标签前设置 default denied
官方明确要求 `gtag(‘consent’, ‘default’, …)` 必须在发送 config 或 event 之前执行,而且应该在每个页面都出现。不要放在页面底部或用户点击后才设置,否则标签可能先带着未定义状态发送数据。示例:
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied'
});
步骤三:用户选择后立即调用 update
consent mode 不会自动保存用户选择,需要你的 CMP 或自定义代码在用户操作后调用 update,并在后续页面恢复状态。官方建议在用户确认后马上调用,同时把选择持久化到 first-party cookie 或 local storage。
gtag('consent', 'update', {
'ad_user_data': 'granted',
'ad_personalization': 'granted',
'ad_storage': 'granted',
'analytics_storage': 'granted'
});
用户撤销同意时也要调用 update,把对应参数从 granted 改回 denied。
步骤四:异步 CMP 使用 wait_for_update 控制时序
如果你的 CMP 是异步加载,可能晚于 Google 标签运行。官方提供 `wait_for_update` 参数,让标签等待一段时间再发送数据。这个值要按 CMP 实际加载时间设置,过短会导致 update 没赶上,过长会拖慢测量。
gtag('consent', 'default', {
'ad_storage': 'denied',
'analytics_storage': 'denied',
'wait_for_update': 500
});
步骤五:配置 region-specific 默认值
官方支持用 region 参数让默认值按地区变化。例如只在 EEA 和英国默认拒绝,其他地区使用正常设置。这能减少无同意横幅地区的测量损失。region 参数应与 CMP 展示区域保持一致,不要为了省事把全站都设成拒绝。
gtag('consent', 'default', {
'analytics_storage': 'denied',
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'region': ['AT', 'BE', 'BG', 'DE', 'EE', 'GB']
});
步骤六:用 Tag Assistant 验证默认值和 update
官方提供 Tag Assistant 的 consent 调试流程。测试时重点看四个时刻:首次加载时所有参数是 denied;点击同意后 update 出现且值为 granted;刷新页面后持久化状态能恢复;用户撤销后参数变成 denied。如果 update 在页面卸载前才触发,可能不会被正确处理。
- 打开 Tag Assistant 并加载测试页面。
- 检查第一个 consent default 是否在 config/event 之前。
- 点击同意按钮,确认 update 参数与 CMP 选项一致。
- 刷新页面,确认持久化后的状态被重新读取。
- 测试部分同意、全部拒绝和撤销同意三条路径。
步骤七:检查 ads_data_redaction 和 URL passthrough
当 ad_storage 为 denied 时,官方支持 `ads_data_redaction` 进一步减少广告数据,并使用 URL passthrough 保留广告点击、client ID 和 session ID 信息。是否启用取决于你的合规策略,不要把所有选项都打开。
- 需要减少广告数据时设置 ads_data_redaction。
- 需要跨页保持广告点击和 client ID 时启用 URL passthrough。
- 在 Tag Manager 中使用 gtagSet 设置这些选项。
- 测试参数在 consent denied 和 granted 两种状态下的行为。
可复制检查表
consent type:\n默认值:\nregion:\nwait_for_update:\nCMP 名称:\nupdate 触发点:\n持久化方式:\n部分同意:\n全部拒绝:\n撤销同意:\nads_data_redaction:\nURL passthrough:\nTag Assistant 结果:\n负责人:\n最近测试日期:
实际例子:独立站从普通 GA4 升级到 v2
一个独立站原先只在页面底部显示一个“接受”按钮,没有调用 update,广告参数也没有设置。接入 Consent Mode v2 后,他们把 default 放到 Google 标签加载前并设为 denied,CMP 在用户点击后调用 update,把选择保存到 cookie。Tag Assistant 测试发现异步 CMP 晚于标签,补了 wait_for_update 500 毫秒。上线后,拒绝用户不再发送广告个性化数据,同意用户仍能正常统计转化。
验收清单
- default 在每个页面先于 config/event 执行。
- ad_storage、ad_user_data、ad_personalization、analytics_storage 已按实际用途配置。
- 用户操作后 update 立即触发,且不会在页面卸载前才调用。
- 选择已持久化,刷新页面能恢复。
- 地区默认值覆盖了展示 CMP 的区域。
- Tag Assistant 对同意、拒绝和撤销路径都通过。
- ads_data_redaction 和 URL passthrough 按策略显式设置。
常见坑
- 把 default 放在页面底部,标签先发送了未定义状态。
- 只设置 analytics_storage,漏掉 ad_user_data 和 ad_personalization。
- 用户同意后 update 没有持久化,刷新后又回到 denied。
- 异步 CMP 没有 wait_for_update,update 太晚。
- 所有地区都默认拒绝,非欧盟用户测量数据大量丢失。
- 只做一次正常同意测试,撤销和拒绝路径没有验证。
排错路径
- Tag Assistant 显示 default 太晚:把 consent 代码移到 Google 标签之前并检查执行顺序。
- update 没出现:确认用户点击事件绑定到 CMP 回调,而不是只绑定到页面加载。
- 刷新后状态丢失:检查 first-party cookie 或 local storage 是否在 update 后写入。
- region 不生效:确认 region 使用 ISO 3166-1 alpha-2 代码,并检查 CMP 区域选择。
- 广告参数仍为 granted:查看是否有另一个 gtag 调用覆盖了 update,或缓存了旧页面。
后续维护建议
更新日期:2026-08-16。建议每次改动 CMP、GA4 或广告标签后重新跑一次 Tag Assistant,每季度检查 consent 默认值、地区列表和持久化逻辑。Google 官方文档更新 v2 参数或调试流程后,要回看你的实现是否仍按新规则执行。不要把 consent 配置写在临时页面里,应该作为可版本化的代码片段统一维护。