周一上线了新设计。到周三 AdSense 后台显示页面 RPM 从 $8.40 跌到 $3.10。每页展示数大致没变,所以这不是流量问题——是产出问题。
最快的恢复路径: 在 AdSense 里打开 Reports(报告),把日期范围设成上线前 7 天 vs 上线后 7 天,然后按 Ad unit(广告单元)拆分。任何展示量骤降的单元,就是新模板里漏掉的——先把它按原来的页面位置补回去。在绝大多数改版复盘里,光这一步就能找回丢掉的大头 RPM。然后再顺着下面的清单往下排。
下跌几乎总是几样问题叠加在一起:新模板把广告位丢了、广告位被挤到首屏以下导致可见度回退(可见度和 CPM 高度相关)、响应式广告在新断点下挑错了尺寸,或者模板”清理”标题和 schema 时把页面上下文信号削弱了。解决思路不是”把改版回滚”,而是把新模板每一个广告位逐个走一遍,确认它在投放、在可见、并且尺寸有竞争力。
截至 2026 年 6 月的 AdSense 变化提醒:旧的
enable_page_level_adspage-level-ads 标签已废弃(2016 年就被 Auto ads 取代了)——别再拿它当诊断依据。另外,2026 年 4 月 16 日 Google 移除了 Auto ads 的 “ad load”(广告负载)滑块,改成了 banner 广告的 advanced settings(高级设置):Maximum number of ads、Minimum distance between ads、Find more ad placements on article pages。下面的步骤都按当前后台来写。
常见原因
按真实改版复盘中出现的频率排序。
1. 手动广告位在新模板里漏掉了
老模板有 4 个手动广告位:页头、正文-1、正文-2、侧栏。新模板只剩 2 个(页头、文末)。你没意识到那两个是 AdSense 广告位,所以没把它们迁过去。
怎么判断:AdSense → 报告 → 广告单元。对比周一与上周同一天每个单元的展示量。展示量掉到接近 0 的那些,就是新模板里漏掉的。
2. 可见度下降,因为广告位被推到首屏以下
老设计的正文内广告在第 2 段。新设计的英雄图占了 80% 视口高度,第一个广告挪到第 5 段——远在首屏以下。首屏以下可见度通常 30-40%,首屏以上 75-85%。按 IAB/MRC 标准,只有当展示广告至少 50% 的像素在屏幕上连续停留至少 1 秒,才算一次”可见”展示,所以读者根本没滚到的广告等于白投。可见度和 CPM 出价高度相关;一条粗略的经验:把 Active View 可见度从约 40% 提到约 70%,大致能找回 30% 量级的 RPM。
怎么判断:AdSense → 报告里加上 Active View viewable(可见展示)指标,或者自己算 可见展示 / 总展示 × 100。改版前是 70%+、现在掉到 50% 以下,这条原因就实实在在成立。
3. 新断点下响应式广告挑错了尺寸
老 CSS 在 1024px+ 显示侧栏。新设计的侧栏只在 1280px+ 出现。AdSense 的响应式广告在首次渲染时协商尺寸,容器意外变窄时会回落到更小的格式。
怎么判断:把桌面页面缩到 1100px 宽看。如果侧栏广告展示的是 250x250 而不是 300x600,响应式单元因为容器宽度选错了尺寸。
4. 页面上下文信号变弱
你换了 <title> 模板、移除了结构化数据,或者缩短了文章内容。AdSense 靠页面上下文匹配广告主。如果页面现在看起来”瘦”或者跑题,你拿到的就是低 CPM 的填充创意。
怎么判断:AdSense → 报告 → RPM 跌幅最大的 URL 列表。排序,打开前 5,确认新模板里仍然在输出正确的 <title>、meta description、结构化数据,以及至少 800 字的有效内容。
5. 懒加载太激进,展示量下来了
老模板按区块可见性加载广告(eager)。新模板全开 loading="lazy"。懒加载广告只在用户滚动时触发——读者还没滚就跳走,广告就根本没投。每次浏览的广告展示数下来了。
怎么判断:AdSense → 报告 → 广告展示 / 页面浏览 比例。如果它和 RPM 一起掉了 20%+,就是懒加载在压填充率。
6. 新版面把跨设备渲染搞掉了
某些广告位你在移动端用 display: none,想换成移动端专属单元,但移动单元从来没真正配上。结果移动流量(经常是总流量的 60-70%)看到的广告反而少了。
怎么判断:AdSense → 报告 → 按 Device(设备)拆分,或筛到 Mobile。移动端每页展示数掉了、桌面端不变,就是移动端广告位漏了。设备分桶的排查路径见 AdSense 移动端 vs 桌面端填充率。
7. 新主题里 Auto ads 被无意中关掉
新模板 <head> 里不再加载 AdSense 代码(pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-...),或者 AdSense 后台里的 Auto ads 开关被关了。Auto ads 在全站停了,但写死的手动 <ins> 广告位还在工作。
怎么判断:在新页面 view-source,确认 adsbygoogle.js 加载脚本还在。然后在 AdSense 里进 Ads → 点你网站旁边的 Edit,确认 Auto ads 开关是 ON。别再去找 enable_page_level_ads——这个旧标签已废弃,Auto ads 也早就不靠它控制了。
你属于哪一桶
读一行 AdSense 报告,往往不用动代码就能先把原因指出来。
| 报告里看到的 | 最可能的原因 | 跳到 |
|---|---|---|
| 每页展示数大幅下降,RPM 跟着跌 | 广告位丢失(原因 1)或 Auto ads 关了(原因 7) | 第 1、2、4 步 |
| 展示数大致不变、RPM 跌、可见度跌 | 广告位在首屏以下(原因 2) | 第 3 步 |
| 桌面端某个广告尺寸现在变小了 | 响应式容器太窄(原因 3) | 第 5 步 |
| 每次浏览展示数跌,但可见度正常 | 懒加载太激进(原因 5) | 第 7 步 |
| 移动端展示数跌、桌面端不变 | 移动端广告位漏了(原因 6) | 第 2 步 |
| 特定 URL 段位 RPM 跌、CPM 低 | 页面上下文 / schema 被删(原因 4) | 第 6 步 |
开始前先确认
- 建立基线:计算改版前 7 天的平均页面 RPM、每页展示数、可见度。
- 确认改版是真正的原因——不是季节性 CPM 回落或算法变更。有历史数据的话跟去年同期对比。
- 记下改版部署的准确时间戳;AdSense 报告是按时区偏移的。
- 同时能拿到新旧模板源码(git 历史就行)。
需要收集的信息
- AdSense → 报告 → 广告单元 两个 7 天窗口:改版前 vs 改版后。
- 同样筛 国家、设备、URL 分组、广告尺寸。
- 一篇代表性新文章页面的 view-source HTML。
- 同一篇文章在缓存 / 归档版本中的 view-source HTML。
- DevTools 网络面板筛
pagead2.googlesyndication.com的请求情况。 - 改版前后的 CrUX LCP/CLS 现场数据样本。
一步步修复
自顶向下:先确认哪些原因成立,从影响最大的开始改。
第 1 步:diff 广告单元清单
按广告单元粒度导出 AdSense 报告,分别是改版前 7 天和改版后 7 天:
# 对每个广告单元做 csv-diff
diff <(sort pre.csv) <(sort post.csv) | less
后期展示量不到改版前 10% 的单元,基本就是新模板里漏掉的。把它们的 slot ID 记下来。
第 2 步:把漏掉的手动广告位补回来
对每一个漏掉的 slot ID,在新模板里等价位置放回去。如果新模板真的没地方,就在 AdSense 里建一个新广告单元替换:
<div class="ad-slot" style="min-height: 280px;">
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-XXXXXXXX"
data-ad-slot="NEW_SLOT_ID"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
</div>
位置要语义对应:被删掉的”导语后”广告位,应该在新模板里也出现在导语之后,而不是文末。
第 3 步:重新核对首屏可见位置
打开一篇代表性文章。看在 1366x768 桌面和 375x667 移动上,第一个广告相对视口的位置。任一设备上落到首屏以下,就把它往上挪。
移动端,标题正下方的页头横幅是 RPM 最高、又不违反政策的位置。别放在任何内容之前(那是 prestitial 插屏),并且把广告总密度控制在正文主区域的 30% 以内——Coalition for Better Ads 在移动端把 sticky 和内联广告都算进这 30% 里,而 Google 评估 2026 年更新后的标准(新增了更多被禁的移动端体验)不早于 2026 年 5 月 14 日。覆盖屏幕超过 30% 的大 sticky 广告同样不达标。
第 4 步:Auto ads 被无意关掉的话,重新打开
先确认 AdSense 加载脚本在新模板的 <head> 里、每个页面都有:
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXX" crossorigin="anonymous"></script>
这一段同时驱动 Auto ads 和你的手动 <ins> 广告位;现在已经没有单独的 page-level-ads 标签了。然后在 AdSense 里进 Ads → 点你网站旁边的 Edit,确认 Auto ads 开关是 ON。它下面的格式开关分别是 Intent-driven formats、Overlay formats、In-page formats。
如果你同时跑手动广告位、又想限制重复投放,打开 banner 广告的 advanced settings(2026 年 4 月 16 日替代了旧的 ad-load 滑块),把 Maximum number of ads 和 Minimum distance between ads 调到合理值。Auto ads 如果投到了你已经手动放的位置,用 Page exclusions 和 Excluded areas 排除掉。两者权衡见 Auto vs 手动 AdSense。
第 5 步:修正响应式广告容器宽度
每个会渲染广告的断点都要审一下 CSS。容器宽度要跟 AdSense 期望的对上:
@media (min-width: 1280px) {
.sidebar-ad-container { width: 300px; min-height: 600px; }
}
@media (min-width: 768px) and (max-width: 1279px) {
.sidebar-ad-container { width: 300px; min-height: 250px; }
}
@media (max-width: 767px) {
.sidebar-ad-container { width: 100%; max-width: 336px; min-height: 280px; }
}
每个断点下都给容器预留足够装下该断点最大可能创意的尺寸。按 Google 文档,响应式 <ins> 如果放在浮动元素或宽度为 0 的父容器里,就算不出自己的尺寸、会塌陷,所以每个广告父容器都得用 CSS 媒体查询给出明确宽度。移动端广告位保留 data-full-width-responsive="true"(Google 推荐),让它扩展到全屏宽度,而不是回落成小横幅。
第 6 步:恢复页面上下文信号
对每一个 RPM 跌幅超过 30% 的 URL 段位,审一下渲染后 HTML:
<title>存在、有区分度、与文章主题匹配<meta name="description">存在,120-160 字符<h1>跟主题匹配- 结构化数据(
Article、BreadcrumbList)还在输出——用 Rich Results Test 验 - 正文字数跟改版前差不多(用 Wayback 取改版前快照对比)
“清理样板”的改版会无意删掉 schema,丢失上下文定向。把 schema 加回来。见 瘦内容页 AdSense 审核。
第 7 步:调整懒加载激进程度
如果你给所有广告都加了 loading="lazy",把前 1-2 个广告(大概率在初始视口里)改回 eager:
<!-- 第一个广告: eager -->
<ins class="adsbygoogle" data-ad-slot="..." ...></ins>
<!-- 首屏以下的广告: lazy -->
<ins class="adsbygoogle" loading="lazy" data-ad-slot="..." ...></ins>
第一个广告立即触发,能把丢失的展示数找回来大部分,同时不会重新引入 CWV 问题。
第 8 步:设一个 14 天观察期再回看
修复部署完之后,AdSense 的竞价系统需要 7-14 天对新版面重新校准出价。前 5 天别恐慌式微调。在第 14 天对比改版前基线。
验证
- 第 14 天页面 RPM 恢复到改版前基线的 ±15% 以内。
- 每页展示数回到基线 ±10% 以内。
- 可见度分数高于 60%(理想是 70% 以上)。
- 改版前所有在投的广告单元,现在每天至少有改版前 30% 的展示量。
- 后台没有新的 AdSense 政策违规出现。
长期防止
- 任何改版上线前,先把当前广告单元清单导出来,放进迁移 checklist 作为”必须迁移”项。
- 全量切换前做至少 7 天的并排 A/B,直接对比 RPM。
- 在分析工具里给每一次改版打清晰的日期标签,以便未来复盘方便。
- 锁一个”最低可接受 RPM” SLA;改版后 14 天还低于这条线,就回滚。
- 任何模板迁移都要保留结构化数据和 meta 标签,把它们当作变现的承重墙,而不只是 SEO。
- 把旧模板归档(git tag),需要的时候可以并排 diff。
当前的 Auto ads 控件和 2026 年 4 月后的 banner 设置,见 Google 的 About Auto ads 帮助页;位置合规方面,Coalition for Better Ads 标准 定义了 30% 密度和 sticky 广告的上限。
常见坑
- 拿改版后第 1 天对比改版前一周——AdSense 的竞价校准要 7-14 天,第 1 天数据不代表稳态。
- 没看展示数就断言”RPM 跌了”——展示数掉了 50% 说明问题在广告位丢失,不是出价 CPM。
- 关了 Auto ads 又忘了在等价位置补手动单元。
- 跑去新模板里搜
enable_page_level_ads来”检查 Auto ads”——这个标签已废弃;应该改成确认adsbygoogle.js加载脚本和后台开关。 - 给所有广告位包括英雄位都加
loading="lazy",然后想不通为什么展示量掉。 - 以”性能”为名删 schema——上下文信号比 50ms 的 LCP 重要得多。
- 在 14 天观察期里每天调版面,根本没法定位是哪一项改动让 RPM 动起来。
FAQ
Q:RPM 掉了 60%,我能不能直接回滚改版?
可以,但先把根本原因找出来。如果只是一个广告位漏了,把它补到新模板里就行,不必撤掉其他 100 条无关的改进。只有 48 小时内无法定位坏掉的部件,才考虑回滚。
Q:改版后是不是必然会有 RPM 下跌?
短期下跌 5-10% 正常,这是 AdSense 竞价系统适应新版面的过程。超过 15% 就一定是哪里坏了。如果是”完全没广告”的更严重情形,见 AdSense 广告不显示。
Q:可见度从 70% 掉到 45%,这是主要原因吗?
大概率是。可见度直接影响 CPM 出价(经验上,从 40% 回到 70% 大约值 30% 的 RPM)。把第一个广告位往上挪、把广告位高度控制在约 280px 以下让它更容易留在视口里,14 天后再测一次。记住 IAB/MRC 的门槛:50% 像素在屏上连续停留 1 秒才算一次可见展示。
Q:在哪里把 Auto ads 重新打开、又不让它和我的手动广告位重叠?
AdSense → Ads → 点你网站旁边的 Edit,把 Auto ads 开关打到 ON,然后用 banner 广告的 advanced settings(Maximum number of ads、Minimum distance between ads)加上 Excluded areas,避免它在你手动放的位置上重复投放。旧的 “ad load” 滑块已于 2026 年 4 月 16 日移除。
Q:Google 会不会因为我”变现不足”惩罚我?
不会,但删 schema 或缩短内容的改版可能触发”低价值内容”标记,那才是真的处罚信号。改版后 30 天去 AdSense 政策中心确认一下。见 AdSense 低价值内容。
Q:能不能把新旧版面并排做 A/B 测试?
可以——大多数 CDN 层 A/B 工具(Cloudflare Workers、Vercel Edge Middleware)都支持。各发 50% 流量,按变体测 14 天 RPM。注意两个变体输出相同的广告 slot ID,这样 AdSense 报告里桶能直接对比。