AI 爬虫来访日志实测分析 GPTBot 与各引擎抓取规律 — 答流 AIGeoFlow · GEO 实战指南

判断 AI 爬虫是否来访,唯一可靠的依据是服务器原始访问日志,而不是基于 JavaScript 的统计工具。本站实测:GPTBot 在新站上线第 4 天完成全站 24 页抓取,此后每日 17:20–17:40 巡检 sitemap;Meta-ExternalAgent 可在文章发布当天到达;而 Cloudflare 默认的 Block AI bots 会在边缘直接拒绝多个主流 AI 爬虫,且与 robots.txt 无关。本文给出 UA 识别、反向 DNS 验证、robots.txt 语法与日志分析命令的方法。

观测层:统计工具为什么看不见 AI 爬虫

市面上主流的访问统计工具(Google Analytics、百度统计、Plausible 等)依赖浏览器端 JavaScript 信标回传数据,而爬虫不执行 JS,或执行行为与真实浏览器差异极大,因此它们在统计面板里天然缺席。更麻烦的是,大量爬虫伪装成浏览器 UA 混进“直接访问”。本站实测:伪装成浏览器 UA 的爬虫占原始“人类访问”的约 96%,加装 JS 信标后才能分离出真实访客。不做信标交叉验证,任何“访客数”都可能严重失真。

唯一不依赖客户端的观测层是服务器原始访问日志。Nginx 的 combined 格式每行包含这些字段:$remote_addr(来源 IP)、$time_local(本地时间)、"$request"(方法与路径)、$status(状态码)、$body_bytes_sent(响应字节数),以及 $http_referer 与 $http_user_agent。判断是否被 AI 爬虫抓取,核心依据就是最后的 UA 字段。

实操建议三点:第一,日志默认在 /var/log/nginx/access.log,按天轮转后历史文件压缩为 .gz,分析时用 zcat -f 一并读入;第二,保留窗口建议覆盖 8 到 12 周,因为 AI 爬虫的巡检周期以天为单位,窗口太短看不出规律;第三,如果站点套了 CDN 或 WAF,边缘日志与源站日志看到的 UA 可能不一致,这一点在后文 Cloudflare 部分展开。

主流 AI 爬虫清单、UA 特征与真实性验证

判断“谁来了”,第一步是按 UA 里的标志性 token 分组。常见的 AI 相关爬虫包括:

UA 可以伪造,做放行、限速、封禁等重要决策前应验证真实性,标准做法是反向 DNS 加正向确认:

dig -x <来源IP> +short
# 反向解析结果应落在官方域名下,例如 openai.com、anthropic.com、perplexity.ai

dig +short <上一步得到的主机名>
# 正向解析应回到同一个来源 IP,双向一致才可信

OpenAI 在官方文档中公布了 GPTBot 的 IP 段与验证流程。任何声称自己是 GPTBot 但双向验证不通过的请求,都应按普通流量对待,而不是套用爬虫策略。

robots.txt 控制语法与生效验证

robots.txt 是控制 AI 爬虫的第一层开关,语法由 RFC 9309 定义。一份覆盖主流 AI 爬虫、可直接修改使用的示例:

# 允许 OpenAI 三类 UA,排除管理后台
User-agent: GPTBot
Allow: /
Disallow: /admin/
Crawl-delay: 10

User-agent: OAI-SearchBot
Allow: /

User-agent: ChatGPT-User
Allow: /

# 拒绝 Common Crawl
User-agent: CCBot
Disallow: /

四个容易踩坑的点:第一,robots.txt 只在域名根路径生效,放在子目录里无效;第二,User-agent 的名字大小写敏感,写成 gptbot 可能无法匹配;第三,OpenAI 文档写明 GPTBot 支持 Crawl-delay,单位为秒,但 robots.txt 本质是协商性约定,硬限制要靠服务器或边缘层执行;第四,按 RFC 9309,robots.txt 返回 4xx 时视为不存在、默认允许全部抓取,持续返回 5xx 则可能被当作整站禁止——务必确保它始终返回 200 且体积合理。

验证生效三步:用 curl -s https://your-domain.example/robots.txt 确认线上内容与预期一致;用 Google Search Console 的 robots.txt 报告检查语法;改动后在日志里按 UA 过滤,观察 48 到 72 小时内的抓取行为变化。注意搜索引擎通常缓存 robots.txt 最长约 24 小时,改动不会即时生效。

抓取节奏实测:从首次到访到稳定巡检

