AdSense Cookie 同意:保住广告投放的最低配置

EEA / UK / 瑞士需要 Google 认证的 TCF v2.3 CMP,美国多州需要 Do-Not-Sell 链接。最快的合规配置,以及如何验证。

你跑了个接 AdSense 的内容站。一位德国访客打开页面,没有广告出现,后台后来报 “consent management”(同意管理)问题。或者你只面向美国、从来没管过 cookies,AdSense 就悄悄对一部分流量只投非个性化或受限广告,这部分赚得少。对几乎所有独立发布者来说,最快的修法是:在 AdSense → Privacy & messaging 里打开 Google 自家的认证 CMP,为 EEA / UK / 瑞士发布一条 GDPR 消息、为美国各州发布一条 US state regulations 消息,然后验证同意字符串确实传到了 Google。对大多数站点而言这就是全部工作,而且免费。

有两件近期的变化本文已经反映(截至 2026 年 6 月):IAB 同意标准升到了 TCF v2.3(验证于 2026 年 3 月 2 日上线),Google 的美国州消息现在覆盖的州也远不止加州了。

TL;DR——60 秒版本

  1. AdSense → Privacy & messaging → 创建一条 GDPR message,定向到 “European Economic Area, the UK, and Switzerland”。
  2. 创建一条 US state regulations message,定向设为 “All current and future supported US States”
  3. 两条都发布。通常不需要重新打标签——现有的 AdSense 标签会自动部署这些消息。
  4. 验证:用 EEA 节点的 VPN 打开站点,点接受横幅,然后解码同意字符串(见”怎么确认修好了”)。

如果你只做一件事,那就做第 1 步:没有 Google 认证的 CMP,EEA / UK / 瑞士的流量根本拿不到个性化广告。

“合规”到底要求什么

地区法律触发点AdSense 需要什么UI 标签
EEA、UK、瑞士GDPR + ePrivacy:投广告 cookie 前需同意一个能传出有效 TCF v2.3 字符串的 Google 认证 CMP”European regulations message” / GDPR 消息
约 20 个有综合隐私法的美国州(California、Colorado、Connecticut、Delaware、Florida、Indiana、Iowa、Kentucky、Maryland、Minnesota、Montana、Nebraska、New Hampshire、New Jersey、Oregon、Rhode Island、Tennessee、Texas、Utah、Virginia——其中 Indiana / Kentucky / Rhode Island 于 2026 年 1 月 1 日生效)各州隐私法:可选择退出”sale/share”一个 “Do Not Sell or Share My Personal Information” 选项”US state regulations message”
美国其余各州无联邦层面要求无需任何配置,广告正常投放

记住两个关键日期。认证 CMP 的要求对 EEA / UK 自 2024 年 1 月 16 日起执行、对瑞士自 2024 年 7 月 31 日起执行(见 Google 的发布者同意要求)。而 TCF v2.3 字符串自 2026 年 2 月 28 日起成为强制要求,Google 于 2026 年 3 月 2 日开启了验证。

常见原因

你看这篇通常是出于以下某个原因。先找到你属于哪一类,再跳到对应的修法。

1. 根本没有认证 CMP(EEA / UK / 瑞士)

在 EEA / UK / 瑞士,法律上不允许在用户主动同意之前设置广告 cookie——不是默认勾选的框,也不是”滚动即视为同意”。AdSense 个性化广告用 cookie,所以必须先获得同意。没有 Google 认证的 CMP,这部分流量只能拿到非个性化或受限广告,永远拿不到个性化广告。

怎么判断:VPN 切到德国,打开你的站点。如果没出现任何同意 UI,你就不合规。

2. 缺少美国 “Do Not Sell or Share” 选项

截至 2026 年 6 月,约 20 个美国州已有综合隐私法生效(加州的 CCPA / CPRA,外加 Colorado、Connecticut、Delaware、Florida、Indiana、Iowa、Kentucky、Maryland、Minnesota、Montana、Nebraska、New Hampshire、New Jersey、Oregon、Rhode Island、Tennessee、Texas、Utah、Virginia——其中 Indiana、Kentucky、Rhode Island 最新,于 2026 年 1 月 1 日生效),其中大多数都要求提供退出”sale/share”的选项。AdSense 个性化广告被视为一种”share”,所以面向这些州的访客必须有一个 “Do Not Sell or Share My Personal Information” 选项。

