Chrome CrUX广告指标实测:看不见的广告不算密度,流量照样计入

Chrome CrUX广告指标实测:看不见的广告不算密度,流量照样计入
张文保 22 分钟阅读 4,220 阅读
本文目录
  1. Chrome CrUX新增的4个广告指标分别怎么计算?
  2. 哪些网站会被收录进CrUX广告数据?ads.txt门槛怎么判断?
  3. Tranco前一万个域名里有多少站满足ads.txt门槛?
  4. 有广告位却没有ads.txt的站点会怎样?
  5. Chrome怎么判断一个元素是不是广告?
  6. 本地对照实验:自家投放的广告位会被计入吗?
  7. 实验室里怎么按Chrome口径复现广告数量与广告密度?
  8. 300个页面实测:广告流量和可见广告差多少?
  9. 首页和文章页的广告负载有什么差别?
  10. 出版商和SEO应该怎么用CrUX广告指标?
  11. 常见问题解答
  12. CrUX广告指标会影响谷歌搜索排名吗?
  13. 为什么我的网站在CrUX里查不到广告指标?
  14. 隐藏的广告位会被计算吗?
  15. 自己服务器上投放的广告会被识别吗?
  16. ads.txt里有几行格式错误,会不会导致不被收录?
  17. 怎么查询自己网站的CrUX广告数据?
  18. 权威参考资料

摘要:Chrome在2026年9月15日往CrUX里加了4个实验性广告指标,只有ads.txt里至少登记了一个授权卖家的站点才会被收录。Tranco前一万个域名中能访问的7009个站,满足这个门槛的是1820个,占26.0%;另有117个站的ads.txt里没有一条有效卖家记录,其中63个是因为每一行都写错了格式。用带广告识别规则的真Chrome按官方口径测了169个首页和131个文章页:149个首页产生了广告流量,30秒浏览内出现过可见广告的只有48个;广告字节的中位数约占整页的18%,大部分来自页面主框架里被标记的广告脚本,这部分只计入广告流量,不计入广告数量和广告密度。

Chrome团队在2026年9月15日发布了CrUX广告指标公告,给Chrome用户体验报告(CrUX)增加了Ad Count、Ad Density、Ad Weight: Network和Ad Weight: CPU四个指标。数据来自真实Chrome用户,按来源和页面两个层级发布,可以通过CrUX API、CrUX History API和DevTools里的广告面板查看,BigQuery数据集稍后跟进。

公告对这组指标的定位比较保守:4个指标都标为“实验性”,不属于Core Web Vitals,也没有“良好”“较差”之类的阈值,主要面向广告主和广告技术服务商。但对依靠广告变现的站点来说,广告负载第一次有了一个公开、可按域名查询的第三方数字,买方会拿它给流量定价,站长需要知道这个数字是怎么算出来的。

本文分三部分实测:先统计Tranco前一万个域名里有多少站满足ads.txt收录门槛;再用本地页面验证Chrome识别广告的几条规则;最后按官方口径在真Chrome里复现广告数量、广告密度和广告流量,看它们在300个页面上的实际分布。站内首屏内容与Page Layout算法一文讨论过广告位置与搜索排名的历史关系;本文讨论的是另一件事:Chrome自己怎么量广告。

Chrome CrUX新增的4个广告指标分别怎么计算?

按照Chrome广告指标测量方法文档,Chrome从主文档收到第一个字节开始测量,到页面卸载时结束;标签页切到后台时暂停采样,画中画视频不计入。四个指标的口径如下:

指标API字段名计算方式报告格式
Ad Count(广告数量)experimental_ad_count每秒对视口采样一次,统计有至少1个像素在视口内的广告元素个数,取整个会话的平均值保留两位小数,如3.00
Ad Density(广告密度)experimental_ad_density每秒采样,计算广告在视口内可见部分的面积占视口面积的比例,重叠部分按并集只算一次,取平均值整数百分比,如23
Ad Weight: Network(广告流量)experimental_ad_kilobytes整个会话里加载所有广告相关资源的压缩后传输字节数之和整数KB
Ad Weight: CPU(广告CPU耗时)experimental_ad_cpu广告框架及其子资源消耗的JavaScript主线程执行时间之和整数毫秒

