免费工具 Consent Mode v2 代码生成器:gtag 和 GTM 两种写法
投 Google Ads、用 GA4 统计欧洲访客的出海网站,需要把访客的 Cookie 选择通过 Consent Mode(同意模式)告诉 Google。选好安装方式、基本还是高级模式、哪些地区需要同意,就能得到顺序正确的默认值代码、弹窗要调用的 update,以及每个参数的白话说明;全部对照 Google 官方文档。
- 7 个同意参数
- 按地区设默认值
- 本地生成
选好方案,复制两段代码
默认适合用 GA4 统计欧洲访客的网站:欧洲经济区、英国、瑞士默认拒绝,其他地区默认允许,高级模式。任意修改,代码随输入更新。
gtag.js = 直接贴在页面里的 Google 代码;Tag Manager = GTM 容器。
gtag.js 用 G-(GA4)、AW-(Google Ads)或 GT-;Tag Manager 用 GTM-。
高级模式立即加载 Google 代码、默认拒绝;基本模式等访客同意后才加载。区别见工具下方的表。
地区代码用 ISO 3166-2。名单以外的地区,所有参数默认 granted。
逗号分隔,如 ES, FR, US-CA。可以是国家(DE)或下级行政区(US-CA)。
代码等待弹窗回报选择的时间。Google 的 Tag Manager 文档建议至少 500。
弹窗写入的 localStorage 键或 Cookie 名。Cookie 弹窗生成器 用的是 cookie_consent。
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
// Consent Mode v2 默认值:必须在任何 config、event 命令之前执行
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied',
'functionality_storage': 'denied',
'personalization_storage': 'denied',
'security_storage': 'granted',
'wait_for_update': 500,
'region': ['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'IS', 'LI', 'NO', 'GB', 'CH']
});
gtag('consent', 'default', {
'ad_storage': 'granted',
'ad_user_data': 'granted',
'ad_personalization': 'granted',
'analytics_storage': 'granted',
'functionality_storage': 'granted',
'personalization_storage': 'granted',
'security_storage': 'granted'
});
gtag('set', 'ads_data_redaction', true);
// 回访访客:恢复 Cookie 弹窗保存的选择
(function () {
var raw = null, r = null;
try { raw = localStorage.getItem('cookie_consent'); } catch (e) {}
if (!raw) try { var m = document.cookie.match(/(?:^|; )cookie_consent=([^;]*)/); if (m) raw = decodeURIComponent(m[1]); } catch (e) {}
try { r = JSON.parse(raw); } catch (e) {}
if (!r || !r.c || !(r.e > Date.now())) return;
var c = r.c;
gtag('consent', 'update', {
'ad_storage': c.marketing ? 'granted' : 'denied',
'ad_user_data': c.marketing ? 'granted' : 'denied',
'ad_personalization': c.marketing ? 'granted' : 'denied',
'analytics_storage': c.analytics ? 'granted' : 'denied',
'functionality_storage': c.preferences ? 'granted' : 'denied',
'personalization_storage': c.preferences ? 'granted' : 'denied'
});
})();
</script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>在 Google 代码或 GTM 容器之前执行。顺序很关键:Google 明确说默认值如果在 config、event 命令之后调用就不会生效。
Tag Manager 标准的 noscript 代码,原样保留。
每个参数设成了什么
| 参数 | 默认值 | 名单以外的地区 | 弹窗分类 | 控制什么 |
|---|---|---|---|---|
ad_storage | denied | granted | 营销 | 广告用途的存储,例如 Cookie |
ad_user_data | denied | granted | 营销 | 向 Google 发送用于广告的用户数据 |
ad_personalization | denied | granted | 营销 | 个性化广告(再营销) |
analytics_storage | denied | granted | 统计分析 | 统计用途的存储,例如访问时长 |
functionality_storage | denied | granted | 偏好 | 支持网站功能的存储,例如语言设置 |
personalization_storage | denied | granted | 偏好 | 个性化用途的存储,例如推荐内容 |
security_storage | granted | granted | 必要(不征求) | 安全用途的存储:登录认证、防欺诈 |
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
// 访客做出或修改选择时调用 applyConsent()
window.applyConsent = function (c) {
gtag('consent', 'update', {
'ad_storage': c.marketing ? 'granted' : 'denied',
'ad_user_data': c.marketing ? 'granted' : 'denied',
'ad_personalization': c.marketing ? 'granted' : 'denied',
'analytics_storage': c.analytics ? 'granted' : 'denied',
'functionality_storage': c.preferences ? 'granted' : 'denied',
'personalization_storage': c.preferences ? 'granted' : 'denied'
});
};
// 示例:
// applyConsent({ analytics: true, marketing: false, preferences: false });
</script>访客点击时调用 applyConsent({ analytics, marketing, preferences }),并把选择保存下来。Cookie 弹窗生成器 生成的弹窗两件事都已经做了。
这套方案的说明
- 已做到顺序正确:先定义 dataLayer 和 gtag,再设默认值,然后才加载 gtag.js、执行 config。
- 说明默认拒绝只对 32 个地区代码生效;另一条默认值对其他地区全部允许。Google 按最具体的匹配地区取值。
- 说明高级模式:Google 代码立即加载。同意为 denied 时发送不带 Cookie 的 ping(时间戳、用户代理、来源页、同意状态),Google 用它做针对你账户的转化建模。
- 说明ads_data_redaction 只在 ad_storage 为 denied 时起作用,granted 之后没有影响。
- 说明回访访客:在任何代码运行前,读取「cookie_consent」里保存的选择并发送 update。
- 说明用 Google Tag Assistant 检查:Consent 标签页会显示每个参数的默认值和 update。
分享这组输入:数值写在链接的 # 后面,不会发到服务器。
https://tapcub.com/zh/tools/consent-mode-generator
版本 v1.0更新于 更新记录
每段代码做什么
Consent Mode 本身不显示弹窗,它负责把访客的选择告诉 Google 代码,让弹窗和代码配合起来。
默认值代码
定义 dataLayer 和 gtag(),然后对 7 个参数调用 gtag('consent', 'default', …)。设了地区名单时有两条默认值:名单内 denied,其他地区 granted。
update 调用
gtag('consent', 'update', …) 把弹窗的三个分类对应到 6 个参数:营销同时控制 ad_storage、ad_user_data、ad_personalization,统计分析控制 analytics_storage。
参数表
列出每个参数的默认值、名单以外地区的取值、由弹窗哪个分类改变,以及 Google 的一句话定义。
说明清单
指出代码 ID 填错、地区代码不对、等待时间过短,以及基本 / 高级模式下 Google 能收到什么数据。
granted / denied 管的是存储和数据用途,不是代码加不加载。高级模式下即使 denied,Google 代码仍会发送不带 Cookie 的 ping;如果同意前什么都不想发,请选基本模式。
四步
大约十五分钟,包括用 Tag Assistant 检查。
-
1
选安装方式和模式
选 gtag.js 或 Tag Manager,填代码 ID。想让 Google 对拒绝的访客做转化建模就选高级模式;同意前什么都不想发给 Google 就选基本模式。
-
2
设定哪些地区需要同意
「欧洲经济区 + 英国 + 瑞士」适合多数出海网站;要精确到国家或州就用自定义名单(ISO 3166-2,例如
US-CA)。 -
3
贴代码
默认值代码放在每个页面
<head>的最前面,早于 Google 代码或 GTM 容器。Shopify、WordPress 在主题的 head 模板里加。update 接到弹窗按钮上,或者直接用我们的 Cookie 弹窗,它已经调用好了。 -
4
检查
打开 Tag Assistant,加载页面,看 Consent 标签页:页面加载时是默认值,点击弹窗后出现 update。再用无痕窗口模拟一次回访。
Consent Mode 的两种实现方式
Google 文档里两种模式都有,选哪种取决于法务意见和你需要多少建模数据。以下根据 Google 帮助中心 consent mode 说明整理(2026-11-10 核对):
- 基本模式:访客和弹窗交互之前,Google 代码不加载;访客拒绝时什么都不发给 Google,连同意状态都不发。转化建模用通用模型
- 高级模式:Google 代码立即加载,默认 denied。拒绝期间发送不带 Cookie 的 ping,内容是功能性信息(时间戳、用户代理、来源页)和粗略标记。建模针对你的账户
- 对欧洲经济区的访客,Google 要求用它的代码做衡量、个性化广告或再营销的广告主收集同意,并通过 consent mode(包括 ad_user_data、ad_personalization)传给 Google
- 顺序:default 必须在任何 config、event 命令之前执行;访客做出选择后尽快发送 update,之后每个页面都要再发
| 基本模式 | 高级模式 | |
|---|---|---|
| 代码加载 | 访客交互前不加载 | 立即加载,默认 denied |
| 同意之前 | 不发送任何数据,包括默认状态 | 发送同意状态和无 Cookie 的 ping |
| 同意之后 | 代码加载并正常运行 | 写入 Cookie,发送完整数据 |
| 拒绝时 | 什么都不发 | 只发无 Cookie 的 ping |
| 转化建模 | 通用模型 | 针对广告主的模型 |
| 本生成器的写法 | 访客接受后由 loadGoogleTag() 加载 gtag.js | gtag.js 写在页面里,设置 wait_for_update |
一个访客、三次页面浏览
一位德国访客打开用 GA4 的网站,工具默认设置:高级模式、欧洲经济区 / 英国 / 瑞士名单、恢复已保存选择。
| 时间点 | 执行了什么 | analytics_storage | ad_storage |
|---|---|---|---|
| 第一次打开页面 | DE 适用的地区默认值 | denied | denied |
| 在弹窗里只同意统计分析 | applyConsent({ analytics: true }) → update | granted | denied |
| 打开下一个页面 | 先默认值,再从 cookie_consent 恢复并 update | granted | denied |
| 一位来自加拿大的访客 | 不带地区的那条默认值(不在名单里) | granted | granted |
欧洲以外默认允许是否合适,是法律问题而不是技术问题。比如加州 CCPA 对出售、共享数据采用「可退出」模式;想在所有地区都用更严格的默认值,就选「所有访客」。
Consent Mode 最容易出错的地方
几乎所有问题都出在顺序,或者漏了 update。
默认值放在 Google 代码后面
gtag('consent', 'default') 如果在 config 之后执行,Google 说默认值不会生效。把这段放在 <head> 最前面。
只在点击的那一页发 update
后续页面不恢复已保存的选择,回访访客又会被当成 denied。保持「每个页面都恢复已保存的选择」打开。
只设了 v1 的参数
只设 ad_storage、analytics_storage,不设 ad_user_data、ad_personalization,v2 的两个信号就是空的。生成器总是写全 7 个。
地区代码写错
英国是 GB 不是 UK,EU 也不是地区代码。工具会标出认不出的代码。
统计数据不随同意状态缩水
Google 代码会随同意状态改变行为。TapCub 的统计默认不在设备上存任何东西,访客拒绝 Cookie 时访问量也不会因此变少。
Consent Mode v2 新增了什么?
两个参数:ad_user_data(向 Google 发送用于广告的用户数据)和 ad_personalization(个性化广告)。加上 ad_storage、analytics_storage 和另外三个存储类参数,一共 7 个。Google 针对欧洲经济区的说明要求广告主把这些访客的同意选择通过 consent mode 传过去。
Consent Mode 就是 Cookie 弹窗吗?
不是。Google 说 consent mode 不提供弹窗,它接收弹窗传来的选择,再调整 Google 代码的行为。你仍然需要弹窗或同意管理平台。Cookie 弹窗生成器 生成的弹窗已经调用好了 update。
基本模式和高级模式选哪个?
基本模式在访客同意前什么都不发给 Google;高级模式立即加载代码,拒绝期间发送不带 Cookie 的 ping,Google 据此为你的账户单独建模。Google 把选择权留给网站,一般取决于法务是否接受这些 ping。
默认值代码放在哪里?
放在 <head> 的最前面,早于 Google 代码或 GTM 容器。Google 文档明确说,顺序错了(在 config、event 之后调用)默认值就不起作用。
wait_for_update 是什么意思?
告诉代码在发送数据前等多少毫秒的 update,让弹窗有时间在页面加载时回报已保存的选择。Google 的 Tag Manager 文档建议至少 500 毫秒。
在 Google Tag Manager 里怎么设置 Consent Mode?
两种做法:在容器代码之前贴默认值代码(Google 的 Tag Manager 示例就是这样写的);或者用同意模板,在「Consent Initialization - All Pages」触发器上设默认值。模板里要用 setDefaultConsentState 和 updateConsentState,不要用 gtag('consent', …)。
url_passthrough 和 ads_data_redaction 是什么?
url_passthrough 在 Cookie 被拒绝时,通过网址参数(如 gclid、_gl、wbraid)传递广告点击和会话信息。ads_data_redaction 在 ad_storage 为 denied 时,去掉 Google Ads 和 Floodlight 请求里的广告点击标识;ad_storage 变成 granted 后就没有作用了。
国内网站需要 Consent Mode 吗?
只服务国内访客、不用 Google 代码的网站用不上。它是 Google 的机制,影响的是 GA4、Google Ads 等 Google 代码;国内的统计和广告平台不读这个信号。做出海业务、面向欧洲访客投 Google 广告的网站才需要重点配置。