怎么判断:VPN 切到加州,检查页脚 / 隐私控制。没有 DNSMPI 选项就是不合规。

3. 横幅有了,却没传出同意信号(TCF)

光有横幅是不够的。AdSense 通过 IAB TCF v2.3 字符串读取同意。如果横幅不传出有效的 TC string,AdSense 会把每次访问都当作”未同意”,停止个性化。

怎么判断:AdSense → Reports → 按 Personalization 拆分。如果你明明有真实的欧盟流量,“Non-personalized”却占了很大一块展示数,说明你的 CMP 没在正确传信号。

4. 你的”CMP”免费,但没经 Google 认证

一些流行的 cookie 横幅插件看起来像 CMP,但没实现 Google 认证的 TCF。用户点了”Accept”,却什么都没传到 AdSense。

怎么判断:打开页面,点接受,然后在 DevTools 控制台跑 __tcfapi('getTCData', 2, console.log)。如果返回 undefined,说明页面上根本没有 TCF API,你的”CMP”没经过认证。

5. CMP 在 AdSense 之后才加载(竞态条件)

如果 CMP 脚本在 adsbygoogle.js 之后才触发,AdSense 看到的就是默认的”未同意”状态,哪怕用户后来点了接受,个性化也已经失败。

怎么判断:DevTools → Network(或 Performance)→ 检查加载顺序。CMP 脚本应该在 adsbygoogle.js 之前触发。

6. 旧的 TCF v2.2 字符串现在被拒(2026 新增)

2026 年 2 月 28 日切换起,TC string 必须用 v2.3,它新增了一个强制的 disclosedVendors(已披露厂商)字段段。缺这段的字符串现在一律无效。Google 自 2026 年 3 月 2 日起开始验证,当已披露厂商段缺失、格式错误或不包含 Google(IAB 厂商 ID 755)时,返回 TCF 错误码 1.4。结果就是回退到 Limited Ads(受限广告),可能大幅削减程序化收入。

怎么判断:AdSense → Reports → TCF error report,看有没有错误码 1.4。或者解码你线上的 TC string(见下文),确认它有一个包含厂商 755 的 “Vendors Disclosed” 段。

最短修复路径

第 1 步:选一个认证 CMP

最简单:在 AdSense → Privacy & messaging 里启用 Google 自家的 CMP(关于 Privacy & messaging)。免费、经 Google 认证、符合 TCF v2.3,并通过你现有的标签部署。

如果你需要大量定制(以下都是认证过的——但请确认支持 v2.3):

  • Cookiebot — 付费、功能全
  • OneTrust — 企业级
  • iubenda — 付费、简单
  • Klaro! — 开源、自托管(用于 EEA 流量前,先确认它在 Google 的认证名单上)

对绝大多数独立站,Google 的 Privacy & messaging 就是正确答案。

第 2 步:创建 GDPR 消息

在 AdSense → Privacy & messagingEuropean regulations 里:

  1. Create message
  2. 定向设为 “European Economic Area, the UK, and Switzerland”
  3. 选择同意选项。想从拒绝的人身上也赚到钱,就允许 “Consent or do not consent”(拒绝的人看到非个性化广告),而不是强制同意。
  4. 调好样式,然后 Publish

第 3 步:创建 US state regulations 消息

在 AdSense → Privacy & messagingUS states 里:

  1. Create message
  2. 在 Targeting 下,选 “All current and future supported US States”,这样新纳入监管的州(Indiana、Kentucky、Rhode Island,以及未来新增的州)都会被自动覆盖。
  3. 如果你以前用的是默认文案,Google 已经帮你更新成了 “Do Not Sell or Share My Personal Information”。如果你定制过文案,请改成与 CPRA 措辞一致。
  4. Publish

第 4 步:确认标签 / 加载顺序

通常你不需要重新打标签——发布一条消息会通过你现有的 AdSense 标签部署它。如果你是手动加载 AdSense 脚本,要确保在 CMP 初始化之前没有任何东西请求广告。一个最简的手动 head 大概长这样,CMP 在前:

<head>
  <script async src="https://fundingchoicesmessages.google.com/i/pub-XXXXXXXXX?ers=1"></script>
  <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXX"></script>
</head>

如果你在自己的代码里 push 广告位,就把第一次请求挡在”已知同意状态”之前,让 AdSense 永远不会看到一个过早的”未同意”:

