作者:MaxAEO
AI爬虫日志分析不能从搜索 GPTBot、ClaudeBot 开始,也不能以 User-Agent 命中量结束。任何客户端都能改写请求头;如果没有先还原真实客户端 IP,再核对官方网段、DNS 和请求行为,报表很可能把普通采集器、漏洞扫描器甚至伪造流量算成 AI 抓取。
一套可复算的分析流程应完成七件事:
- 从 CDN、WAF 和源站收集请求日志。
- 按 User-Agent 发现候选请求,但不立即确认身份。
- 从可信代理链还原客户端 IP。
- 按厂商支持的方式验证 IP 归属。
- 将请求划分为已验证、待复核、仅声明或身份矛盾。
- 计算抓取成功率、重要页面覆盖率、错误率和更新时效。
- 将抓取数据与 AI 提及、引用来源和品牌可见度分开分析。
如果当前问题是“为什么 AI 爬虫没有访问网站”,可先按AI 爬虫抓取诊断指南检查 robots.txt、CDN、WAF、源站和渲染链路。
什么是 AI 爬虫日志分析?
AI爬虫日志分析,是从 CDN、WAF 与源站请求记录中识别 AI 服务访问,并验证身份、抓取结果、页面覆盖和异常行为的过程。
它需要回答五个具体问题:
- 哪些请求声称来自 AI 爬虫?
- 请求是否确实来自对应厂商控制或公布的网络?
- 哪些规范 URL 被成功抓取,哪些重要页面从未被访问?
- 失败发生在代理、WAF、应用、限速还是页面发现环节?
- 抓取变化是正常波动、配置回归,还是伪装流量造成的假趋势?
日志只能证明服务器收到过请求。它不能单独证明页面已被模型采用、在 AI 答案中获得引用,或提升了品牌推荐率。
先区分爬虫名称与访问用途
同一厂商可能使用多个 User-Agent,分别服务于搜索索引、模型训练和用户触发访问。混合统计会让抓取趋势失去解释力。
| 厂商或系统 | 常见标识 | 典型用途 | 分析时如何处理 |
|---|---|---|---|
| OpenAI | OAI-SearchBot |
支持搜索产品发现网页 | 单独统计搜索抓取 |
| OpenAI | GPTBot |
模型相关网页抓取 | 不与搜索抓取合并 |
| OpenAI | ChatGPT-User |
用户请求触发的页面访问 | 视为用户触发访问,不用于计算自动抓取频率 |
| Anthropic | ClaudeBot、Claude-SearchBot、Claude-User |
自动抓取、搜索或用户触发访问 | 按具体标识拆分,验证能力不足时保留为未验证 |
| Perplexity | PerplexityBot、Perplexity-User |
搜索索引或用户触发访问 | 两类请求分开统计 |
| 字节跳动 | Bytespider |
字节系产品相关抓取 | 不凭 User-Agent 推断内容已进入某个具体产品 |
Googlebot |
Google 搜索抓取 | 属于搜索基础设施,不应简单计入“AI 专用爬虫” | |
Google-Extended |
robots.txt 产品控制标记 | 它不是独立 User-Agent,日志中不应按爬虫名称查找 |
具体标识和用途可能调整,应定期核对OpenAI 官方爬虫说明和Perplexity 官方机器人文档。如果厂商没有提供可验证的 IP 范围或 DNS 规则,只能确认“有人使用了该名称”,不能确认请求来自厂商。
关于不同爬虫的业务价值,可进一步参考GPTBot、ClaudeBot 与 PerplexityBot 的用途对比。
为什么 User-Agent 只能发现候选请求?
User-Agent 是客户端自行填写的文本,不具备身份认证能力。它可以用于低成本筛选,却不能作为真实 AI 爬虫的唯一证据。
以下三条日志都可能包含相同的 GPTBot 字符串:
- OpenAI 爬虫发出的真实请求;
- 普通采集器为绕过限制而伪造的请求;
- 安全扫描器用于测试放行规则的请求。
因此,正确的数据模型不应只有 is_ai_bot=true,而应至少保存:
declared_crawler:请求声明的爬虫名称;verification_tier:身份验证等级;verification_method:官方网段、双向 DNS 或仅行为证据;reason_codes:通过、失败或暂无法确认的原因;rule_version:当时使用的验证规则和网段版本。
这样才能在厂商更新 IP 范围后重新计算历史数据,而不是永久保留旧分类。
日志必须记录哪些字段?
可信分析至少需要时间、代理前后 IP、请求路径、User-Agent、状态码、安全动作和请求关联 ID。缺少原始对端 IP,就无法判断转发头是否可信。
| 字段 | 诊断用途 |
|---|---|
| UTC 时间、请求 ID | 串联 CDN、WAF、负载均衡器和源站事件 |
| TCP 对端 IP | 判断请求是否确实来自受信任代理 |
| 还原后的客户端 IP | 执行官方网段或 DNS 验证 |
| 原始转发头 | 识别伪造代理链和配置错误 |
| User-Agent | 发现厂商与用途候选 |
| HTTP 方法、主机名、规范化路径 | 区分内容抓取、接口访问和扫描行为 |
| 状态码、响应字节数 | 判断是否返回了有效内容 |
| 响应时间、缓存状态 | 发现超时、缓存绕过和源站压力 |
| WAF 动作、规则编号 | 定位安全层拦截原因 |
| robots 策略快照版本 | 对照访问规则与实际请求 |
| 验证等级、方法、时间、原因码 | 支持审计和历史重算 |
使用 Nginx 时,可输出 JSON Lines:
log_format ai_audit escape=json
'{"ts":"$time_iso8601","request_id":"$request_id",'
'"peer_ip":"$realip_remote_addr","client_ip":"$remote_addr",'
'"xff":"$http_x_forwarded_for","method":"$request_method",'
'"host":"$host","uri":"$uri","status":$status,'
'"bytes":$body_bytes_sent,"request_time":$request_time,'
'"ua":"$http_user_agent"}';
access_log /var/log/nginx/ai-audit.jsonl ai_audit;
这里的 $realip_remote_addr 与 $remote_addr 只有在正确配置 Nginx Real IP 模块后才具有上述含义。应根据Nginx 官方 Real IP 模块文档设置可信代理网段,且不能把 0.0.0.0/0 当作可信来源。
日志中优先保存 $uri,避免默认记录完整查询字符串。搜索词、邮箱、访问令牌、Cookie、Authorization 和请求正文不应进入普通抓取分析库。
如何从 CDN 代理链还原真实客户端 IP?
只有 TCP 对端属于已配置的 CDN、WAF 或负载均衡器网段时,才能采用它提交的客户端 IP;其他来源的同名转发头必须忽略。
处理顺序如下:
- 保存实际与源站建立 TCP 连接的对端 IP。
- 判断该 IP 是否位于当前可信代理的官方回源网段。
- 只有对端可信时,才读取对应的客户端 IP 头。
- 对多层
X-Forwarded-For,从最靠近源站的一端向外剥离可信代理。 - 将遇到的第一个非可信地址作为候选客户端 IP。
- 同时保存原始代理链、还原结果和所用代理规则版本。
不同 CDN 使用的头可能不同,不能在迁移 CDN 后继续沿用旧配置。源站还应尽量通过防火墙或安全组限制为仅允许 CDN 回源;否则攻击者可以绕过 CDN,直接访问源站并伪造 X-Forwarded-For。
代理链示例
假设源站记录:
TCP 对端:198.51.100.20
X-Forwarded-For:203.0.113.8, 198.51.100.10
如果 198.51.100.20 和 198.51.100.10 都属于已配置的可信代理,而 203.0.113.8 不属于,则候选客户端 IP 是 203.0.113.8。
如果 TCP 对端本身不在可信代理网段,则整个 X-Forwarded-For 都不能用于身份验证。
如何验证 AI 爬虫的 IP?
优先使用厂商明确公布的 IP 网段;只有厂商公开了可验证的 PTR 域名规则时,才使用反向 DNS 与正向 DNS 闭环。ASN 和行为特征只能提供辅助证据。
方法一:核对厂商官方网段
如果厂商发布 JSON 或 CIDR 清单,应按计划同步,而不是把当前 IP 永久写死在代码中。
同步任务至少需要:
- 通过 HTTPS 获取官方清单。
- 校验响应状态、JSON 结构和 CIDR 格式。
- 同时支持 IPv4 与 IPv6。
- 保存获取时间、内容哈希和来源 URL。
- 获取失败时保留上一份可用版本并发出告警。
- 使用 IP 地址库执行 CIDR 包含判断,禁止用字符串前缀匹配。
- 保存每条请求匹配到的网段和清单版本。
以 OpenAI 搜索爬虫清单为例,可将官方 JSON 转换为 CIDR:
curl -fsS https://openai.com/searchbot.json \
| jq -r '.prefixes[] | .ipv4Prefix // .ipv6Prefix // empty'
不要在每个请求到达时在线下载清单。更稳妥的方式是定时更新、验证后发布到本地规则库,再异步处理日志。
方法二:执行正向确认的反向 DNS
双向 DNS 验证是“IP 查 PTR,再将 PTR 主机名解析回原 IP”。只做第一步,域名所有者仍可能通过自行设置 PTR 制造误导。
Google Search Central 的 Googlebot 验证方法展示了这一流程。但该方法不能自动证明某个 AI 厂商的身份:只有对应厂商明确公布了合法域名后缀时,才能套用。
ip="<client_ip>"
dig -x "$ip" +short
dig A "<ptr_hostname>" +short
dig AAAA "<ptr_hostname>" +short
验证时应同时满足:
- PTR 查询返回完整主机名。
- 主机名严格落在厂商公布的域名后缀下。
- 对主机名执行 A 与 AAAA 查询。
- 正向解析结果包含最初的客户端 IP。
- 若厂商还公布了网段,IP 同时位于有效网段内。
- 结果按 DNS TTL 缓存,并记录验证时间。
后缀比较必须按域名边界执行。例如,验证 example.com 时可以接受 bot.example.com,但不能接受 example.com.attacker.test。
PTR 超时、SERVFAIL 或暂时没有记录,只能标记为“待复核”。只有正向不闭环、后缀明确不符或代理头被伪造时,才存在较强的身份矛盾。
为什么 ASN 不能单独确认身份?
同一家云服务商的 ASN 可能同时承载厂商服务、企业客户和普通云主机。请求来自某个大型云平台,只能说明网络托管关系,不能证明请求由 OpenAI、Anthropic 或 Perplexity 控制。
MaxAEO 的“三账四级”证据框架
可靠的 AI 爬虫日志分析应分离原始请求、身份验证和 URL 资产三本账,再按证据强度划分四个等级。行为正常不能把未验证请求升级为真实爬虫。
三本账分别记录什么?
| 数据账 | 核心内容 | 解决的问题 |
|---|---|---|
| 原始请求账 | 对端 IP、转发头、路径、状态码、User-Agent、WAF 动作 | 服务器实际收到什么 |
| 身份证据账 | 厂商、验证方法、规则版本、官方网段、DNS 结果、原因码 | 为什么相信或不相信该身份 |
| URL 资产账 | 规范 URL、页面类型、业务优先级、更新时间、可索引状态 | 抓取是否覆盖真正重要的内容 |
三本账通过请求 ID、客户端 IP、规范 URL 和时间关联。这样可以避免两个常见错误:
- 请求量上涨,但实际增加的都是重复参数 URL;
- 已验证抓取正常,但产品页、文档页等重要资产从未被访问。
四级身份分类
| 等级 | 判定条件 | 报表用途 |
|---|---|---|
| A:已验证 | User-Agent 命中,且官方网段或厂商支持的 DNS 验证成立 | 计算可信抓取基线 |
| B:待复核 | 理应可以验证,但因 DNS 超时、规则过期或清单同步失败暂时没有结论 | 进入重试队列,不并入 A |
| C:仅声明 | 只有 User-Agent,厂商未提供充分网络验证方式或当前无证据 | 单独观察未验证流量 |
| D:身份矛盾 | 代理头伪造、DNS 不闭环,或在规则新鲜且官方清单明确完整时网段冲突 | 从抓取基线排除并触发安全复核 |
行为特征只能帮助发现异常,不能把 B、C 级请求提升为 A 级。 网络身份成立后,行为分析仍可判断账号误用、漏洞扫描或异常抓取。
如何用行为信号识别伪装流量?
伪装请求常在代理来源、网络归属、HTTP 方法、路径分布和请求节奏上出现矛盾。行为信号适合降级和告警,不适合替代厂商验证。
| 异常信号 | 可能原因 | 建议处理 |
|---|---|---|
| 官方 User-Agent 命中,但没有网络证据 | 伪装或厂商未公开验证方式 | 归入 B/C,不计入已验证量 |
| PTR 存在,但正向解析不包含原 IP | PTR 误导或配置异常 | 归入 D |
| 非可信 TCP 对端提交客户端 IP 头 | 代理头伪造 | 忽略转发头并记录 D |
| 同一 IP 频繁轮换多个厂商标识 | 扫描器或绕过规则 | 关联 WAF、路径和速率检查 |
| 集中访问登录页、后台、随机路径或漏洞特征 URL | 安全扫描 | 与内容抓取分离,考虑限速或阻断 |
| 大量使用 POST、PUT、PATCH、DELETE | API 调用或攻击行为 | 单独审计,不计入页面抓取 |
| 404、401、403、429 突然上升 | URL 失效、权限、WAF 或限速问题 | 按状态码和规则编号定位 |
| 请求间隔高度固定且长期高并发 | 自动化采集 | 与历史分布比较后告警 |
不要照搬“每分钟多少次”或“错误率超过多少”之类的统一封禁阈值。文档站、新闻站和电商站的页面数量、更新频率与缓存策略不同。应先保留至少四周基线,再按爬虫、页面类型和星期维度设置阈值。
如何解释状态码与抓取结果?
状态码说明服务器如何响应请求,但不能单独说明页面是否被采用。分析时应结合最终 URL、响应字节、WAF 动作和缓存状态。
| 状态码 | 日志含义 | 优先检查 |
|---|---|---|
| 200 | 返回内容 | 响应是否为目标正文,而非软 404 或验证页 |
| 204 | 没有响应正文 | 页面路由或接口是否配置错误 |
| 301/302/307/308 | 发生跳转 | 最终地址、跳转链长度和循环 |
| 304 | 缓存副本仍有效 | 可计入成功访问,但需确认已有历史抓取 |
| 401 | 需要认证 | 重要内容是否误设权限 |
| 403 | 请求被拒绝 | WAF、应用权限、IP 规则;不能直接归因于 robots.txt |
| 404/410 | URL 不存在或已移除 | 旧内链、站点地图和重定向策略 |
| 429 | 触发限速 | WAF/CDN 阈值、重试头和抓取并发 |
| 5xx | 服务器或上游失败 | 源站稳定性、超时、部署和容量 |
robots.txt 表达抓取意愿,不负责主动触发访问,也不会自动解释所有 403。需要把 robots 策略、WAF 规则和实际日志放在一起分析。放行策略可参考GPTBot、ClaudeBot 与 Bytespider 的 robots.txt 取舍方法。
如何计算可信的 AI 抓取基线?
可信基线只使用 A 级请求,同时公开候选总量、待复核量和身份矛盾量。只展示 User-Agent 命中总数,会隐藏伪装流量与验证故障。
可按日聚合请求:
SELECT
DATE(ts) AS day,
declared_crawler,
verification_tier,
COUNT(*) AS requests,
COUNT(DISTINCT client_ip) AS observed_ips,
AVG(
CASE
WHEN status BETWEEN 200 AND 299 OR status = 304 THEN 1.0
ELSE 0.0
END
) AS fetch_success_rate,
AVG(
CASE
WHEN status BETWEEN 400 AND 499 THEN 1.0
ELSE 0.0
END
) AS four_xx_rate,
AVG(
CASE
WHEN status BETWEEN 500 AND 599 THEN 1.0
ELSE 0.0
END
) AS five_xx_rate
FROM ai_crawler_events
WHERE is_candidate = TRUE
GROUP BY DATE(ts), declared_crawler, verification_tier;
应长期跟踪的指标
- 身份验证率:A 级请求数 ÷ User-Agent 候选请求总数。
- 待复核率:B 级请求数 ÷ 候选请求总数。
- 身份矛盾率:D 级请求数 ÷ 候选请求总数。
- 成功抓取率:A 级中 2xx 与 304 请求数 ÷ A 级请求总数。
- 重要页面覆盖率:被 A 级请求成功抓取的规范 URL 数 ÷ 重要 URL 总数。
- 更新抓取时延:页面更新时间到首次 A 级成功抓取之间的时长。
- 错误率:A 级请求中 4xx、429 与 5xx 的各自占比。
- 性能分位数:A 级请求响应时间的中位数和第 95 百分位数。
分母必须固定。例如,身份验证率的分母是所有候选请求,而成功抓取率的分母只能是 A 级请求。把不同分母混在同一趋势图中,会产生“抓取成功率提高但可信请求实际下降”的错觉。
如何设置异常告警?
有至少四周数据时,可按爬虫和星期建立滚动中位数基线。相比平均值,中位数不容易被某一天的批量抓取拉高。
可优先告警以下变化:
- A 级请求持续下降,而 C/D 级请求上升;
- 重要页面覆盖率下降,但总抓取量不变;
- 403 或 429 在一次 WAF 发布后集中出现;
- 页面更新后长期没有首次成功抓取;
- CDN 日志有请求,而源站和缓存日志完全没有对应记录;
- 同一时间点多个爬虫同时出现 5xx,提示源站问题而非单一厂商异常。
阈值应根据站点自身基线制定,并要求异常连续出现多个采样周期,避免为单日波动制造告警噪声。
如何测试分类规则没有把伪装流量算成真实爬虫?
在上线报表前,应使用可控的合成日志测试每条硬规则。测试目标不是模拟互联网流量,而是证明伪造样本无法进入 A 级。
MaxAEO 建议准备以下最小回放集:
| 测试组 | 样本数 | 构造条件 | 预期等级 |
|---|---|---|---|
| 官方网络证据成立 | 10 | User-Agent 命中,IP 位于测试网段,验证闭环 | A |
| 只有 User-Agent | 10 | 名称正确,但无任何网络证据 | C |
| 伪造转发头 | 10 | 非可信对端提交看似合法的客户端 IP | D |
| DNS 不闭环 | 10 | PTR 主机名存在,但 A/AAAA 不包含原 IP | D |
预期结果是 A 级 10 条、C 级 10 条、D 级 20 条,并满足:
伪造样本进入 A 级的数量 = 0
这 40 条是规则测试集,不代表真实网站的流量比例。每次修改代理链、官方网段解析或 DNS 规则后,都应重新回放。

