为什么 AdSense 广告展示次数少于网页浏览量?

在一个网页中放置三个 AdSense 广告单元,并不保证每次网页浏览都会产生三次广告展示。广告需要经过请求、填充和加载,才能记录展示。因此,展示次数少于网页浏览量时,应依次检查报表范围、广告请求、覆盖率以及加载情况。

网页浏览量与广告展示次数有什么区别?

AdSense 的网页浏览量计算用户浏览展示 Google 广告的网页的次数,不取决于网页中有多少个广告。广告请求是获取广告的请求,其中也包括没有返回广告的请求。展示次数则与广告加载阶段有关。把这三个指标都当作访问次数,容易判断错误。可以先阅读 Google 对网页浏览量和广告请求的定义。

指标 衡量内容 解读时的限制
网页浏览量 展示广告的网页被浏览的次数 三个广告单元不等于三次网页浏览
广告请求 获取广告的请求次数 即使没有返回广告,也可能计入请求
覆盖率 至少返回一个广告的请求所占比例 不是看过广告的访客比例
展示次数 在广告加载阶段记录的展示 不是放有广告代码的位置数量
Active View 可见率 可衡量的展示中符合可见标准的比例 与普通展示次数分开计算

覆盖率的计算方式是:返回广告的请求次数除以所有广告请求次数,再乘以 100。如果三次请求中有两次返回广告,覆盖率约为 66.7%,而不是说每三位访客中有两位看过广告。Google 的覆盖率定义使用请求次数作为分母。

还要留意计量时间。截至 2026 年 10 月,横幅展示广告采用 count-on-download,即广告开始下载时计数。Google 已宣布,从 2027 年 2 月 17 日开始转向在广告素材加载完成并开始渲染时计数;渲染是浏览器开始绘制显示内容的过程。部分其他广告格式已经采用基于渲染的计量方式。比较不同时期或格式前,应结合展示次数定义和计量方式变更公告确认适用方法。

为什么三个广告位置不一定产生三次展示?

假设网页顶部、中部和底部各有一个广告单元。如果三个单元都请求并加载了广告,一次网页浏览可以产生多次展示。但如果下方单元采用与滚动位置相关的延迟加载,访客可能在请求发出前就离开。另一个单元也可能已请求广告,却没有获得合适的广告。

没有被用户看到,与没有计入普通展示次数,是两件事。已经加载的底部广告,即使用户从未滚动到那里,也可能计入展示。Active View 通常要求至少 50% 的广告面积在屏幕中显示至少一秒。这是另一项衡量“有机会看到”的标准,详见 Google 的 Active View 说明。

因此,不要把三个广告位置理解为展示次数必须等于网页浏览量的三倍。如果在同一报表范围内,每次网页浏览至少记录一次展示,那么展示次数理应不低于网页浏览量。低于这个水平是调查的起点,但单凭这个比值,无法计算完全没有展示广告的访问所占比例。

应该优先排查哪些可能原因?

  • 比较范围不同:确认没有用整个网站的网页浏览量去比较某一个广告单元的展示次数,也没有把所有设备与仅限移动设备的数据相比较。Google Analytics 4(GA4)的浏览量也不同于 AdSense 网页浏览量,解读比例时不能混用。
  • 请求次数不足:延迟加载、移动端隐藏的广告位置、推迟运行的脚本或执行错误,都可能影响请求。网页源代码中存在广告代码,并不能证明浏览器实际发出了广告请求。
  • 请求没有匹配到广告:检查合适的广告需求、广告尺寸、屏蔽控制、广告投放限制、ads.txt 状态、政策问题和抓取工具问题。ads.txt 文件用于标识获授权的广告资源销售方;如果账号提示问题,应按提示处理。
  • 加载或报表问题:网络缓慢、访客在广告加载前退出、实现错误都可能造成影响。也要考虑无效流量调整和报表延迟,但不要因此断言某些访客就是机器人。

广告拦截工具和用户同意管理可能影响请求及投放,也可能影响 AdSense 网页浏览量。因此,它们本身不足以证明两个 AdSense 指标出现差异的原因。Google 的覆盖率问题排查指南分别讨论了账号限制、政策与抓取问题以及屏蔽控制。

