AI爬虫抓取与引荐比实测:同一个指标传出七个数字
本文目录
- 七个数字指向同一家,为什么谁都没说错?
- 这个比值到底在量什么?
- 换一个统计窗口,数字就换一个量级?
- 你数的到底是哪一个爬虫?
- 样本落在谁的站上,答案会差多少?
- 只有报了名的那部分引荐,才会被算进分母
- 拿自己站上十五天的日志,把这个公式跑一遍
- 同一个公式,换个七天窗口能挪多少?
- 分母里九成是同一个垃圾站
- 那些自称Claude和Perplexity的请求,真的是它们吗?
- 三成的抓取根本没拿到页面,该不该算进分子?
- 自己算这个比值,要先把哪几件事定死?
- 算出来之后,这个数能支撑哪些决定?
- 常见问题解答
- 抓取引荐比到底怎么算,一句话说得清吗?
- 为什么我的站算出来分母是0,是不是统计错了?
- 看到70900比1这类数字,该怎么用?
- 日志里出现Claude和Perplexity的名字,说明它们在抓我吗?
- 要不要为了算这个指标去改nginx日志格式?
- 比值很高的爬虫,是不是直接拦掉就行?
- 这个比值多久算一次比较合适?
- 权威参考资料
摘要:同一个指标、同一家发布方、同一份公开方法,13个月里流传出7个数字,最大和最小差了30倍。把它拆开会发现,里面有6处必须由你自己拍板的选择:统计窗口取几天、把哪些爬虫算成同一家、样本落在谁的站上、以及最要命的一条——只有在请求里自报了来路的访问才会被计进去。我用本站15天、258560行访问日志把这个公式原样跑了一遍,AI那一栏的分母是0,百度那一栏是1.1比1。
去年夏天开始,一个叫抓取引荐比的数字在同行群里传得很凶。意思不难懂:某个AI平台从你站上抓走多少个页面,才往回送来一个真人。有人说是7万比1,有人说是2000比1,两个数字都标着同一个出处。前几天有人把这件事系统地捋了一遍,翻出7个版本,而且全都能追到同一家公司的公开数据。没有一个是编的。
这件事真正值得停下来看的地方不在于谁抄错了,而在于:一个把计算方法完整公开、连自己的局限都写进发布公告的指标,照样能在13个月里散成7个数。传播过程中丢掉的不是数字本身,是数字旁边那一栏——什么才算数。
七个数字指向同一家,为什么谁都没说错?
先把这七个数摆出来。同一家AI公司的抓取引荐比,被引用过的版本包括70900比1、38000比1、23951比1、11122比1、10300比1、4580比1、2237比1。最高和最低之间差了约30倍。其中有两个版本声称测的是同一个月,彼此差了大约17倍。
这些数字都能追到Cloudflare。它在2025年7月1日的一篇技术博客里第一次公开这个指标,同时把算法写得明明白白:拿某个平台相关的爬虫标识发来的、响应类型是text/html的请求总数,除以Referer请求头里含有该平台主机名的HTML请求总数,再归一化成“一次引荐”。整个公式一句话说完,任何手上有服务器日志的人都能复算。
更难得的是,它在同一篇文章里把能拆自己台的部分也写了出来。这在厂商发布指标这件事上不常见。问题出在后面——那些自我披露的边界条件,在数字往下游传的第一站就被剥掉了。等它出现在某份季度汇报的幻灯片上时,只剩一个孤零零的比值。
这个比值到底在量什么?
它量的是一笔交换还在不在。传统搜索爬虫抓你的页面,是为了把你放进结果页;用户要读全文就得点进来。抓取换流量,这条隐含契约撑起了开放网页20多年的商业模式。
AI系统换了个交付方式:读完之后直接在自己的界面里把答案说完,用户不必再来。这件事的另一面是免费引用的窗口正在关上。抓取照旧,甚至更频繁,送回来的人却少了。抓取引荐比就是把这个不对等压成一个数——抓5个页面送回1个人,就是5比1;抓7万个页面送回1个人,就是7万比1。
它之所以传得快,是因为它替很多人回答了一个憋了很久的问题:我到底该不该让这些爬虫进门。本站去年量过AI爬虫的抓取量已经超过Googlebot几倍,那是抓取这一侧的账;这个比值是把抓取和回流放在同一个算式里。这不是一个学术指标,它直接被拿去做拦与不拦的决定。正因为这样,它被引错的代价比一般的行业数字高得多。站内之前那篇拦AI爬虫的三层选型框架讲的是怎么拦,本篇要补的是拦之前那个判断依据本身靠不靠得住。
换一个统计窗口,数字就换一个量级?
分母的第一个变量是时间窗口。Cloudflare那篇发布文用的样本区间是2025年6月19日到26日,整整一周,结果是那家AI公司70900比1,而Mistral是0.1比1——它送回来的引荐反而是抓取请求的10倍。
同一个月,同一家公司另一篇关于内容使用控制的公告里,这个数字变成了73000比1,同时给出OpenAI是1700比1、Google大约每14次抓取换1次引荐。两篇都没错,取的窗口不一样而已。
窗口的影响有多大?Cloudflare自己在那篇文章里报过一个例子:Google的比值一周之内环比变了19.4%,原因是GoogleBot的抓取量从6月24日起掉了下来。同期Yandex涨了超过6%,因为YandexBot从6月21日起抓得更勤了。一次爬虫调度上的改动,就能让这个公开指标在七天里挪动五分之一。
到了下游,季度值、月度值、滚动28天值、单周值被并排放在同一张表上,像是同一种测量。两个分析师各自选一个窗口,都出于善意,结论会不一样,而且两个人都没错。
你数的到底是哪一个爬虫?
第二个变量是把哪些爬虫算成同一家。Cloudflare在方法说明里讲得很清楚:一个平台的训练爬虫和它的用户请求爬虫用的是不同标识,但在这份分析里,两者的流量被归并到同一个平台名下。
这两种行为几乎没有共同点。Google自己也把用户触发那一类单独拎出来过,本站拆过它为什么不看robots.txt。训练爬虫按设计就不会送人回来,它的工作是把内容搬进模型;用户请求爬虫是有人正在问问题时才去取一页,它是有可能产出一条引用的。合在一起算出来的那个数,哪一种都描述不了。
这件事还让最常见的那种对比——拿AI平台去比Google——从结构上就不成立。有的厂商把爬虫拆成职责分明的几支,有的厂商就一支通吃。合并之后,等号两边量的根本不是同一类东西。
OpenAI对这三个标识的官方说明写得很清楚,职责各不相同。我在本站日志里把这一层拆开看了。OpenAI名下的三个标识,十五天里一共来了646次:OAI-SearchBot 310次、ChatGPT-User 193次、GPTBot 143次。被讨论得最多的训练爬虫,在这三个里反而是来得最少的那个。Anthropic那边是ClaudeBot 935次,占了绝对大头。如果只报一个合并后的平台数字,这层结构就全没了。
样本落在谁的站上,答案会差多少?
第三个变量是样本。Cloudflare看到的是穿过Cloudflare的流量,这个量非常大,但它仍然是一份样本,而且明显偏向那些愿意把站放在它后面的属性。
有分析师做过一次对照:同一个指标、同一个时间段,一边算Cloudflare全网,一边算自己那份规模小得多的商业面板,某个平台的比值差了大约一倍。光是换一份样本,数字就翻了个跟头。
这一条对做中文站的人尤其要紧。全球样本里占大头的是英文内容、英文用户、英文AI产品。你的站要是主要服务中文读者,样本结构和它完全不是一回事,直接套用那个行业数字,等于拿别人的体温计量自己的病。这和三家外链工具的数字互相对不上是同一种毛病:样本不同,结论就不同。
只有报了名的那部分引荐,才会被算进分母
第四个变量最要命,因为它不是一个可以调的参数,而是一整块系统性缺失。
分母不是“有多少人从这个平台来到了你的站”,而是“有多少次访问在请求里自报了来路”。一次访问要进分母,它的Referer请求头里必须写着那个平台的主机名。这个请求头的规范从来没有强制任何客户端必须发送它。
Cloudflare把这件事直接写进了发布公告:Claude原生应用带来的引荐流量不包含这个请求头,它认为其他厂商的原生应用大概率也一样;因为引荐计数只覆盖到网页版工具,这些比值可能被高估了。原话是“不清楚高估了多少”。
这句话的分量要慢慢读。发布这个指标的公司,在宣布它的那篇文章里说:分母漏掉了一部分它本该数到的东西,漏了多少没人知道,而漏掉的那部分恰恰发生在使用量增长最快的地方——原生应用里。这不是脚注,这是一条由唯一有资格知情的一方亲口说出的、谁也画不出来的误差棒。
还有第五个判断,能看出一个简单公式里塞了多少人为决定。Cloudflare把来自Google自有网络的引荐流量排除在外,理由是投机规则驱动的预取不代表一个真人在消费内容。这个决定站得住。但它也是一个决定,换个分析师换种做法,Google那一栏的数字就不一样,而两边都不算错。
拿自己站上十五天的日志,把这个公式跑一遍
光拆方法论容易变成纸上谈兵。我把本站保留的全部nginx访问日志下载下来,按Cloudflare那个公式原样算了一遍,样本区间是2026年8月29日到9月12日,15个日志文件、258560行。
第一个坑在开工前十分钟就撞上了:公式要求按响应的Content-Type是否为text/html来筛,而nginx的combined日志格式根本不记录这个字段。出厂的那一行日志里有状态码、有字节数、有来路、有客户端标识,就是没有响应类型。想按原公式复算,要么提前改log_format加上$sent_http_content_type,要么退而求其次用路径近似。我选了后者,判据是:路径以.html结尾,或落在栏目、标签、归档、工具这几个目录下,同时排除掉带静态资源扩展名的请求。这条口径必须写在结论旁边,否则我这个数就成了第八个没人能复现的版本。想从零搭一套能查的日志,可以先看日志分析一步步挖爬虫真相和日志分析工具怎么读抓取预算。
按这个口径,258560行里有47715次HTML请求,占18.45%。空来路请求218901次,占84.66%——这个比例和本站之前那篇拆来源字段的实测对得上,那篇讲的是来路缺失怎么让AI流量被漏数,本篇接着往前一步:来路缺失同时也在改写抓取引荐比这个指标的分母。
剩下带外部来路的HTML请求7407次,分布在48个主机名上。算出来的结果是这样:
| 平台 | HTML抓取 | HTML引荐 | 比值 |
|---|---|---|---|
| 百度 | 459 | 415 | 1.1比1 |
| 62 | 23 | 2.7比1 | |
| 必应 | 817 | 67 | 12.2比1 |
| 神马 | 2817 | 82 | 34.4比1 |
| 搜狗 | 318 | 3 | 106.0比1 |
| 华为PetalBot | 2100 | 0 | 除不了 |
| Meta | 1279 | 0 | 除不了 |
| Apple | 467 | 0 | 除不了 |
| Anthropic | 247 | 0 | 除不了 |
| OpenAI | 196 | 0 | 除不了 |
| 字节 | 20 | 0 | 除不了 |
| 亚马逊 | 12 | 0 | 除不了 |
AI那一栏合计抓走1754次HTML,送回来0次。不是七万比一,是分母为零,这个比值在本站根本除不出来。而老搜索那笔交换还实打实地在:百度抓459次送回415个人,1.1比1,几乎是一比一。那份旧契约在中文搜索这一侧仍然成立,在AI这一侧连一次都没兑现过。这里要补一句:没有引荐不等于没有被引用,被引源榜单那一亿条数据量的是另一件事。
同一个公式,换个七天窗口能挪多少?
我把十五天切成相邻的两个窗口,8月30日到9月5日、9月6日到9月11日,同一个公式各跑一遍:
| 平台 | 前一窗口 抓取/引荐 | 后一窗口 抓取/引荐 | 比值变化 |
|---|---|---|---|
| 17 / 19 | 31 / 4 | 0.9 → 7.8,涨766% | |
| 搜狗 | 162 / 2 | 133 / 1 | 81.0 → 133.0,涨64% |
| 神马 | 1223 / 37 | 1466 / 37 | 33.1 → 39.6,涨20% |
| 百度 | 260 / 222 | 182 / 178 | 1.2 → 1.0,跌13% |
| 必应 | 426 / 27 | 332 / 36 | 15.8 → 9.2,跌42% |
Cloudflare那边一周挪19.4%已经值得写进正文了。换到一个日均2万行日志的小站上,Google这一栏两个相邻窗口之间挪了7.7倍。分母越小,窗口这根杠杆越长。小站算这个指标,第一件事不是算它,是先确认分母够不够大到值得算。
分母里九成是同一个垃圾站
7407次带外部来路的HTML请求,看上去是个可用的分母。拆开就不是了。
来路排第一的主机名www.eachan.cn出现5487次,加上不带www的同域名1246次,这一家占了6733次,占全部外部引荐HTML请求的90.9%。这类来路和真实用户无关,是引荐垃圾的老手法——伪造来路字段,指望站长在统计后台看见这个域名后回访过去。
真正来自搜索引擎的只有590次,占8.0%。也就是说,如果不先把垃圾来路清掉,任何以“外部引荐”为分母的指标,都会被一个跟你毫无关系的站牵着走。这一步在归因这条线上也是必修课,本站拆过引荐、增量、影响这三层各自能回答什么。这是第六个必须自己拍板的选择,而Cloudflare的公式里没有这一条,因为在它那个量级的样本里,单个垃圾来路稀释得看不见。你的站上稀释不掉。
那些自称Claude和Perplexity的请求,真的是它们吗?
分母的问题讲完了,分子也有。按客户端标识字符串去认一个爬虫,等于相信对方填的自我介绍。我在本站日志里把这份自我介绍逐条对了一遍IP,结果很难看。
Claude-User来了144次,只用了2个IP。Claude-SearchBot 54次,也是2个IP。PerplexityBot 48次、Perplexity-User 78次、Google-Extended 43次,全都是2个IP。更要命的是,这五个名字用的是同样的那两个地址。
一台机器,轮着挂五家公司的招牌。它们要的东西也不装了:/.env、/id_rsa、/serviceAccountKey.json、/admin/.env、/__/firebase/init.json,还有一条写着/@fs/home/ubuntu/.aws/credentials。这是在翻凭据文件,不是在读文章。
真爬虫长什么样,对照着看一眼就清楚了。
| 客户端标识 | 请求数 | 用到的IP数 | 判断 |
|---|---|---|---|
Applebot | 587 | 467 | 真 |
meta-externalagent | 1402 | 194 | 真 |
ChatGPT-User | 193 | 95 | 真为主 |
ClaudeBot | 935 | 94 | 真为主 |
OAI-SearchBot | 310 | 70 | 真为主 |
Claude-User | 144 | 2 | 冒名 |
Perplexity-User | 78 | 2 | 冒名 |
Claude-SearchBot | 54 | 2 | 冒名 |
PerplexityBot | 48 | 2 | 冒名 |
Google-Extended | 43 | 2 | 冒名 |
判据不复杂:正经的分布式爬虫来自一大片地址,冒名者手里只有一两台机器。再加上请求路径和状态码这两条旁证——冒名那五个标识的请求里,五成到七成落在凭据类路径上,四分之三返回404。这套判法和本站讲爬虫名单里有多少名字真来过那篇里的思路是一脉相承的,只是这次冒的不是20年前的退役采集器,是当红的AI产品名。想把这件事做扎实,还可以配合反查客户端标识与真假验证那套流程,把IP反解也带上。
这里有一个我必须如实说出来的地方,否则这一节就成了危言耸听。那367次冒名请求,一次都没有进到分子里去。原因是它们全在扒非网页路径,而Cloudflare的公式只算HTML响应,恰好把它们筛掉了。挡住它们的不是任何反冒名设计,是一条为别的目的设下的规则。扫描器哪天改成扫.html结尾的地址,分子当场就被污染,而公式里没有任何一处会察觉。
顺带说一句被忽略最久的那个标识:Googlebot在本站来了510次,只用了48个IP,其中一半的请求落在/App.php加畸形参数这类注入探测路径上。本站之前量过每五次Googlebot抓取就有一次IP不属于谷歌,这次的比例更难看。
三成的抓取根本没拿到页面,该不该算进分子?
还有一条谁都没提的口径。我按状态码把爬虫的HTML请求拆开,发现相当一部分请求拿到的是一条跳转,不是一个页面。
必应的HTML请求里46.4%返回301,华为PetalBot是40.4%,搜狗32.1%,OpenAI那三个标识合起来31.1%,Google 29.0%,Anthropic 24.7%。而Meta只有0.7%,Apple 2.6%——这两家显然是拿着正确的最终地址来的。
跳转响应的内容类型通常也是text/html。按原公式,它会被算进分子。可一次301里没有任何正文,谈不上“取走了你的内容”。是不是该只算返回200的那部分?这是个合理的选择,也是个会改变结论的选择:本站AI那一栏从1754次降到1594次,必应那一栏直接腰斩。
再往外一层还有一个口径:公式只算HTML,那非HTML的抓取就当没发生过。ClaudeBot在本站的935次请求里,只有26.4%是网页,其余大头是XML和纯文本;PetalBot的19517次请求里网页只占10.8%;字节的爬虫更极端,只有4.8%。反过来meta-externalagent是91.2%,Apple是79.6%。同一个“只算HTML”的规则,对不同爬虫砍掉的比例从8.8%到95.2%不等。
自己算这个比值,要先把哪几件事定死?
把上面这些串起来,就是一份可以照着做的口径清单。顺序不能颠倒,因为每一步都会改变后面那一步的输入。
第一步,先改日志格式再算,别用路径猜。按nginx日志模块文档的写法,在log_format里加一个$sent_http_content_type,从加上那天起你的日志才真正支持这个公式。我这次是补算历史,只能拿路径近似,所以结论旁边必须挂着口径说明。这件事和访问日志字段该怎么配才查得清问题是同一个道理:字段没记,事后再聪明也补不回来。
第二步,先清垃圾来路再看分母。把出现频次异常集中、落地页高度分散、且没有任何转化痕迹的来路域名单独列出来,确认后从分母里剔掉。本站是一个域名吃掉九成,你的站未必,但这一步不做,后面全白算。
第三步,按标识分开算,别合并。训练、搜索索引、用户触发,这三类分开报三个数,比合成一个数有用得多。真正和你生意相关的是用户触发那一类——那是有人正在问问题。
第四步,先验真假再计数。凡是某个标识只来自一两个IP、且请求集中在凭据或后台路径上的,整批剔除再说。反过来也有真爬虫被挡在门外的情况,本站量过robots.txt写着允许但GPTBot仍然进不去。
第五步,窗口至少取四周,并且把同一个窗口长度固定下来。分母小的时候,七天窗口的噪声能把结论整个翻过去——本站Google那一栏两个相邻周之间差了7.7倍,就是这么来的。
第六步,也是最容易被跳过的一步:把算出来的数字和它的六条口径写在一起归档。窗口、标识范围、样本、来路清洗规则、状态码取舍、HTML判定方式。少写一条,三个月后你自己都复现不出来,这个数就变成了第八个版本。
算出来之后,这个数能支撑哪些决定?
它能支撑的决定比大多数人以为的少,但那几个都很实在。
第一,它是拦与不拦的输入之一,不是结论。比值高只说明这家现在没给你送人,不说明它以后不会。做决定还要看这家平台在你目标客群里的渗透率,以及你的内容被它引用之后会不会带来非点击的收益。本站讲过要不要向AI爬虫收费,那篇里的权衡框架和这个数字是配套用的。
第二,它能识别出“抓得凶但一次都没送回来”的那一类,帮你把带宽和抓取预算的账算清楚。本站华为PetalBot十五天抓了19517次请求,网页部分2100次,引荐0次——这个量级值得单独设一条限速规则,做法可以参考防火墙拦爬虫的误伤排查,别把真搜索引擎一起关在门外。
第三,它能给你一条趋势线,而且能和Cloudflare Radar持续更新的那份公开数据对着看趋势方向。绝对值和别人的不可比,但你自己的站跟自己比是可比的,前提是六条口径一个字都不改。同样的道理在AI可见度名次的噪声实测里也成立。
它不能支撑的是:拿去和任何一份公开数字做横向对比,或者当成“AI抢走了多少流量”的证据。后面这件事本站单独拆过一篇行业数字为什么落不到你自己站上,结论是没有任何一个公开数字能替你回答这个问题;本篇补的是另一半——就算你自己动手算,也得先把六个口径拍死,否则算出来的还是一个不可比的数。
保哥手上有个做工业紧固件的外贸站,去年秋天开始每月给欧洲客户出一份AI可见度汇报,里面有一栏就是抓取引荐比,数字直接抄的公开研究。今年3月对方采购问了一句“这个数是从我们站上算的吗”,才发现从来没算过。补算之后是0分母——三个AI爬虫抓了两个多月,一次引荐都没有。真正有用的反倒是顺手查出来的另一件事:他们的产品详情页对爬虫返回的是一条跳转,三成的抓取根本没拿到正文,改完地址结构之后返回200的抓取占比从61%升到94%。这类问题还有个更隐蔽的版本:爬虫拿到了页面却读不到正文。依据是改前改后各四周的服务器日志按状态码分组对比。
常见问题解答
抓取引荐比到底怎么算,一句话说得清吗?
某个平台的爬虫向你站请求网页的次数,除以来路标明该平台的网页请求次数,再归一化成一次引荐。难点不在算,在于这个公式里有六处需要你自己拍板:统计窗口多长、把哪些爬虫算成同一家、只算返回200还是含跳转、只算网页还是含其他资源、垃圾来路清不清、以及怎么判定一个响应是不是网页。
为什么我的站算出来分母是0,是不是统计错了?
大概率没错。AI助手带来的访问有相当一部分不发送来路请求头,原生应用尤其如此,发布这个指标的公司自己就是这么说的。加上中文站的读者更可能从国内的AI产品进来,而国内产品的来路域名不在任何一份英文清单里,本站讲AI流量落地页承接那篇里提过这批人的行为特征。分母是0更可能意味着“这个方法在你的站上量不到”,不是“一个人都没来”。
看到70900比1这类数字,该怎么用?
当成一个方向性信号,不要当成基准线。它来自一份全球样本、一个特定周、一种把训练爬虫和用户爬虫合并的算法。你要拿它和自己站上的数比,先确认两边的六条口径是不是一致,通常不是。
日志里出现Claude和Perplexity的名字,说明它们在抓我吗?
不一定。本站实测发现,带这几个名字的请求里有一批只来自两个IP,且专门翻.env这类凭据文件,是冒名的扫描器。判据是看这个标识用了多少个IP:真爬虫来自成百上千个地址,冒名的通常只有一两台机器。
要不要为了算这个指标去改nginx日志格式?
要。在log_format里加$sent_http_content_type成本极低,而不加的话你永远只能用路径近似,且没法区分同一个地址返回网页还是返回接口数据。这个字段的价值不止于这一个指标。
比值很高的爬虫,是不是直接拦掉就行?
别急。先分清它是训练爬虫、搜索索引爬虫还是用户触发爬虫。拦掉用户触发那一类,等于把正在问问题的人挡在门外;拦训练爬虫的代价则完全不同,而且光靠robots.txt挡不住训练。还有一种最冤的情况:主机商替你悄悄拦掉了AI爬虫而监控毫无反应。这三类用的是不同标识,规则要分开写。
这个比值多久算一次比较合适?
按月,窗口固定四周。周度数据在中小站上噪声太大,本站两个相邻周之间某个平台的比值差了7.7倍,那不是趋势,是分母只有个位数造成的抖动。抓取侧的异常同样要用长窗口看,本站记过抓取速率被调低那几天日志里一条错误都没有。
权威参考资料
本文标题:《AI爬虫抓取与引荐比实测:同一个指标传出七个数字》
本文链接:https://zhangwenbao.com/ai-crawler-crawl-to-refer-ratio-audit.html
版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0