CrUX对每个指标报告第75百分位(p75),与Core Web Vitals的行业基准采用同一套统计口径。例如某站Ad Density的p75是23,意味着75%的访问里广告平均占视口面积不超过23%。

文档里有三处细节对站长影响较大:

  • display: none等不渲染的广告没有布局尺寸,不计入广告数量和广告密度,但广告流量和CPU耗时照算
  • 广告数量只要求“至少1个像素在视口内”,被其他广告遮挡的也算一个。
  • 单页应用的软导航不会重置采样,同一个标签页里的所有视图合并成一个会话分数;无限滚动页面在用户停留时会持续累积相同的采样。

由于大多数广告在跨域iframe里投放,Chrome没有提供对应的JavaScript接口,站点自己的真实用户监控(RUM)无法采集同样的数据,只能通过CrUX查看。

哪些网站会被收录进CrUX广告数据?ads.txt门槛怎么判断?

方法文档写得很明确:Chrome的广告识别在接入了常见广告伙伴的站点上最可靠,为了保证数据质量,CrUX只收录ads.txt里至少列出一个授权卖家的站点;没有ads.txt、或者文件里只有占位记录的来源,不会出现在广告指标里。这个过滤发生在CrUX聚合阶段,浏览器本身照常测量,所以DevTools的广告面板在任何站点上都会显示本地测量结果。

ads.txt是IAB Tech Lab制定的授权数字卖家规范,每一行描述一个获准售卖该站广告库存的账号,格式为广告系统域名、发布商账号ID、关系类型(DIRECTRESELLER),第四列是可选的认证机构ID。规范还定义了一条占位记录placeholder.example.com, placeholder, DIRECT, placeholder,供不卖广告的站点声明“没有授权卖家”。

“至少一个授权卖家”在技术上可以落到一个可检查的条件:文件以纯文本返回,并且至少有一行能被解析成合法的卖家记录。本文按这个条件做分档。

Tranco前一万个域名里有多少站满足ads.txt门槛?

2026年9月17日,对Tranco排行前10000个域名请求/ads.txt(根域名失败时再试www子域名),同时请求robots.txt,用两者至少有一个返回HTTP响应来判定“网站可访问”。结果如下:

ads.txt状态站点数占可访问站点
有至少一条合法卖家记录182026.0%
返回404,没有文件286740.9%
返回403等拦截状态100214.3%
状态码200但返回的是HTML页面6779.7%
ads.txt请求无法连接3204.6%
其他状态码1982.8%
是纯文本,但没有一条合法卖家记录1171.7%
只有IAB占位记录80.1%
合计7009100%

去掉被拦截、无法连接和其他状态码这几类无法判断的站点,剩下的5489个站里,满足门槛的比例是33.2%。按排名分段看差别不大:前1000名是25.5%,第1001到5000名是24.4%,第5001到10000名是27.2%。

其中两类站点需要单独说明。第一类是返回HTML的677个:请求/ads.txt得到的是一个完整网页,多数是站点把所有未知路径都渲染成首页或自定义404页面,却返回了200状态码。第二类是“有文件、无有效卖家”的117个,其中63个站的文件里有内容,但每一行都不符合规范格式

格式问题在“有卖家”的1820个站里也很普遍,其中575个文件至少含有一行无法解析的内容。常见的写法错误有这几种:

错误类型实际出现的写法问题
账号ID为空smartadserver.com, , RESELLER, ...第二列必须是账号ID
漏写账号列smartadserver.com, DIRECT, 060d053dcf45cbf3关系类型错位到第二列
关系类型拼错RESLLERRESSELERRESELLE只接受DIRECT或RESELLER
广告系统不是域名pubmatic,163963,RESELLERpub-9728394385183888, DIRECT, ...第一列应为广告系统的域名
字段顺序颠倒Pubsfusion.com ,Reseller ,100102账号ID与关系类型互换
混入非规范内容<------Google--------->分隔线、HTML片段非注释行应符合记录格式

Chrome文档没有说明它解析ads.txt时对格式错误有多宽容,本文只能按规范给出判断。对于只靠一两行有问题的记录撑着的站点,这是一个需要尽快核对的风险点。

为检验这组分档是否稳定,从中随机抽取300个站点当天重新请求一次:284个(94.7%)分档不变,“有卖家”的91个站里90个结果一致,变化主要集中在“404”与“返回HTML”之间,属于站点对不存在路径的处理不稳定。

