AdSense "No Ads Available"(广告位空白)

AdSense 广告位渲染成空白、报告显示未匹配请求。先用 DevTools 诊断,再处理库存 / 尺寸 / 政策 / ads.txt 问题。

站上有些页面广告正常,另一些(通常是同一个模板、同一个作者、同一天发的)slot 渲染成空白,AdSense 报告里这次展示被算作未匹配请求(unmatched ad request)。这跟代码 bug 不一样,不是非黑即白,而是一次实时拍卖:这个页面这一时刻这个用户没有可填充的竞价,于是广告位塌成了空白。

最快路径: 用 Chrome 打开问题页,跑一遍 DevTools 看广告位为什么空(根本没发请求、返回 403、返回 200 但没填、还是 ERR_BLOCKED_BY_CLIENT),然后只针对这一个信号处理。能修的情况大多是两种:固定尺寸输了拍卖(改响应式),或者新页面 AdSense 还没爬到(等 3–7 天)。剩下的属于需求侧或政策问题,你能诊断但没法强行让它填。

先排除一件事:这说的是单次展示层面的”没填充”,不是账户级的 Limited ad serving 横幅。如果 AdSense → AccountPolicy center 显示 “Limited ad serving” 状态,那是另一回事(见下文原因第 6 条),改广告尺寸没用。

常见原因

按命中率从高到低。

1. 页面主题广告主池太窄

“DaVinci Resolve 怎么修 vsync 撕裂”页面有几十个潜在广告主。“古董 Casio FX-100 收藏者论坛”可能只有两个,而且这周都暂停了。AdSense 把这类情况叫未匹配请求(unmatched ad requests):请求发出去了,但没有广告主想要这个位置。

怎么判断:AdSense → Reports,加上 CoverageMatched requests 两列,按页面 URL 拆分。某页广告请求很多但 Coverage 很低,就是输在需求上,不是代码。

2. 用户所在国家或语言的库存很薄

如果你的流量集中在 AdSense 需求稀薄的市场(部分非洲、中亚地区),或者读者用的语言广告很少,这批展示的 Coverage 会掉到接近 0。

怎么判断:AdSense → Reports,按 Country 拆分。如果 1–2 个国家占了广告请求大头但收益接近 0、Coverage 很低,就是地域库存问题。

3. slot 尺寸跟当下投放活动对不上

你的 slot 固定 320x50,但 AdSense 当前需求大多投 300x250728x90,本来能赢的拍卖也就输了。截至 2026 年 6 月,Google 明确建议用响应式而不是固定尺寸,因为响应式会自动适配容器、拉到更广的竞价池。

怎么判断:把 slot 改成响应式(data-ad-format="auto")。Coverage 明显上去就是固定尺寸的问题。

4. 浏览器或系统级拦截

Brave、Firefox Strict、iOS Safari 内容拦截、uBlock Origin、企业代理都会在请求发出之前就拦掉广告脚本。AdSense 根本没收到这次展示,空白广告位看起来像”没库存”,其实是客户端拦截。在 DevTools 里它表现为 adsbygoogle.js 上的 net::ERR_BLOCKED_BY_CLIENT

怎么判断:AdSense → Reports 把广告请求数跟你的分析工具页面浏览数对比。广告请求数明显低于浏览数(大致 < 60%),就是被拦截,而不是没需求。

5. 用户拒绝了个性化广告

GDPR、欧盟数字市场法(DMA)以及美国各州隐私法(加州 CPRA 等)允许用户拒绝数据驱动的定向。AdSense 会尊重这个选择,回退到非个性化(上下文)广告,填充率明显更低。注意这跟 **limited ads(LTD)**投放模式不是一回事,后者是在你没有收集到有效同意时,把同样的逻辑套到整个账户上。

怎么判断:AdSense → Privacy & messaging,确认你的同意弹窗(CMP)已上线;再到 Reports 里对比用户与同意横幅交互前后的 Coverage。

6. 账户级 “Limited ad serving”

这一条最容易被误判。Google 可以在评估你的流量质量期间(新账户非常常见),或者怀疑无效流量时,限制整个账户能投多少广告。这段时间里多数广告位不管什么尺寸都空白。截至 2026 年 6 月,这类评估限制通常 30 天内解除(常见 10–30 天),到期自动放开;但如果流量质量上不去,可能无限期延长。

怎么判断:AdSense → AccountPolicy center。账户层会出现 “Limited ad serving” 状态横幅。看到它就别再折腾广告代码了,把精力放在流量质量上(必要时走无效流量申诉)。

7. 页面级政策限制

擦边的页面(赌博相关、成人题材、引用受版权保护的下载)可能被静默限制:不是全站撤广告,而是没有需求愿意竞价,或者 Google 直接返回 403(“an ad shouldn’t be served”)。DevTools 里这次广告请求会标红、状态 403

怎么判断:AdSense → AccountPolicy centerPage-level enforcement(原 “Page-level violations”)。被限制的 URL 会列在这里,带违规类型。

8. 新页面 AdSense 还没爬到

文章发出后,AdSense 的内容分类器要花点时间爬取并归类。在归类完成前,它不知道该匹配什么,竞价做不好。

怎么判断:发了一周以上的页面填充正常,刚发的新文章不填。等 3–7 天再看。

最短修复路径

第 1 步:用 Chrome DevTools 诊断

Google 那个独立的 “Ad Inspector” 已经没了,现在的官方方法是 Chrome DevTools。在问题页打开 DevTools(macOS 按 Cmd+Opt+I,Windows/Linux 按 Ctrl+Shift+I),切到 Network 标签,在过滤框输入 ads?,刷新页面看结果:

