AI 抓取器服务器日志分析:验证 Bot、成本与策略
Technical SEO 发布于 更新于 14 分钟阅读

AI 抓取器服务器日志分析:验证 Bot、成本与策略

如果你想判断 AI crawler 到底值不值得放行,先守住一条底线:相信已验证的日志,不要相信截图、传闻或单纯的 user-agent 文本。

Google 官方文档明确建议用反向 DNS 或 Google 公布的 IP 范围验证 Googlebot。OpenAI 官方文档把搜索、训练和用户触发访问拆成不同 crawler。Cloudflare AI Crawl Control则提供请求量、允许请求量、数据传输、热门路径和状态码分布。把这三层证据放在一起,你才能决定该放行、收窄、限流还是屏蔽。

这篇文章给你一套可执行的日志分析工作流,避免把真实 bot、伪造字符串和用户触发访问混为一谈。

AI 抓取器验证与策略工作流

每类数据源分别能告诉你什么

不要把所有 dashboard 当成一回事。

数据源最适合回答什么它缺什么
原始服务器或 edge 日志谁在什么时间请求了什么 URL、返回了什么状态码、消耗了多少字节需要自己清洗和验证 bot 身份
Cloudflare AI Crawl Control请求量、允许请求量、edgeResponseBytes、状态码分布、热门路径、crawler/operator 过滤、付费版 referrer它是产品分析层,不是原始 origin 日志替代品
Search Console Crawl StatsGoogle 在你站点上的抓取历史,包括请求数、下载大小、响应时间、抓取目的和 Googlebot 类型只看 Google,且只适用于 root-level property, totals 也可能和你自己的日志不同
robots.txt 规则你声明了什么抓取策略规则本身不能证明 crawler 是否遵守,也不能证明流量值不值得服务

两个限制需要先写清楚:

如果你手上只有一个数据源,先用起来;如果你要据此做策略决策,至少要把日志和一个验证层配在一起看。

第 1 步:先拉一段干净的 7 天或 30 天窗口

不要一上来就拉全年的日志。

优先使用这些输入:

第一次分析建议只做这几件事:

  1. 只保留生产环境 host。
  2. 去掉健康检查和内部监控流量。
  3. 把 HTML 页面请求和静态资源分开。
  4. 统一到一个时区。
  5. //zh/ 之类的语言目录拆开看。

这样你才有一段可以周周复盘的窗口。

第 2 步:先验证身份,再相信标签

这是最容易偷懒,也最容易做错策略的一步。

验证 Googlebot

Google 的 crawler 文档明确说,验证 Googlebot 最稳妥的方式是反向 DNS 或与 Google 公布的 IP 范围比对。不要看到日志里的 Googlebot 字符串就直接当真。

可以先从 shell 做最基础的验证:

host 66.249.66.1
dig -x 66.249.66.1 +short

如果反向解析结果落在 googlebot.comgoogle.comgoogleusercontent.com 这类 Google 主机名下,还要再确认这个主机名能正向解析回同一个 IP,才算完成验证。

验证 OpenAI crawlers

OpenAI 的 crawler 文档把不同访问目的拆成不同 user agent:

User agentOpenAI 官方定义日志里为什么要分开看
OAI-SearchBot用于 ChatGPT 搜索结果中的网页发现与展示这才是和 ChatGPT 搜索可见性最直接相关的 crawler
GPTBot抓取可能用于改进生成式基础模型的内容训练用途不要和搜索用途混在一起判断
ChatGPT-User用户在 ChatGPT 或 Custom GPT 中主动触发的抓取这不是自动全网抓取,robots.txt 也未必适用

OpenAI 也在同一页文档中公布了这些 crawler 的 IP ranges。真正做放行或屏蔽决策时,应该同时验证 crawler 角色和来源 IP,而不是只看 user-agent

能用 verified bot 元数据时,就别只靠字符串

如果你的 CDN 或 edge provider 能提供 verified bot 元数据,优先用它。