<script>
  (window.adsbygoogle = window.adsbygoogle || []).pauseAdRequests = 1;
</script>

用 Google 的 CMP 时一般用不上这一步——它会替你把同意状态传给 AdSense。

第 5 步:加一个常驻的 DNSMPI 控件

让退出选项在每个页面的页脚都能点到。Google 的美国州消息自带了它的隐私链接;如果你还想要一个静态的,链到你的控件:

<a href="/do-not-sell">Do Not Sell or Share My Personal Information</a>

第 6 步:在 /privacy 里写明你的 CMP

加上一句,例如:“我们使用 Google 的同意管理平台来收集广告 cookie 的同意,并处理美国的退出请求。你可以随时用页脚的隐私控件修改你的选择。“然后确保那个页脚链接确实能重新打开同意 UI。

怎么确认修好了

别只看”横幅出现了”。要确认同意信号真的传到了 Google:

  1. 用 EEA 节点的 VPN(比如德国),在无痕窗口里打开站点。

  2. GDPR 消息出现,点 Consent

  3. 在 DevTools 控制台跑:

    __tcfapi('getTCData', 2, (d, ok) => console.log(ok, d.tcString));
  4. 复制 tcString,粘到 iabtcf.com 的 IAB TCF 解码器里。确认它解码为 v2.3、有一个 “Vendors Disclosed” 段、且 Google(厂商 ID 755)出现在已披露且已同意的列表里。

  5. VPN 切到加州:页脚 / 隐私控件显示一个 “Do Not Sell or Share My Personal Information” 选项。

  6. VPN 切到不在覆盖名单里的美国州:不需要横幅,广告正常投放。

  7. 一两天后,检查 AdSense → Reports → Personalization。欧盟流量的个性化占比应当上升,且 TCF error report 里不再有 1.4 错误。

预防建议

  • 新站默认接 Google 的 Privacy & messaging——免费、认证、随标签部署。
  • “All current and future supported US States” 定向,省得每出一部新州法就去追一次。
  • 永远让拒绝的人看到非个性化广告,绝不要在拒绝时彻底屏蔽广告——那只会白白丢收入。
  • 任何同意相关的改动后,至少在 3 个地区(EEA、一个被覆盖的美国州、美国其它地区)测试。
  • IAB 框架更新后,重新查一遍 TCF error report;商用 CMP 必须每 12 个月至少向 Google 重新认证一次,而版本升级(比如 v2.2 升 v2.3)可能悄悄让字符串失效。
  • 保留一个能重新打开同意 UI 的页脚链接,让用户可以改主意。

常见问题

没有 CMP 我会丢掉全部广告收入吗? 不会,但你会丢掉最值钱的那部分。没有认证 CMP 时,EEA / UK / 瑞士流量只能拿到非个性化或受限广告,通常比个性化广告付费低得多。

我只面向美国,需要这些吗? 你不需要 GDPR 消息,但截至 2026 年 6 月已有约 20 个州有综合隐私法生效(California、Colorado、Connecticut、Delaware、Florida、Indiana、Iowa、Kentucky、Maryland、Minnesota、Montana、Nebraska、New Hampshire、New Jersey、Oregon、Rhode Island、Tennessee、Texas、Utah、Virginia)。只要你有美国流量,就发布一条 US state regulations 消息并用 “All current and future supported US States” 定向。几下点击的事,还能在更多州立法时自动保持合规。

我的广告在 2026 年 3 月初掉到了 “Limited Ads”,为什么? 几乎肯定是 TCF v2.3 切换。Google 自 2026 年 3 月 2 日起开始验证,会拒绝缺少有效 disclosedVendors 段(且该段须包含 Google,厂商 755)的字符串,并返回错误码 1.4。把你的 CMP 更新到能输出 v2.3 字符串即可;Google 自家的 CMP 已经是 v2.3。

怎么知道我的 CMP 真的经过 Google 认证?iabtcf.com 解码一条线上 TC string,确认它是 v2.3 且 Google 已披露,同时盯着 AdSense 的 TCF error report 有没有 1.4。如果控制台里 __tcfapi 返回 undefined,那就根本没有 TCF API。

发布消息后我必须给站点重新打标签吗? 通常不用。在 Privacy & messaging 里发布一条消息,会通过你现有的 AdSense 标签部署它。只有定制或非标准的接入方式才需要手动重新打标签。

相关阅读

标签: #AdSense #变现 #排查 #排查