周一上线了新设计。到周三 AdSense 后台显示页面 RPM 从 $8.40 跌到 $3.10。每页展示数大致没变,所以不是流量问题——是产出问题。几乎可以肯定是几样问题叠加在一起:新模板把一些广告位丢了、广告位被挤到首屏以下导致可见度回退、新版面把响应式广告在移动端搞坏了,或者某个被遗忘的手动广告位还指着一个新模板里根本不渲染的 slot ID。解决思路不是”把改版回滚”,而是把新模板每一个广告位逐个走一遍,确认它在投放、在可见、并且尺寸有竞争力。
常见原因
按真实改版复盘中出现的频率排序。
1. 手动广告位在新模板里漏掉了
老模板有 4 个手动广告位:页头、正文-1、正文-2、侧栏。新模板只剩 2 个(页头、文末)。你没意识到那两个是 AdSense 广告位,所以没把它们迁过去。
怎么判断:AdSense → 报告 → 广告单元。对比周一与上周同一天每个单元的展示量。展示量掉到接近 0 的那些,就是新模板里漏掉的。
2. 可见度下降,因为广告位被推到首屏以下
老设计的正文内广告在第 2 段。新设计的英雄图占了 80% 视口高度,第一个广告挪到第 5 段——远在首屏以下。首屏以下可见度通常 30-40%,首屏以上 75-85%。可见度低 → 出价低。
怎么判断:AdSense → 报告 → 可见展示 / 展示 × 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 → 报告 → 按设备筛选。移动端每页展示数掉了,桌面端不变,就是移动端广告位漏了。
7. 新主题里 Auto Ads 被无意中关掉
新模板 <head> 里没有 AdSense Auto Ads 那段标签(enable_page_level_ads: true)。Auto Ads 在全站停了,但手动广告位还在工作。
怎么判断:在新页面 view-source。搜 enable_page_level_ads。没找到就是 Auto Ads 关了。跟老模板归档对比同一关键字。
开始前先确认
- 建立基线:计算改版前 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 最高、又不违反政策的位置。别放在正文之前——那违反 Better Ads Standards。
第 4 步:Auto Ads 被无意关掉的话,重新打开
在新模板 <head> 里:
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXX" crossorigin="anonymous"></script>
然后在 AdSense → 广告 → 按网站 → 你的域名 → 编辑,确认 Auto Ads 开关是 ON。注意:已经有手动广告位的话,把 Auto Ads 密度调到 Low 或 Medium,避免双重投放。两者权衡见 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; }
}
每个断点下都给容器预留足够装下该断点最大可能创意的尺寸。
第 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。
常见坑
- 拿改版后第 1 天对比改版前一周——AdSense 的竞价校准要 7-14 天,第 1 天数据不代表稳态。
- 没看展示数就断言”RPM 跌了”——展示数掉了 50% 说明问题在广告位丢失,不是出价 CPM。
- 关了 Auto Ads 又忘了在等价位置补手动单元。
- 给所有广告位包括英雄位都加
loading="lazy",然后想不通为什么展示量掉。 - 以”性能”为名删 schema——上下文信号比 50ms 的 LCP 重要得多。
- 在 14 天观察期里每天调版面,根本没法定位是哪一项改动让 RPM 动起来。
FAQ
Q:RPM 掉了 60%,我能不能直接回滚改版?
可以,但先把根本原因找出来。如果只是一个广告位漏了,把它补到新模板里就行,不必撤掉其他 100 条无关的改进。只有 48 小时内无法定位坏掉的部件,才考虑回滚。
Q:改版后是不是必然会有 RPM 下跌?
短期下跌 5-10% 正常,这是 AdSense 竞价系统适应新版面的过程。超过 15% 就一定是哪里坏了。如果是”完全没广告”的更严重情形,见 AdSense 广告不显示。
Q:可见度从 70% 掉到 45%,这是主要原因吗?
大概率是。可见度直接影响 CPM 出价。把广告位往上挪、把广告位高度控制在 280px 以下让它更容易留在视口里,14 天后再测一次。
Q:Google 会不会因为我”变现不足”惩罚我?
不会,但删 schema 或缩短内容的改版可能触发”低价值内容”标记,那才是真的处罚信号。改版后 30 天去 AdSense 政策中心确认一下。见 AdSense 低价值内容。
Q:能不能把新旧版面并排做 A/B 测试?
可以——大多数 CDN 层 A/B 工具(Cloudflare Workers、Vercel Edge Middleware)都支持。各发 50% 流量,按变体测 14 天 RPM。注意两个变体输出相同的广告 slot ID,这样 AdSense 报告里桶能直接对比。