你看到的现象诊断行动
根本没有 ads? 请求脚本没加载(被拦截、标签坏了、同意弹窗挡住)Console 有没有 ERR_BLOCKED_BY_CLIENT,换干净浏览器配置测
请求状态 403(标红)政策 / 站点未通过 / 页面被限制Policy center(原因 6、7)
状态 200 但广告位空未匹配请求,或 ads.txt 有问题先核对 ads.txt,再试响应式
Console 报 Fluid responsive ads must be at least 250px wide广告位宽度为 0 或太窄在 CSS 里给容器一个真实宽度

读懂这一个信号,动手之前就能砍掉一半诊断分支。

第 2 步:核对 ads.txt

200 但空白的广告位,十有八九是 ads.txt 问题,而不是没需求。访问 https://yourdomain.com/ads.txt,确认里面有你的 publisher ID,且跟 AdSense 给的完全一致(AdSense → SitesGet code 会显示应有的那行):

google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0

AdSense → Sitesads.txt status 必须显示 Authorized。文件缺失或显示 “Unauthorized” 会全站压低填充。

第 3 步:改响应式

窄填充的情况,多半给 AdSense 更多尺寸选项就解决了:

<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-XXXXXXXXXX"
     data-ad-slot="1234567890"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>

记得给父容器一个非零宽度,否则就会撞上第 1 步那条 Fluid responsive ads must be at least 250px wide: availableWidth=0 报错。固定尺寸(比如 data-ad-format="rectangle")在大多数细分领域都打不过响应式。

第 4 步:给同一个 slot 配多个尺寸(multi-size)

非要固定尺寸的话,在 AdSense → AdsBy ad unit 里给这个单元配多个尺寸:

<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-XXXXXXXXXX"
     data-ad-slot="1234567890"
     data-ad-format="auto"
     data-ad-layout-key="-fb+5w+4e-db+86"></ins>

尺寸组合越多,拍卖能填的竞价就越多。

第 5 步:审视页面内容是否擦政策线

如果第 1 步返回 403,或者该 URL 出现在 Policy center → Page-level enforcement,逐字过一遍这份清单:

  • 有没有提到赌博、体育博彩、消遣性毒品、武器(哪怕侧面)?
  • 有没有嵌入未审核的 UGC?
  • 有没有引用受版权保护媒体的下载或链接?
  • 有没有涉及敏感健康、政治或”惊悚”内容?

任何一项擦边都可能触发需求受限。改写或加上背景说明后,从 Policy center 对应条目提交复审。

第 6 步:按主题设定合理预期

有些主题的填充率本来就上不去。Coverage 的大致参考区间:

主题组合预期 Coverage
个人金融、软件、电商90–99%
技术教程、效率工具80–90%
小众爱好、地域内容50–75%
翻译性质的非英语市场30–60%

如果你的组合本来就在低区间,把精力放在 RPM 优化(每次会话浏览数、停留时长、可见度)上,别死磕 Coverage。

第 7 步:多接一家广告网络

只靠 AdSense、Coverage 长期偏低的站,加一家备网(Ezoic,流量达标的话 Mediavine / Raptive)。它们的需求池不一样,能接住 AdSense 没填的那些展示。把 AdSense 当成竞价方之一,而不是唯一一家。

怎么确认修好了

  1. DevTools → Network → 过滤 ads?,请求返回 200 且广告位里真的渲染出了广告。
  2. AdSense → Reports 里,该 URL 的 Coverage 在接下来 24–48 小时内回升。
  3. Policy center 没有账户级 “Limited ad serving” 横幅,该 URL 也没有页面级处罚。

Coverage 是滚动平均,改完代码后给它一两天再下判断。

常见问题

“No ads available” 是不是等于账户被封了? 不是。账户被封或停用会全站停投,并在 Policy center 显示处罚通知。某些页面广告位空白,几乎都是单次展示没填充,一定程度上是正常的。没有任何发布商的 Coverage 能到 100%。

我刚发的新文章不出广告,旧的正常,是 bug 吗? 通常不是。AdSense 还没爬取并归类这个新 URL,匹配不好需求。等 3–7 天。如果一周后还空、而 DevTools 显示 200,就去查 ads.txt 和广告位宽度。

DevTools 里广告请求状态 403,怎么办? 403 表示 Google 判定这个页面或站点不该投广告。去 AdSense → AccountPolicy center 看页面级处罚或 “Limited ad serving” 状态,修好它指出的问题,再提交复审。

为什么我自己能看到广告,部分访客看不到? 两个常见原因:那些访客开了拦截器(请求根本没发出,找 ERR_BLOCKED_BY_CLIENT),或者他们在你的同意弹窗里拒绝了个性化广告、拿到填充率更低的非个性化广告。两种都是预期内的,靠代码改不了。

新账户的 “Limited ad serving” 会持续多久? 截至 2026 年 6 月,这种自动评估限制通常 30 天内解除(常见 10–30 天)。Google 信任你的流量后会自动放开。这段窗口别一直改广告代码,去做真实流量。

预防建议

  • 新建 slot 默认全部用 data-ad-format="auto",除非有特别理由,并且永远给容器一个真实宽度。
  • 保持 ads.txt 处于 Authorized;换 DNS、CDN 或主机后重新核对。
  • 极冷门方向要和主流话题搭配,让平均广告主池保持健康。
  • 在 AdSense → Reports 按 URL 监控 Coverage,长期 0 Coverage 的页面回头审视内容。
  • 新账户在评估窗口期间,重点做干净、合规的真实流量,而不是反复调广告单元。

相关阅读

外部参考:Use Chrome DevTools to troubleshoot ads not showingLimited ad serving vs. limited ads

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