有广告位却没有ads.txt的站点会怎样?

实验室样本里正好有一个例子:Search Engine Roundtable的首页和文章页都出现了被Chrome标记的广告框架,文章页的广告相关流量约329KB,但/ads.txt返回404。按Chrome的规则,这个站的广告体验在本地可以测到,却不会进入CrUX的广告数据。

子域名是另一个没有定论的情况。finance.yahoo.com/ads.txt返回404,而www.yahoo.com/ads.txt有757行记录。ads.txt规范允许根域名文件通过subdomain=声明覆盖子域名,但Chrome文档只说“来源和页面没有ads.txt授权卖家就不收录”,没有写明子域名是否沿用根域名的文件。使用子域名承载内容的出版商,最稳妥的做法是在子域名下也提供一份有效的ads.txt。

还有一类情况不属于这个问题。Backlinko、Yoast、Semrush的页面也产生了少量被标记为广告相关的请求,但没有任何广告框架。这些通常是被过滤清单命中的营销或统计脚本。这几个站的页面上没有广告框架,有没有ads.txt对这组指标没有实际影响。

Chrome怎么判断一个元素是不是广告?

Chrome广告识别文档列出的识别规则有四条:

  • 过滤清单匹配:子资源请求和iframe导航发出之前,与一份精简版EasyList规则比对,命中即标记为广告相关。
  • JavaScript调用栈分析:创建iframe或发起子资源请求时,如果调用栈上有已标记的广告脚本,新资源也标记为广告。
  • 框架标记不可撤销:一个iframe被标记为广告后,它后续发起的所有请求都继承这个标记,即使它之后导航到与广告无关的地址。
  • 主框架本身永远不会被标记为广告,但主框架里使用的脚本、图片等子资源可以被标记。

文档还提供了一个测试手段:任何请求地址加上?ad_filterlist_demo_param=1,Chrome都会把它当作广告相关资源处理。DevTools里可以在“应用”面板的广告标签页打开“突出显示广告”,在网络面板启用“Is ad-related”列,或者在元素面板查看广告标记的原因。

本地对照实验:自家投放的广告位会被计入吗?

为验证这些规则的实际效果,在本机搭了一个测试页面,用加载了Chrome广告过滤规则集(9.71.0版)的真Chrome打开,通过开发者协议读取每个框架的广告状态和每个请求的广告标记。页面里放了8个对照元素:

元素加载方式Chrome判定判定原因
横幅iframe甲地址带测试参数广告根框架命中过滤规则
横幅iframe乙同一个横幅页面,地址不带参数非广告
脚本创建的iframe甲由带测试参数的脚本创建,iframe地址是普通页面广告根框架由广告脚本创建
脚本创建的iframe乙同样的代码,脚本地址不带参数非广告
隐藏的iframe带测试参数,display:none广告根框架命中过滤规则
会跳转的iframe带测试参数,1.5秒后导航到普通页面仍是广告根框架标记不可撤销
主文档图片甲地址带测试参数请求标记为广告相关命中过滤规则
主文档图片乙同一张图,地址不带参数非广告

同样的横幅、同样的代码,是否被算作广告只取决于资源地址是否命中过滤清单,或者是否由命中清单的脚本创建。自建域名下投放的广告、直接写在页面里的赞助内容,只要地址不在清单里,就不会计入这组指标。反过来,隐藏的广告框架虽然不计入数量和密度,它加载的所有资源都计入广告流量;广告框架里的子资源请求,即使地址本身不在清单里,也会继承广告标记。

实验中还有一个细节:广告iframe自身的导航请求在网络事件里没有带广告标记,标记体现在框架状态上。因此在统计广告流量时,需要同时看“请求本身是否被标记”和“请求是否发生在广告框架里”两项,只看其中一项会漏算。

实验室里怎么按Chrome口径复现广告数量与广告密度?

实测样本是256个站点的首页,其中136个是按广告变现类型挑选的新闻、菜谱、天气、体育、科技站点和9个英文SEO媒体,120个是从Tranco前一万里“有合法卖家记录”的站点中随机抽取的;再从首页里各挑一篇文章,得到140个文章页。

