AI爬虫日志分析指南:验证 User-Agent、IP 与伪装流量

AI爬虫日志分析仪表板示意:已验证、仅 User-Agent 命中和伪装流量的趋势对比

作者:MaxAEO

AI爬虫日志分析不能从搜索 GPTBotClaudeBot 开始,也不能以 User-Agent 命中量结束。任何客户端都能改写请求头;如果没有先还原真实客户端 IP,再核对官方网段、DNS 和请求行为,报表很可能把普通采集器、漏洞扫描器甚至伪造流量算成 AI 抓取。

一套可复算的分析流程应完成七件事:

  1. 从 CDN、WAF 和源站收集请求日志。
  2. 按 User-Agent 发现候选请求,但不立即确认身份。
  3. 从可信代理链还原客户端 IP。
  4. 按厂商支持的方式验证 IP 归属。
  5. 将请求划分为已验证、待复核、仅声明或身份矛盾。
  6. 计算抓取成功率、重要页面覆盖率、错误率和更新时效。
  7. 将抓取数据与 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 ClaudeBotClaude-SearchBotClaude-User 自动抓取、搜索或用户触发访问 按具体标识拆分,验证能力不足时保留为未验证
Perplexity PerplexityBotPerplexity-User 搜索索引或用户触发访问 两类请求分开统计
字节跳动 Bytespider 字节系产品相关抓取 不凭 User-Agent 推断内容已进入某个具体产品
Google Googlebot Google 搜索抓取 属于搜索基础设施,不应简单计入“AI 专用爬虫”
Google 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;其他来源的同名转发头必须忽略。

处理顺序如下:

  1. 保存实际与源站建立 TCP 连接的对端 IP。
  2. 判断该 IP 是否位于当前可信代理的官方回源网段。
  3. 只有对端可信时,才读取对应的客户端 IP 头。
  4. 对多层 X-Forwarded-For,从最靠近源站的一端向外剥离可信代理。
  5. 将遇到的第一个非可信地址作为候选客户端 IP。
  6. 同时保存原始代理链、还原结果和所用代理规则版本。

不同 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.20198.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 永久写死在代码中。

同步任务至少需要:

  1. 通过 HTTPS 获取官方清单。
  2. 校验响应状态、JSON 结构和 CIDR 格式。
  3. 同时支持 IPv4 与 IPv6。
  4. 保存获取时间、内容哈希和来源 URL。
  5. 获取失败时保留上一份可用版本并发出告警。
  6. 使用 IP 地址库执行 CIDR 包含判断,禁止用字符串前缀匹配。
  7. 保存每条请求匹配到的网段和清单版本。

以 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

验证时应同时满足:

  1. PTR 查询返回完整主机名。
  2. 主机名严格落在厂商公布的域名后缀下。
  3. 对主机名执行 A 与 AAAA 查询。
  4. 正向解析结果包含最初的客户端 IP。
  5. 若厂商还公布了网段,IP 同时位于有效网段内。
  6. 结果按 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爬虫日志分析仪表板示意:已验证、仅 User-Agent 命中和伪装流量的趋势对比

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 提及和引用数据联合分析。