Cloudflare AI Crawl Control 的 GraphQL 文档明确区分了:

  • userAgent_like:可被伪造
  • botDetectionIds_hasany:Cloudflare 标注为可靠验证

日志分析也应该照这个顺序来:先用已验证 detection,再用原始字符串做兜底。

第 3 步:保留真正支持决策的字段

每条请求建议至少保留这些字段:

字段作用
时间戳识别抓取高峰,并对比策略改动前后
Host区分生产、预发和多语言 host
请求路径判断 crawler 在抓 canonical 页面还是垃圾 URL
Query string发现参数型和 faceted crawl 浪费
User agent给 crawler 初步分组
Verified bot 或 detection ID区分真实身份和伪造字符串
状态码衡量成功率和错误率
返回字节数计算抓取成本
Referrer在有值时识别用户触发访问
Cache 状态或 edge 结果判断 CDN 是否挡住了 origin 压力
IP 地址在没有 verified metadata 时支持 bot 验证

如果你使用 Cloudflare,可以把自己的分析口径对齐到它文档里明确提供的字段和表:

  • Analyze AI traffic里有 total requests、allowed requests、unsuccessful requests、edgeResponseBytes、status-code distribution、top referrers 和 most popular paths。
  • GraphQL API里可按 host、path、状态码范围、user agent、referrer host 和 verified detection IDs 过滤。

Crawler 日志字段面板

第 4 步:先做一张每周都能复用的汇总表

如果你还没有正式报表层,先从一个 7 天窗口开始。

下面这张表是示例视图,不是 Fennec 生产数据

Crawler请求数2xx 比例主要路径模式返回字节建议动作
Googlebot4,82098.7%canonical 文章与文档页1.4 GB放行并监控
OAI-SearchBot64097.8%公开博客与功能页214 MB放行,并复查落地页
GPTBot1,12095.1%博客页加参数 URL690 MB收窄低价值路径
ChatGPT-User74100.0%深链到具体指南页19 MB保持公开页面健康
未知 Googlebot 字符串91082.4%错误页与异常参数混杂508 MB先验证再判断

只要你先把这张表整理出来,团队讨论就会从“要不要喜欢这个 bot”变成“这个已验证 crawler 到底抓了什么、花了多少成本、该不该继续服务它”。

第 5 步:查询时先用已验证流量

如果日志已经进了数仓,优先按已验证标识来查。

对于 Cloudflare 场景,官方 GraphQL 示例给了两种思路:

  1. botDetectionIds_hasany 查可靠验证过的 crawler
  2. 只有拿不到 detection ID 时,才用 userAgent_like

下面这个查询就是按这个思路写的:

{
  viewer {
    zones(filter: { zoneTag: "<ZONE_ID>" }) {
      httpRequestsAdaptiveGroups(
        filter: {
          datetime_geq: "2026-07-19T00:00:00Z"
          datetime_leq: "2026-07-26T00:00:00Z"
          requestSource: "eyeball"
          botDetectionIds_hasany: [123815556, 132995013, 126255384]
        }
        limit: 5000
      ) {
        count
        dimensions {
          datetimeHour
          botDetectionIds
          clientRequestHTTPHost
        }
        sum {
          edgeResponseBytes
        }
      }
    }
  }
}

如果你用的是 BigQuery、ClickHouse、Athena 或其他数仓,可以先从最基础的汇总开始:

SELECT
  verified_bot,
  COUNT(*) AS requests,
  ROUND(100 * AVG(CASE WHEN status BETWEEN 200 AND 299 THEN 1 ELSE 0 END), 1) AS rate_2xx,
  SUM(bytes_sent) AS bytes_served
FROM edge_logs
WHERE ts >= CURRENT_TIMESTAMP - INTERVAL '7 days'
  AND host = 'www.example.com'
GROUP BY verified_bot
ORDER BY bytes_served DESC;

再把真正消耗抓取预算的路径排出来:

SELECT
  verified_bot,
  request_path,
  COUNT(*) AS requests,
  SUM(bytes_sent) AS bytes_served,
  ROUND(100 * AVG(CASE WHEN status BETWEEN 200 AND 299 THEN 1 ELSE 0 END), 1) AS rate_2xx
FROM edge_logs
WHERE ts >= CURRENT_TIMESTAMP - INTERVAL '7 days'
  AND host = 'www.example.com'
GROUP BY verified_bot, request_path
ORDER BY bytes_served DESC
LIMIT 50;

如果你手里没有 verified bot 字段,就用当前最干净的识别层替代,并在汇总里明确写出限制。

第 6 步:重点看四类信号,不只看抓取量

把 crawler 分组清洗好以后,重点评估这四类运行信号:

信号健康模式风险模式
URL 质量canonical 页面、文档、博客、产品页参数页、搜索结果页、后台路径、重复 URL
响应健康度主要是 200 和少量有意义的 301大量 4045xx、重定向循环
成本适中的 HTML 字节消耗大量媒体下载、频繁 cache miss、突发式资源抓取
业务价值命中可索引且有价值的页面预算主要耗在低价值路径上

这样你做的就不是抽象站队,而是运营判断。

第 7 步:把结论落成可执行策略

最后的动作应该比“允许 AI”或“屏蔽 AI”更细。

场景更好的动作
已验证 crawler,URL 健康,成本可控放行并监控
有价值的 crawler,但重复路径很多放行,但缩窄路径规则
用户触发访问主要落在公开重要页面保持开放,并提升页面质量
未验证或明显滥用的流量限流或屏蔽
高成本抓取主要发生在资源或私有路径只限制这些路径,不要误伤整个公开站点

如果你要继续细化训练用途的决策,可以接着看 GPTBot 决策框架。如果要把日志结果和页面控制项对上,再一起检查 Robots.txt CheckerCanonical CheckerSitemap CheckerTechnical SEO Audit

Crawler 分组矩阵

常见误判与失败模式

这几个地方最容易把日志看错:

失败模式常见原因更好的检查方式
“Googlebot” 流量看起来特别大直接相信原始 user-agent 字符串先做反向 DNS 或 Google IP 范围校验
OpenAI 流量看起来很乱OAI-SearchBotGPTBotChatGPT-User 混成一类拆开看搜索、训练和用户触发访问
Cloudflare 在新规则后突然出现大量违规dashboard 用当前规则去比历史请求先核对规则生效日期,再判断是否真的不合规
Search Console 数字和日志对不上Crawl Stats 只看 Google,且本来就可能和服务器日志不同把它当作 Google 上下文,不要当成全站 crawler 总账
字节成本看起来过高把静态资源或 cache miss 路径一起算进来了分开看 HTML、媒体、参数页和语言目录

Crawler 动作评分卡

每周复查清单

这套清单适合做成固定巡检:

  1. 导出最近 7 天的 crawler 流量。
  2. 分开 verified bots 和未验证 user agents。
  3. 把搜索、训练和用户触发访问拆开。
  4. 按请求量和字节数排序热门路径。
  5. 统计每类 crawler 的 2xx3xx4xx5xx 比例。
  6. 对照 canonical 与 sitemap 覆盖。
  7. 规则改动后一周,用同样窗口复跑一次。

这通常足以抓住最贵的错误:假 bot 流量、重复 URL 浪费、多语言路径异常,以及错误地屏蔽了该放行的内容。

用 Fennec 落地的下一步

如果你想快速从日志发现走到执行动作,建议按这个顺序做:

  1. 先用 Bot Simulator 复测日志里请求量最高的 5 个 HTML URL。
  2. Robots.txt Checker 核对抓取规则。
  3. Canonical Checker 检查重复路径控制。
  4. Sitemap Checker 检查 sitemap 覆盖。
  5. 再用 AuditGSC Management 把 crawler 行为和整体索引问题连起来看。

Privacy & Cookies

We use cookies to enhance your experience. By continuing to visit this site you agree to our use of cookies.