Chrome CrUX广告指标实测:看不见的广告不算密度,流量照样计入
本文目录
- Chrome CrUX新增的4个广告指标分别怎么计算?
- 哪些网站会被收录进CrUX广告数据?ads.txt门槛怎么判断?
- Tranco前一万个域名里有多少站满足ads.txt门槛?
- 有广告位却没有ads.txt的站点会怎样?
- Chrome怎么判断一个元素是不是广告?
- 本地对照实验:自家投放的广告位会被计入吗?
- 实验室里怎么按Chrome口径复现广告数量与广告密度?
- 300个页面实测:广告流量和可见广告差多少?
- 首页和文章页的广告负载有什么差别?
- 出版商和SEO应该怎么用CrUX广告指标?
- 常见问题解答
- CrUX广告指标会影响谷歌搜索排名吗?
- 为什么我的网站在CrUX里查不到广告指标?
- 隐藏的广告位会被计算吗?
- 自己服务器上投放的广告会被识别吗?
- ads.txt里有几行格式错误,会不会导致不被收录?
- 怎么查询自己网站的CrUX广告数据?
- 权威参考资料
摘要: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、关系类型(DIRECT或RESELLER),第四列是可选的认证机构ID。规范还定义了一条占位记录placeholder.example.com, placeholder, DIRECT, placeholder,供不卖广告的站点声明“没有授权卖家”。
“至少一个授权卖家”在技术上可以落到一个可检查的条件:文件以纯文本返回,并且至少有一行能被解析成合法的卖家记录。本文按这个条件做分档。
Tranco前一万个域名里有多少站满足ads.txt门槛?
2026年9月17日,对Tranco排行前10000个域名请求/ads.txt(根域名失败时再试www子域名),同时请求robots.txt,用两者至少有一个返回HTTP响应来判定“网站可访问”。结果如下:
| ads.txt状态 | 站点数 | 占可访问站点 |
|---|---|---|
| 有至少一条合法卖家记录 | 1820 | 26.0% |
| 返回404,没有文件 | 2867 | 40.9% |
| 返回403等拦截状态 | 1002 | 14.3% |
| 状态码200但返回的是HTML页面 | 677 | 9.7% |
| ads.txt请求无法连接 | 320 | 4.6% |
| 其他状态码 | 198 | 2.8% |
| 是纯文本,但没有一条合法卖家记录 | 117 | 1.7% |
| 只有IAB占位记录 | 8 | 0.1% |
| 合计 | 7009 | 100% |
去掉被拦截、无法连接和其他状态码这几类无法判断的站点,剩下的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 | 关系类型错位到第二列 |
| 关系类型拼错 | RESLLER、RESSELER、RESELLE | 只接受DIRECT或RESELLER |
| 广告系统不是域名 | pubmatic,163963,RESELLER、pub-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个文章页。
每个页面的测量流程如下:
- 用本机安装的Chrome(带广告过滤规则集)以1366×900的视口打开页面,等待6秒。
- 每秒采样一次,共25次:前5次停在页面顶部,之后每秒向下滚动半个视口。
- 每次采样前通过开发者协议读取框架树,把广告根框架对应的iframe元素打上标记;主文档里由广告请求加载的图片也打上标记。
- 采样时计算每个广告元素在视口内的可见矩形:宽或高为0、
display:none的计为“隐藏广告”,至少1个像素在视口内的计入数量;面积按6像素网格求并集后除以视口面积。 - 广告流量取两部分请求的压缩后字节之和:请求本身带广告标记的,以及发生在广告框架里的。
这个复现有几处与真实CrUX数据的差异,需要说清楚:
- 测量出口在新加坡,使用无头模式,没有登录和同意弹窗交互,广告竞价的填充率明显低于真实用户访问。
- 每个页面只测一次、约30秒,CrUX是大量真实会话的p75。
- 没有测量广告CPU耗时。
- 256个首页里有59个返回403,另有28个出现验证页、加载失败或其他状态码;140个文章页里有9个无效。这些页面不计入结果,最终有效的是169个首页和131个文章页。
因此下面的数字适合用来观察各指标之间的关系,不适合当作某个站点的广告负载评分。
300个页面实测:广告流量和可见广告差多少?
| 指标 | 首页(169个) | 文章页(131个) |
|---|---|---|
| 产生广告相关流量的页面 | 149 | 121 |
| 30秒内出现过可见广告的页面 | 48 | 43 |
| 有广告流量、但从未出现可见广告的页面 | 101 | 78 |
| 存在隐藏或零尺寸广告元素的页面 | 95 | 75 |
| 广告流量中位数 | 499KB | 733KB |
| 广告流量第90百分位 | 2139KB | 3542KB |
| 广告字节占整页字节中位数 | 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.64 | 30% | 49% | 3140KB |
| Mirror文章页 | 1.88 | 26% | 49% | 3542KB |
| Bon Appétit文章页 | 2.00 | 23% | 60% | 1821KB |
| TN(阿根廷)文章页 | 2.08 | 22% | 32% | 529KB |
| Tom's Guide文章页 | 4.12 | 17% | 25% | 2043KB |
| Weather Underground首页 | 4.44 | 15% | 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数据与排名因素的辨析对这类说法有过梳理。对依靠广告变现的站点,建议按下面的顺序处理:
- 检查ads.txt是否可访问、是否以纯文本返回、是否至少有一行合法记录。发现拼写错误、空账号ID或字段错位,交给广告运营团队修正;使用子域名承载内容的,在子域名下也提供一份文件。
- 在DevTools的广告面板里查看本地测量结果,打开“突出显示广告”核对哪些元素被标记。自建投放系统、原生广告和赞助内容,要清楚它们是否会被计入。
- 处理没有填充的广告位。空广告位不计入数量和密度,但竞价和脚本产生的流量全部计入广告流量,这部分成本由用户承担。
- 控制首屏之外的广告加载时机。按需加载可以降低没有进入视口的广告带来的流量,站内第三方脚本依赖的实测也说明了广告和统计脚本会在HTML之外引入大量额外域名。
- 拿到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