以下数据来自本站单一站点、单一时间窗的日志观测,价值在于提供可复用的验证方法,而非普适常数。

首访与全站覆盖:GPTBot 在站点上线后第 4 天完成全站 24 页抓取,此后每日 17:20–17:40 固定巡检 sitemap。这说明新站被 AI 爬虫发现的等待期可能很短,且抓取存在稳定的调度窗口。你可以在自己的日志里按小时聚合请求量验证:用 awk 提取时间字段的小时位后接 uniq -c,观察是否存在固定时段的请求峰值。

发布信号的传导:Meta-ExternalAgent 会在新文章发布当天抓取,最快间隔约 2 小时。文章链接被同步到社交平台后,Meta 侧的发现链路反应迅速,这提示分发渠道本身就是加速发现的抓手。

主动推送的实际效果:本站实测(2026-09)向 IndexNow 推送 43 个 URL 后返回 HTTP 202,次日 YandexBot 首次到访。IndexNow 的消费方是 Bing、Yandex、Seznam、Naver 等搜索引擎,OpenAI 与 Anthropic 的爬虫不消费该协议,不要指望它直接召唤 GPTBot;202 只表示 URL 已被接收排队,不承诺收录。

抓取与索引的落差:新域名上线 13 天、53 篇内容,Bing 与 Google 的 site: 查询仍为零结果。抓取管线与索引管线相互独立,“被爬了但搜不到”在新站阶段是常态,判断收录要看 site: 结果与站长平台的索引报告,而不是日志。

隐形拦截:Cloudflare 默认 Block AI bots 排查

本站实测:Cloudflare 对新接入站点默认启用 Block AI bots,会在边缘直接拒绝 GPTBot、ClaudeBot、Bytespider 等,且与 robots.txt 无关。这意味着你在 robots.txt 里写满 Allow: / 也无济于事——请求根本到不了源站。

两个典型特征:源站日志里完全看不到这些 UA,但 Cloudflare 后台 Security → Events 里有被拒绝的记录;用爬虫 UA 直接请求会拿到边缘返回的 403。验证命令:

curl -sI https://your-domain.example/ \
  -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.2; +https://openai.com/gptbot" \
  | head -n 15

判读方法:如果返回 HTTP/2 403,且响应头含 server: cloudflare 与 cf-ray,而同一 URL 用浏览器 UA 请求返回 200,即可确认是针对爬虫 UA 的边缘拦截。修复路径是进入 Cloudflare 控制台的 Security → Bots,关闭 AI Bot Blocking,或对特定 bot 配置例外规则。改动后等待下一次抓取窗口,在源站日志与 Security Events 两侧同时确认状态变为 200,才算闭环。

另一个常见坑:WAF 里自行添加的托管规则(例如 block all unverified bots)与 AI Bot Blocking 是两层独立配置,只关其一可能仍然拦截。排查时务必用上面的 curl 命令做最终判定,而不是依赖控制台开关的状态显示。

日志分析实操:从原始日志到抓取指标

三条可直接复用的管道命令(针对 Nginx combined 格式):

# 按已知 token 统计各 AI 爬虫抓取量(含轮转与压缩日志)
zcat -f /var/log/nginx/access.log* \
  | grep -oE 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|PerplexityBot|Bytespider|meta-externalagent|CCBot|YandexBot' \
  | sort | uniq -c | sort -rn

# 只看 GPTBot 的状态码分布,403 通常意味着边缘拦截
zcat -f /var/log/nginx/access.log* | grep 'GPTBot' \
  | awk '{print $9}' | sort | uniq -c

# GPTBot 抓取过的 URL 去重清单,与 sitemap 对比算覆盖率
zcat -f /var/log/nginx/access.log* | grep 'GPTBot' \
  | awk -F'"' '{print $2}' | awk '{print $2}' | sort -u

有了明细,建议固定跟踪四个指标:首抓延迟(内容发布时间戳与该 URL 首次出现在日志的时间差)、URL 覆盖率(被抓取的唯一 URL 数除以 sitemap 条目数)、状态码健康度(重点关注 403、404、5xx 的占比与来源)、巡检周期(同一爬虫相邻两次请求 sitemap 的间隔)。判断引擎是否“稳定回访”,看的是巡检周期的方差,而不是单日抓取量。

如果站点流量较大,可以把日志导入 SQLite 或 ClickHouse:先用 awk 把每行拆成 CSV,再按天建表,配合 sitemap 条目数即可自动算出覆盖率趋势。对多数中小站点,一段定时运行的 shell 脚本加一张表格已经足够支撑周报。