每个页面的测量流程如下:

  1. 用本机安装的Chrome(带广告过滤规则集)以1366×900的视口打开页面,等待6秒。
  2. 每秒采样一次,共25次:前5次停在页面顶部,之后每秒向下滚动半个视口。
  3. 每次采样前通过开发者协议读取框架树,把广告根框架对应的iframe元素打上标记;主文档里由广告请求加载的图片也打上标记。
  4. 采样时计算每个广告元素在视口内的可见矩形:宽或高为0、display:none的计为“隐藏广告”,至少1个像素在视口内的计入数量;面积按6像素网格求并集后除以视口面积。
  5. 广告流量取两部分请求的压缩后字节之和:请求本身带广告标记的,以及发生在广告框架里的。

这个复现有几处与真实CrUX数据的差异,需要说清楚:

  • 测量出口在新加坡,使用无头模式,没有登录和同意弹窗交互,广告竞价的填充率明显低于真实用户访问。
  • 每个页面只测一次、约30秒,CrUX是大量真实会话的p75。
  • 没有测量广告CPU耗时。
  • 256个首页里有59个返回403,另有28个出现验证页、加载失败或其他状态码;140个文章页里有9个无效。这些页面不计入结果,最终有效的是169个首页和131个文章页。

因此下面的数字适合用来观察各指标之间的关系,不适合当作某个站点的广告负载评分。

300个页面实测:广告流量和可见广告差多少?

指标首页(169个)文章页(131个)
产生广告相关流量的页面149121
30秒内出现过可见广告的页面4843
有广告流量、但从未出现可见广告的页面10178
存在隐藏或零尺寸广告元素的页面9575
广告流量中位数499KB733KB
广告流量第90百分位2139KB3542KB
广告字节占整页字节中位数18.0%18.3%
单次采样最大广告密度第90百分位20%21%

最明显的现象是广告流量和可见广告严重脱节。首页里有101个页面加载了广告相关资源,却在30秒浏览中一个可见广告都没有出现;这些页面的广告流量中位数仍有393KB。原因主要有两个:一是广告位没有填充成功,框架尺寸为0;二是广告脚本、竞价请求和监测像素在主框架里加载,本身就不是可见元素。实测中有96个首页的广告字节全部来自主框架里带广告标记的请求,没有一个字节来自广告框架。

按Chrome的口径,这些页面在CrUX里的广告数量和广告密度可能很低,广告流量却不低。只盯广告密度的买方或站长,会漏掉一大块没有产生展示、却实实在在消耗了用户流量的广告负载。

小尺寸框架也会影响计数。48个出现过可见广告的首页里,有13个的可见广告元素中包含1×1或4×4这类像素级框架。按“至少1个像素可见就计数”的规则,它们和一个300×250的广告一样,各算一个广告数量,对密度几乎没有贡献。

在出现了可见广告的页面里,广告密度较高的有这些(数值为本次单次访问的会话平均值与单次采样最大值):

页面平均广告数量平均广告密度最大单次密度广告流量
WalesOnline首页2.6430%49%3140KB
Mirror文章页1.8826%49%3542KB
Bon Appétit文章页2.0023%60%1821KB
TN(阿根廷)文章页2.0822%32%529KB
Tom's Guide文章页4.1217%25%2043KB
Weather Underground首页4.4415%23%1458KB

广告尺寸方面,出现次数最多的是300×250、970×250、728×90和300×600,与IAB标准尺寸一致。

单次测量的波动范围见下一节末尾。

首页和文章页的广告负载有什么差别?

131个站点同时拿到了首页和文章页的有效数据。文章页的广告密度高于首页的有25个,低于首页的有9个,其余持平。广告流量中位数从首页的493KB上升到文章页的666KB。极端值同样出现在文章页:越南Tuoi Tre的一篇文章,单次访问的广告相关流量达到23801KB。

CrUX同时提供来源级和页面级数据。来源级数据把全站所有页面的访问混在一起,首页的访问量通常只占其中一小部分,所以来源级的广告指标更接近文章页的情况。评估一个站点时,查页面级数据比只看首页更有参考价值。

单次测量的稳定性也需要交代。40个随机抽取的首页在全部测完后重测一次,结果是:是否存在广告框架,40个完全一致;是否出现过可见广告,32个一致;平均广告密度的差值在3个百分点以内的有37个,最大相差7个百分点。波动最大的是广告流量,两次测量的相对差异中位数为17%,只有22个页面的差异在20%以内,9to5Mac从121KB变成1045KB,Nypost从56KB变成568KB。