怎样按顺序检查报表?

  1. 统一时间和范围。在 AdSense 的报表中选择受影响的网站,核对设备、广告单元和格式筛选条件。比较相同长度的时段,例如不含今天的最近七天与此前七天,而不是只看今天尚未完整的数据。比较导出报表时也应统一时区。
  2. 同时显示网页浏览量、广告请求、覆盖率和展示次数。如果找不到请求或覆盖率,请查看高级指标。某种细分维度不支持某项指标时,可分别使用网站级和广告单元级报表。
  3. 按设备细分。如果只有移动端下降,先检查移动端实际可用的广告空间、隐藏位置和延迟执行情况。不同国家之间差异较大时,也值得检查广告需求以及适用的同意条件。
  4. 按广告单元细分。判断是否顶部单元稳定,而中部和底部单元下降。不能把单个单元的数据除以全站网页浏览量,然后称作网站的广告失败率。
  5. 检查政策中心与网站状态。查看投放限制、政策与抓取提示以及 ads.txt 警告,再遵循相关指引。仅有一个空白位置,并不能证明账号受到了处罚。
报表中的现象 优先调查的方向
广告请求已经下降 代码执行、移动端条件、延迟加载和流量变化
请求稳定,覆盖率下降 未填充请求、屏蔽设置、政策、抓取工具和网站状态
覆盖率稳定,展示次数下降 广告加载、实现变更、访客退出以及报表范围或延迟
展示次数稳定,可见率下降 广告位置、滚动到达情况和屏幕内停留时间

这些模式只能缩小排查范围,不能证明因果关系。Google 表示,展示和点击报表通常每 15–30 分钟更新,但偶尔可能延迟 24 小时甚至更久。记录延迟提示,并在数据更新后重新比较。相关说明见报表更新指南和展示次数问题排查指南。

如何在浏览器中检查广告位置状态?

从报表中找到可疑单元后,也应在未登录网站账号的状态下打开其公开网页。比较桌面端和真实移动设备,滚动到相应广告位置。观察空间、请求及加载情况,不要通过点击广告来测试。浏览器开发者工具的 Console 可查看脚本错误,Network 可查看相关请求。

对于常见的手动插入 AdSense 单元,可以在该网页的 Chrome DevTools Console 中输入下面的 JavaScript 表达式。它只读取当前属性和尺寸,不会修改网页或广告。

Array.from(document.querySelectorAll('ins.adsbygoogle'), (ad, index) => ({
  number: index + 1,
  slot: ad.getAttribute('data-ad-slot'),
  adStatus: ad.getAttribute('data-ad-status'),
  processed: ad.getAttribute('data-adsbygoogle-status'),
  width: Math.round(ad.getBoundingClientRect().width),
  height: Math.round(ad.getBoundingClientRect().height)
}));

结果是一个数组,每个匹配元素对应一个对象。adStatus 为 filled 表示返回了广告;unfilled 表示没有返回广告;unfill-optimized 表示未填充的空间被 AdSense 以其他方式优化。processed 属性是单独的处理状态,不能证明广告单元已经填充。Google 的 data-ad-status 文档说明了这一区别。

属性缺失或数组为空不一定是错误:请求可能还未发生,而且这种检查无法涵盖所有自动广告格式或跨域框架。尺寸为零是检查显示状态的线索,本身不能构成诊断。一次浏览器快照不能代表所有访客;filled 也不能保证账号已经记录展示,或已经满足可见标准。

一次只改一项,再验证结果

从受影响的单元和设备入手,不要一次修改多个设置。如果怀疑脚本延迟或优化有问题,先备份当前设置和代码,只调整相关选项,清除缓存后再对比。没有预期改善或布局出错时,应恢复已保存的配置。尺寸问题需要结合真实移动端空间与自适应广告设置检查。

修改后立即检查请求和显示状态,再等报表更新后比较相同范围的数据。记录流量规模、国家与设备构成以及广告位置变化,以区分其他因素。展示次数增加,不保证收入提高,也不能直接证明问题解决。不要绕过用户同意要求,也不要通过隐藏账号警告来处理问题。

问题持续时,在求助前准备好时段和时区、公开 URL、广告单元、受影响的设备与国家、四项指标的变化、近期修改以及复现条件。把报表与浏览器观察对应起来,才能明确需要调查的是请求、广告匹配、加载还是可见性环节。