AI 抓取量与 AI 可见度有什么区别?
AI 抓取量说明机器人能否访问内容;AI 可见度说明品牌是否在答案中被提及、正确描述和引用。两者有关联,但不存在一一对应关系。
| 日志现象 | AI 搜索表现 | 优先诊断方向 |
|---|---|---|
| 已验证抓取少,AI 提及也少 | 多个平台很少出现品牌 | 页面发现、robots、WAF、内链与渲染 |
| 已验证抓取正常,提及率低 | 竞品更常被推荐 | 搜索意图、内容证据、实体一致性与权威来源 |
| 抓取和提及正常,但描述错误 | 品牌事实被误解 | 实体主页、事实陈述和第三方来源一致性 |
| 官网被抓取,答案却引用第三方 | 官网不是首选证据源 | 补充一手数据、清晰结论和可引用段落 |
| 某厂商抓取下降,其他厂商正常 | 单一渠道异常 | 该厂商规则、官方网段、WAF 和采样波动 |
| 所有厂商同时下降 | 站点级问题概率较高 | CDN、源站、部署、DNS 和全局安全策略 |
日志分析属于“可访问性证据”,不能代替 AI 答案监测。品牌仍需用固定问题集、地区、语言、重复次数和时间窗口跟踪提及率、引用来源与答案准确性。
AI 爬虫日志分析的上线检查清单
上线前应确保身份验证可复算、代理链可信、指标分母一致,并让 SEO、安全和工程团队采用相同定义。
- 同时记录 TCP 对端 IP 和还原后的客户端 IP。
- 只信任来自官方 CDN、WAF 或负载均衡器网段的转发头。
- 尽可能限制源站只能接受可信代理回源。
- IPv4、IPv6 和 IPv4 映射 IPv6 地址采用一致的规范化逻辑。
- User-Agent 候选量与 A/B/C/D 四级流量分开展示。
- 厂商有官方网段时优先执行 CIDR 验证。
- 仅在厂商公布合法域名规则时使用双向 DNS 验证。
- PTR 查询后执行 A/AAAA 正向复核。
- DNS 超时和清单同步失败标记为待复核,不直接判定为伪装。
- 官方清单保存来源、获取时间、内容哈希和规则版本。
- WAF 动作、状态码与源站响应可通过请求 ID 串联。
- 重要 URL 按规范地址归并,排除参数和跳转造成的重复。
- 报表区分自动抓取与用户触发访问。
- 不采集 Cookie、认证头、请求正文和不必要的个人信息。
- 告警阈值根据站点历史分布设定,不照搬固定数字。
- 抓取指标与 AI 提及率、引用来源和答案准确性分别报告。
- 每次修改代理、WAF 或身份规则后重新运行合成日志测试。
常见问题
只用 User-Agent 能识别 GPTBot 或 ClaudeBot 吗?
不能。User-Agent 只能发现候选请求,任何客户端都可以修改该字段。需要先还原可信客户端 IP,再按厂商支持的官方网段或 DNS 方法验证身份;没有网络证据时应标记为未验证。
ChatGPT-User 应与 GPTBot 合并统计吗?
不应合并。ChatGPT-User 通常表示用户操作触发的页面访问,GPTBot 属于自动化网页抓取。两者的触发机制、访问频率和业务含义不同,合并后无法判断自动抓取趋势。
厂商没有公开 IP 网段怎么办?
将请求归为 C 级“仅声明”,不要强行计入已验证流量。可以保留 ASN、路径分布、访问节奏和历史连续性作为辅助信息,但这些信号不能把请求升级为 A 级。
反向 DNS 查询失败是否说明请求是假的?
不一定。失败可能来自 DNS 超时、临时故障、IPv6 配置或厂商没有设置 PTR。此时应标记为待复核;只有正向不闭环、域名后缀不符或代理头伪造等明确矛盾,才适合判为 D 级。
CDN 日志和源站日志应该以哪个为准?
两者用途不同。CDN 日志更接近公网请求和边缘拦截结果,源站日志能确认请求是否到达应用并获得响应。应通过请求 ID 或时间、路径、客户端 IP 组合关联,而不是只保留其中一份。
robots.txt 已放行,为什么日志里仍没有抓取?
放行只表示允许访问,不会主动触发抓取。还需检查页面是否能被内链或站点地图发现、WAF 是否拦截、服务器是否稳定、页面是否返回有效正文,以及内容是否与目标问题相关。
日志出现 403 是否代表 robots.txt 阻止了爬虫?
不一定。403 通常由 CDN、WAF、应用权限或 IP 规则返回。robots.txt 多数情况下是爬虫读取并自行遵守的策略文件。应结合 WAF 规则编号、响应来源和 robots 快照判断。
AI 爬虫访问量上涨是否意味着品牌推荐增加?
不意味着。抓取是访问层信号,品牌推荐还受内容相关性、证据质量、实体一致性、权威来源和用户问题匹配度影响。应将已验证抓取基线与多平台 AI 提及和引用数据联合分析。