广告流量取决于每次竞价是否成交、成交后加载的创意有多大,同一个页面连续两次访问可以相差数倍。这也是CrUX只报告大量真实会话p75的原因:单次实验室测量适合判断“有没有”“是哪一类”,不适合给出一个站点的广告负载数值。

出版商和SEO应该怎么用CrUX广告指标?

这组指标目前是实验性的,Chrome明确表示它们不属于Core Web Vitals,也没有设定阈值。谷歌从未公开把CrUX广告数据用于搜索排名,站内Chrome数据与排名因素的辨析对这类说法有过梳理。对依靠广告变现的站点,建议按下面的顺序处理:

  1. 检查ads.txt是否可访问、是否以纯文本返回、是否至少有一行合法记录。发现拼写错误、空账号ID或字段错位,交给广告运营团队修正;使用子域名承载内容的,在子域名下也提供一份文件。
  2. 在DevTools的广告面板里查看本地测量结果,打开“突出显示广告”核对哪些元素被标记。自建投放系统、原生广告和赞助内容,要清楚它们是否会被计入。
  3. 处理没有填充的广告位。空广告位不计入数量和密度,但竞价和脚本产生的流量全部计入广告流量,这部分成本由用户承担。
  4. 控制首屏之外的广告加载时机。按需加载可以降低没有进入视口的广告带来的流量,站内第三方脚本依赖的实测也说明了广告和统计脚本会在HTML之外引入大量额外域名。
  5. 拿到CrUX API密钥后,用experimental_ad_count等4个字段按周监测来源级和重点页面的p75,与广告收入数据对照,而不是只看单次实验室测量。

广告密度高低还会影响页面的布局稳定性和交互响应。广告位没有预留尺寸时,填充瞬间会造成布局偏移,站内CLS累积布局偏移的优化指南对广告位预留有具体做法;页面整体体积方面,可以参考118个首页的网页体积实测

常见问题解答

CrUX广告指标会影响谷歌搜索排名吗?

Chrome的公告说明这4个指标是实验性的,不属于Core Web Vitals,也没有阈值。谷歌没有公开表示在搜索排名中使用它们。目前它们主要面向广告主和广告技术服务商,用来评估广告环境。

为什么我的网站在CrUX里查不到广告指标?

常见原因有三个:ads.txt不存在或没有一条合法的授权卖家记录;站点或页面的访问量没有达到CrUX的收录门槛;Chrome公告提到数据会在发布后一个月内逐步增加。另外,页面上没有被识别为广告的元素时,也不会产生广告数据。

隐藏的广告位会被计算吗?

设置了display:none、没有布局尺寸的广告,不计入广告数量和广告密度,但它加载的脚本、图片等资源的流量和CPU耗时仍然计入广告流量和广告CPU耗时。本次实测中,一半以上有广告流量的首页存在隐藏或零尺寸的广告元素。

自己服务器上投放的广告会被识别吗?

取决于资源地址是否命中Chrome使用的精简版EasyList规则,或者是否由命中规则的脚本创建。本地对照实验中,同一个横幅页面,地址命中规则时被判定为广告,不命中时判定为普通内容。

ads.txt里有几行格式错误,会不会导致不被收录?

Chrome文档只要求至少有一个授权卖家,没有说明解析时对格式错误的处理方式。只要文件里至少有一行符合规范的记录,按规范就满足条件。但如果所有行都有问题,按规范就等于没有授权卖家,本次Tranco样本里有63个站属于这种情况。

怎么查询自己网站的CrUX广告数据?

向CrUX API的queryRecord接口发送POST请求,在metrics里指定experimental_ad_count、experimental_ad_density、experimental_ad_kilobytes和experimental_ad_cpu,按origin或url查询,需要API密钥。历史趋势用queryHistoryRecord接口,也可以在CrUX Vis里查看;本地测量用DevTools的广告面板。

权威参考资料

分享到
标签
版权声明

本文标题:《Chrome CrUX广告指标实测:看不见的广告不算密度,流量照样计入》

本文链接:https://zhangwenbao.com/chrome-crux-ad-metrics-audit.html

版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0

继续阅读
发表评论
分享到微信 或在下方手动填写
支持 Ctrl + Enter 提交