「AI 爬虫的抓取量已经超过传统搜索引擎」是当前常见判断,但日志中的 User-Agent 只是客户端自报字符串。若没有官方 IP 段或反向 DNS 校验,服务器日志最多支持 UA 与路径层面的分类,不能确认请求方真实身份。
本文公开一份自有服务器日志的分类方法与结果:比较携带不同 UA 的请求,并观察它们命中的路径。文中所有“AI 爬虫”均指“携带相应 AI 爬虫 UA 的请求”,不等同于已核验的官方爬虫。
一、方法与口径
1.1 数据来源
数据来自一台阿里云服务器上的 nginx 原始访问日志,统计窗口为 2026 年 7 月 21 日至 8 月 4 日共 15 天,日志约 15.7 万行。该机器上同时运行十余个站点,本文考察的官网是其中之一。
1.2 多站共用日志的归属:白名单法
nginx 默认的 combined 日志格式不含 Host 字段,日志只记录被请求的路径,不记录请求的是哪个域名。十余个站点的流量混在同一文件中,无法按域名切分。
为避免改动生产环境配置(需要 reload,同机尚有其它业务在运行),本文改用路径白名单归属:官网是纯静态站点,其构建产物目录中的每一个文件即该站全部可被访问的 URL,共 314 条路径。命中该清单的请求计入官网,其余一律不计。
该方法同时存在漏计和误计:根路径 14,009 次因无法归属被整体剔除;若其它站点也有同名路径,则命中清单的请求仍可能被误归到官网。因此本文数字是路径归属估算,误差方向未知。
1.3 User-Agent 与路径筛选
User-Agent 可由客户端任意填写。本文没有完成官方 IP 段或反向 DNS 校验,因此不把 UA 当作身份凭证。
路径清单只用于缩小站点归属范围:命中清单的请求进入后续统计,未命中的请求单列。这个判据不能证明 UA 真实,也不能证明命中清单的请求一定属于官网。
二、抓取总量与构成
命中官网路径的请求按 User-Agent 分类后,15 天的统计结果如下:
| 来访者 | 抓取次数 | 占比 |
|---|---|---|
| 普通浏览器等 UA(身份未核验) | 6,034 | 81.4% |
| AI 爬虫 UA 且命中路径清单 | 871 | 11.7% |
| 搜索引擎与 SEO 工具 UA 且命中路径清单 | 500 | 6.7% |
| 身份不明的脚本(python-requests 等) | 10 | 0.1% |
AI 爬虫 UA 且命中清单的请求为 871 次,搜索引擎与 SEO 工具 UA 组为 500 次,比值为 1.74。若按 UA 名称从后一栏中移除四个 SEO 分析工具,余下搜索引擎 UA 组为 415 次,比值为 2.10;身份均未核验。
在这一分类口径下,AI 爬虫 UA 组约为搜索引擎 UA 组的两倍。由于 UA 未核验、Host 缺失且共享路径可能误归,这只是本样本的分类结果,不能外推为真实爬虫身份或行业趋势。
三、非目标路径请求对 UA 分类的影响
本次统计的第一版把 2,473 次请求归入 AI 爬虫 UA 组。若不继续检查路径归属,这个数字很容易被误写成真实爬虫抓取量。
对这些请求的目标路径做频次排序后,排名前列的路径如下:
| 被请求的路径 | 自称的身份 | 次数 |
|---|---|---|
| /.git/config | 多个 AI 爬虫 UA | 33 |
| /.env | 多个 AI 爬虫 UA | 25 |
| /secrets.json | 多个 AI 爬虫 UA | 25 |
| /.env.local | 多个 AI 爬虫 UA | 23 |
| /backend/.env | 多个 AI 爬虫 UA | 22 |
| /api/.env | 多个 AI 爬虫 UA | 21 |
| /.env.production | 多个 AI 爬虫 UA | 21 |
| /actuator/env | 多个 AI 爬虫 UA | 20 |
| /settings.json | 多个 AI 爬虫 UA | 20 |
| /service-account.json | 多个 AI 爬虫 UA | 20 |
这些路径在本站均不存在并返回 404,行为上更接近通用扫描,但仅凭路径和 UA 仍不能确认请求方身份或动机。
按路径清单拆分后,携带 AI 爬虫 UA 且目标不在清单内的请求为 2,922 次,命中清单的为 871 次。若把两者都计入,UA 组总数为 3,793 次,比命中清单的数量高 335%;这反映分类口径差异,不代表已识别出 2,922 次“伪造”。
搜索引擎 UA 组同样存在 881 次未命中清单的请求和 500 次命中清单的请求。本文未做 DNS 或官方 IP 段核验,因此不比较两组身份真实性。
同一份日志只因是否纳入非清单路径,AI 爬虫 UA 组的数量就相差 3.35 倍。因此抓取量对路径归属和身份核验口径高度敏感,未声明口径的数字不宜横向比较。
四、命中清单请求的构成:62% 未触及正文
871 次携带 AI 爬虫 UA 且命中路径清单的请求中,543 次(62.3%)仅指向 /robots.txt 与 /sitemap.xml。
| 抓取对象 | 次数 | 占比 |
|---|---|---|
| /robots.txt(爬虫规则声明) | 354 | 40.6% |
| /sitemap.xml(页面清单) | 189 | 21.7% |
| 页面正文与静态资源 | 328 | 37.7% |
两个文件的体量:robots.txt 为 93 字节的纯文本,声明路径抓取规则;sitemap.xml 为 3,088 字节的页面清单。合计 3.1KB,不含任何业务内容。它们被请求 543 次,而全站 18 个对外页面的正文加全部静态资源合计被请求 328 次。
即:这一 UA/path 分类样本中,规则文件与页面清单的请求数超过页面正文和静态资源请求数。
这提示站点运营者把 robots.txt 与 sitemap.xml 纳入检查清单。但日志分布不能证明它们是内容可见性的首要瓶颈,也不能仅凭请求次数确定投入优先级。
五、各 UA 组的请求分布差异
不同 AI 爬虫 UA 组在同一份日志中的路径分布并不相同:
| 爬虫 | 总次数 | 读门牌 | 读内容 | 活跃天数 | 首次 → 末次 |
|---|---|---|---|---|---|
| ClaudeBot | 419 | 378 | 41 | 15 | 07-21 → 08-04 |
| GPTBot | 261 | 1 | 260 | 6 | 07-21 → 08-02 |
| OAI-SearchBot | 155 | 153 | 2 | 15 | 07-21 → 08-04 |
| DeepSeekBot | 10 | 3 | 7 | 6 | 07-21 → 08-03 |
| ChatGPT-User | 7 | 1 | 6 | 3 | 07-21 → 08-02 |
| CCBot | 7 | 2 | 5 | 4 | 07-21 → 08-02 |
| PerplexityBot | 6 | 1 | 5 | 3 | 07-21 → 08-04 |
| Amazonbot | 2 | 2 | 0 | 2 | 08-01 → 08-04 |
| Bytespider | 2 | 2 | 0 | 1 | 07-25 |
| meta-externalagent | 2 | 0 | 2 | 1 | 07-24 |
5.1 三种请求分布
表中十个 UA 组可按「读规则」与「读内容」的比例描述为三种分布;这不是对请求方真实策略的确认。
规则文件占比较高的 UA 组,以 ClaudeBot 为例:419 次请求覆盖全部 15 天,其中 378 次指向 robots.txt 与 sitemap.xml,41 次指向内容。日志只能描述这一分布,不能确认背后的调度策略。
批量取料型,以 GPTBot 为代表:261 次抓取中 260 次取内容,仅 1 次读 robots.txt,且活跃期集中在窗口前段的 6 天,8 月 2 日之后未再出现。停止的原因无法从日志侧判定——服务器日志只能观测到访问的中止,观测不到中止的原因。可能的解释包括单轮抓取完成、调度周期,或与同期站点结构变更相关,本文不做归因。
OAI-SearchBot UA 组的分布与 GPTBot UA 组相反:155 次中 153 次指向规则与清单,仅 2 次指向内容。名称与官方说明可用于提出用途假设,但本地日志本身不能证明请求由谁发起或最终用于什么。
robots.txt 可按不同 UA 分别配置。是否放行应结合各服务的官方文档、内容授权策略和现场验证决定,不能只根据本样本的 UA 名称下结论。
OAI-SearchBot 的这 153 次规则请求中有 87 次返回 404,第六节单独分析这一现象。
5.2 长尾部分
DeepSeek 10 次、ChatGPT-User 7 次、Common Crawl 7 次、Perplexity 6 次、Amazon 2 次、字节 2 次、Meta 2 次,合计 36 次,占 AI 抓取总量的 4%。
ChatGPT-User UA 组只有 7 次请求。仅凭 UA 无法确认它们是否由真实用户触发,也无法据此比较商业价值。
六、一次配置缺失的可观测性分析
统计过程中出现一处异常:白名单内路径的请求中有 98 次返回 404。白名单由当前构建产物生成,对应页面均存在,正常情况下不应出现该状态码。
拆分后,其中 97 次的目标为同一个文件:/robots.txt。
| 爬虫 | 白名单内路径返回 404 的次数 |
|---|---|
| OAI-SearchBot | 87 |
| ClaudeBot | 7 |
| Amazonbot | 2 |
| Bytespider | 2 |
原因是该站在 8 月 1 日之前不存在 robots.txt 文件。站点由 Next.js 静态导出,早期版本未配置 robots 与 sitemap 的生成。
这一缺失具备一个值得单独讨论的性质:它在人可观测的所有维度上都不可见。浏览器渲染页面不请求这两个文件,因此前端无异常;站点可用性监控的指标是首页状态码、证书有效期与响应时间,这些指标全部正常;只有爬虫会请求它,而爬虫收到 404 后的行为不会反映在任何前端指标上。从 7 月 21 日至 7 月 31 日的 11 天里,OAI-SearchBot 累计发出 87 次请求,全部返回 404。
关于实际损失,需要区分协议层与行为层。协议层面,robots.txt 返回 404 应被爬虫理解为「无限制,允许全部抓取」,因此不构成显式拦截。但行为数据显示,OAI-SearchBot 在这 11 天内仅取过 2 次内容,其余请求全部消耗在反复索要一个不存在的文件上。本文无法从日志侧证明二者的因果关系——观测到的只是相关性。
补齐配置后,8 月 1 日起 /robots.txt 恢复正常返回,该路径的 404 由每日十余次降至零星(8 月 1 日之后仍有 8 次,尚未确定属于部署替换的间隙还是爬虫侧缓存)。同期 ClaudeBot 对 sitemap.xml 的抓取频次上升,但该窗口内存在其它同期改动,本文不将其作为因果证据。
这一案例说明 robots.txt、sitemap 与状态码值得作为独立检查项;它不能证明这些配置是可见性的第一道关卡。除原始日志外,专门探测这些路径也能发现此类失效。
七、内容侧的抓取分布
将抓取按具体页面拆分,可以看到内容被读取的实际分布:
| 文章 | 被 AI 抓取次数 | 抓取方 |
|---|---|---|
| 从 Demo 到生产:AI 应用真正难在哪 | 10 | ClaudeBot 5、GPTBot 2、CCBot 2、Meta 1 |
| 为什么多数企业,仍未真正用上 AI | 9 | ClaudeBot 6、GPTBot 3 |
| 别为了用 AI 而用 AI | 6 | GPTBot 3、Perplexity 2、ClaudeBot 1 |
| 把 AI 变成生产力:鹊牛的落地方法论 | 5 | GPTBot 3、ClaudeBot 2 |
| 当客户不再打开搜索框(本文的上一版) | 1 | ClaudeBot 1 |
| 产能不再是瓶颈之后 | 1 | ClaudeBot 1 |
| 客户到底在谁手里 | 1 | ClaudeBot 1 |
七篇文章在 15 天内合计命中 33 次相关 UA 请求,平均每篇每天 0.3 次。其中主题为「AI 搜索时代的可见性」的那一篇,窗口内命中 1 次。
这只能说明本窗口内各路径的请求分布不同。日志无法解释调度原因,也不能从这些数字反推出爬虫预算、站点权重或 sitemap 排序的影响。
该前提对一个常见困惑有直接解释力:持续产出内容却未在 AI 回答中被提及,其原因可能位于抓取环节而非内容质量环节。二者是可分离的问题,需要分别诊断。
八、可推出的判断
判断一:配置项应与内容一起检查
本样本中 62% 的相关 UA 请求指向 robots.txt 与 sitemap.xml。可检查项包括:robots.txt 是否误拦目标 UA,sitemap.xml 是否收录全部页面、lastmod 是否随更新变化,以及新页面进入 sitemap 的时延。该比例本身不能证明配置项优先级高于内容。
判断二:抓取量是过程指标,不是结果指标
服务器收到一次页面请求,只能证明该请求到达服务器;它不证明内容被保存、进入索引或训练库,更不证明会在回答中被引用。
将抓取量直接换算为「AI 曝光」的做法跳过了中间环节。引用的验证只能通过另一条路径:以目标用户的真实提问向各家 AI 提问并记录回答。该指标无法从服务器日志侧获得。
判断三:按爬虫类型分别决策,而非统一放行或统一屏蔽
不同 UA 可在 robots.txt 中分别配置,但日志不能证明请求身份、用途或是否由用户触发。决策前应核对各服务官方说明、内容授权边界,并用官方 IP 段或反向 DNS 等方法验证可验证的爬虫。
判断四:未声明口径的抓取量数字不具备可比性
本文第一版 UA 组总数相对“命中路径清单”的结果高出 335%,差异来自是否纳入非清单路径请求,而不是已经完成了 UA 真伪鉴定。
因此,评估「AI 爬虫抓取量增长 X 倍」时,应至少询问:日志能否按 Host 归属、UA 身份是否核验、如何处理非目标路径,以及 robots.txt 一类非内容请求是否计入。口径不同,数字不宜直接比较。
九、局限
本文统计存在以下已知短板,列出以限定结论的适用范围:
- 样本为单站点、15 天。新建站点与有多年积累的站点,爬虫行为不具可比性。本文描述的是一个新站在当前时点的起点状态,不构成行业普遍规律。
- 多站共用日志不含 Host,路径清单可能漏掉根路径,也可能误计其它站点的同名路径,因此误差方向未知。
- 本文没有完成 UA 身份验证。更严谨的做法是按各家官方方法核对 IP 段或反向 DNS;不能把路径命中当作身份认证。
- 服务器请求不等于保存、索引或引用。本文只能观察请求,后续环节需要各自独立验证。
第四条是本文与实际目标之间最大的一段距离。抓取量是过程指标,结果指标是「目标用户以自己的措辞提问时,AI 是否提及」。二者之间的转化率目前没有公开的可信数据。
十、结论
按本文的 UA 与路径分类口径,AI 爬虫 UA 组为搜索引擎 UA 组的 1.7 至 2.1 倍;这不等同于已核验官方爬虫的真实抓取量。是否纳入非清单路径会让 UA 组数字相差 3.35 倍,说明同类比较必须先对齐 Host、路径和身份核验口径。
在 871 次命中清单的相关 UA 请求中,62% 指向规则文件与页面清单。它提示工程配置值得单独监测,但不能据此认定配置是可见性的第一约束或内容产量不是约束。
本文数据的代表性有限:单台多站服务器、15 天、871 次命中路径清单的相关 UA 请求。其价值是公开分类方法和局限,而不是确认请求方身份或给出行业结论。
附:复现步骤
该统计不依赖任何商业工具,前提条件是服务器保留了访问日志。步骤如下:
- 确认日志留存。nginx 默认路径为 /var/log/nginx/access.log,通常保留 14 天,压缩归档在同目录。日志一经轮转删除不可恢复,需先确认保留策略。
- 生成站点合法路径清单。静态站直接取构建产物目录;动态站从路由表导出。该清单是后续全部判断的基准。
- 解析日志,按 User-Agent 将请求分为 AI 爬虫、搜索引擎、其他三类。各家 AI 爬虫的 UA 标识在其官方文档中公开,主流十余个可覆盖九成以上。
- 将目标路径不在清单内的请求单列,不论其 UA 声称身份。两组差异是路径分类结果,不是 UA 真伪结论。
- 将 robots.txt 与 sitemap.xml 单独拆出。剩余部分是命中页面正文或静态资源路径的请求,身份仍未核验。
- 按爬虫分组统计抓取节奏、活跃天数与目标页面。行为差异比总量更具信息量。