从抓取记录到引用监测:可查证的效果闭环

抓取是必要条件,不是充分条件。引擎抓走页面只代表内容进入了它的处理管线,是否在答案中被引用,取决于检索相关性、内容质量与模型推理,日志无法直接回答。因此完整的 GEO 验收应分三层,且每一层都要留档:

第一层是爬虫来访记录,即本文的方法:谁来了、何时来、抓了哪些 URL、状态码是否健康。第二层是引用实测:每周用固定的问题集在 ChatGPT、Perplexity、豆包、Kimi、DeepSeek 里抽查,记录品牌是否出现在答案中、是否带链接、出现在第几位,形成可对比的时间序列。第三层是转化归因:通过带 utm 参数的落地页或会话来源标注,把 AI 渠道带来的注册、咨询与订单从整体流量中分离出来。

需要说明的是:任何声称“保证被 AI 推荐”的说法都值得怀疑,引用由模型在推理时动态决定,外部服务能承诺的只有过程性硬指标——爬虫是否来访、抓取状态码是否健康、每周引用存档是否存在变化。在这条链路上,答流 AIGeoFlow 提供覆盖 ChatGPT、Perplexity、Gemini、豆包、Kimi、DeepSeek 的全栈交付:AI 可见性诊断、零改造技术接入(Cloudflare Worker 边缘适配,主站一行代码不动、域名权重全保留)、内容矩阵运营与引用监测,并提供技术就绪度与内容就绪度双维度的免费 0–100 评分诊断与改进清单。

常见问题

robots.txt 里已经允许 GPTBot,为什么日志里还是看不到它?
先排查边缘层。本站实测 Cloudflare 对新接入站点默认启用 Block AI bots,会在边缘直接拒绝 GPTBot、ClaudeBot、Bytespider 等,与 robots.txt 无关,请求根本到不了源站日志。用爬虫 UA 直接 curl 站点,若拿到边缘 403,到 Security → Bots 关闭拦截后复查即可。另外 robots.txt 有最长约 24 小时的缓存,改动不会即时生效。
GPTBot 抓取过我的站点,代表 ChatGPT 会引用我的内容吗?
不代表。GPTBot 主要服务于模型训练语料的采集;ChatGPT 内置搜索的实时检索由 OAI-SearchBot 负责,用户在对话中触发浏览时出现的是 ChatGPT-User。三者 UA 与用途不同,日志应分开统计。抓取只是内容进入管线的入口,是否被引用还取决于问题相关性、内容质量与模型推理,需要用固定问题集做定期抽查来验证。
如何确认日志里的 GPTBot 不是伪造的?
标准做法是双向 DNS 验证:先对来源 IP 做反向解析(dig -x),结果应落在 openai.com 域下;再对得到的主机名做正向解析,确认回到同一 IP。OpenAI 官方文档公布了 IP 段与验证流程。双向验证不通过的请求应按普通流量处理,不能套用爬虫策略,也不应计入 AI 抓取统计。
IndexNow 推送能加速 GPTBot 抓取吗?
不能。IndexNow 的消费方是 Bing、Yandex、Seznam、Naver 等搜索引擎,OpenAI 与 Anthropic 的爬虫不消费该协议。本站实测(2026-09)推送 43 个 URL 返回 HTTP 202 后,次日到访的是 YandexBot。想要 GPTBot 更快发现新内容,更可靠的路径是保持 sitemap 实时更新、建设稳定的外链与分发渠道。
页面被抓取了但 site: 查不到,多久会被收录?
无法给出统一时间表。本站实测:新域名上线 13 天、53 篇内容时,Bing 与 Google 的 site: 查询仍为零结果,索引建立明显滞后于抓取。抓取与索引是两条独立管线,建议以站长平台的索引状态报告为准,同时核对日志中抓取状态码是否为 200,并排查 noindex、canonical 指向错误等技术原因。
Crawl-delay 能限制 GPTBot 的抓取频率吗?
OpenAI 文档写明 GPTBot 支持 Crawl-delay 指令,单位为秒,写在对应 User-agent 组内即可。但 robots.txt 属于协商性约定,执行程度取决于爬虫实现;如果服务器压力确实大,应在 Nginx limit_req 或边缘层按验证过的 IP 与 UA 做限速,双保险比单靠 robots.txt 可靠。
免费测一测:AI 能找到你的网站吗?

相关阅读