你跑了个接 AdSense 的内容站。一位德国访客打开页面,AdSense 没投广告,后台后来报”consent management” 问题。或者你在美国,从来没想过 cookies,AdSense 悄悄对约 30% 的流量限制了个性化投放。从 2024 年 3 月起,Google 要求所有面向 EEA、UK、瑞士用户的 AdSense 发布者必须接一个认证的 CMP(Consent Management Platform)。加州还要在此之上叠加 CCPA / CPRA。这篇讲怎么用最低限度的功夫保住合规和收入。
常见原因
你看这篇通常是因为:
1. EU GDPR + ePrivacy 要求广告 cookie 必须先获同意
在 EEA / UK / 瑞士,法律上不允许在用户主动同意(不是默认勾选、不是滚动暗示)之前设置广告 cookie。AdSense 个性化广告用 cookie;因此投个性化广告前必须先获同意。
怎么判断:VPN 切德国 → 打开站点 → 没有同意 UI 就是不合规。
2. 加州 CCPA / CPRA 的”opt-out of sale/share”
加州要求页脚有一个”Do Not Sell or Share My Personal Information”链接。AdSense 的个性化广告在 CPRA 下被视为”share”,所以面向加州访客必须有这个链接。
怎么判断:VPN 切加州 → 检查页脚。没有 DNSMPI 链接就是不合规。
3. AdSense 通过 IAB TCF v2.2 读取同意信号
光有同意横幅不够;AdSense 通过 IAB TCF v2.2 标准读取同意。如果你的横幅不传 TC string,AdSense 会把每次访问都当”未同意”,停止个性化。
怎么判断:AdSense → Reports → Personalization,如果”Non-personalized”占展示数超过 50% 且你有大量欧盟流量,就是 CMP 没正确传信号。
4. CMP 是”免费”但没 IAB 认证
一些流行的 cookie 横幅插件看起来像 CMP 但没实现 TCF v2.2。横幅出现,用户点”接受”,实际什么都没传给 AdSense。
怎么判断:打开页面 → 点接受 → DevTools 控制台 __tcfapi('getTCData', 2, console.log)。返回 undefined 就是没 IAB 认证。
5. CMP 加载太晚或异步
如果 CMP 在 AdSense 脚本之后才加载,AdSense 拿到的就是默认的”未同意”状态。哪怕用户后来点了接受,个性化也已经失败。
怎么判断:Performance 看加载顺序。CMP 脚本应该在 adsbygoogle.js 之前触发。
最短修复路径
第 1 步:选一个认证的 CMP
最简单:在 AdSense 里启用 Funding Choices / Privacy & messaging。免费、认证、内建集成。
需要更多定制的话:
绝大多数独立站,Funding Choices 是正确答案。
第 2 步:配置地区
AdSense → Privacy & messaging:
- Create a GDPR message → 选 “European Economic Area, UK, Switzerland”。
- Create a CCPA / state regulations message → 选 “California (and other US states)”。
- 设置用户拒绝时的行为:投”非个性化广告”(填充率低些但还是有收入)。
第 3 步:每页都装 CMP 代码
Funding Choices 生成的 <script> 片段。放在根 layout 的 <head> 里,必须在 AdSense 脚本之前:
<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>
第 4 步:未同意前默认非个性化广告
让没同意的用户也能看到(非个性化)广告:
<script>
(window.adsbygoogle = window.adsbygoogle || []).pauseAdRequests = 1;
window.googletag = window.googletag || {cmd: []};
</script>
Funding Choices 会自动把同意状态传给 AdSense,一般不用额外代码。
第 5 步:加州访客加 DNSMPI 链接
页脚模板里:
<a href="/do-not-sell">Do Not Sell or Share My Personal Information</a>
或者用 Funding Choices 生成 CCPA 消息时附带的 UI 链接。
第 6 步:在 /privacy 里写明 CMP
隐私政策里加一段:“我们使用 Google Funding Choices(或 [你的 CMP])管理广告 cookie 同意。你可以随时点 [链接] 修改偏好。“
第 7 步:用 VPN 验证
VPN 切德国 → 同意横幅出现 → 点接受 → 投个性化广告。 VPN 切加州 → 页脚可见 DNSMPI 链接。 VPN 切美国(非加州)→ 不需要横幅,广告正常投放。
预防建议
- 新站默认接 Funding Choices——免费、认证、AdSense 自动集成。
- 不同意的用户永远投非个性化广告,不要完全屏蔽,会丢收入。
- 同意相关任何改动后,至少在 3 个地区(欧盟、加州、其它美国)测试。
- 每半年复查一次 CMP 配置——IAB TCF 偶尔小更新,你的配置可能漂出合规。
- 把同意状态对用户可见(页脚放个链接可以重新打开横幅)。