从服务器日志区分 AI 爬虫与 AI 用户抓取
独立开发者推出工具 Canonry,将 GPTBot 等自动爬虫与 ChatGPT-User、Claude-User 等…
当用户在 ChatGPT 或 Claude 中提问时,问题先发到平台后端,而不是你的网站。只有当 AI 需要实时获取页面时,平台才会从自己的网络额外向你的服务器发起请求。在这种「服务端代理」模式下,你的源站看到的是平台出口 IP 和平台声明的 User-Agent,而不是真实用户的浏览器。开发者 Arber Xhindoli 在博客中介绍了其自研工具 Canonry 如何在 Cloudflare、Cloud Run、Vercel、WordPress 等日志中,把这类「AI 用户抓取」与传统的 AI 自动爬虫区分开来。
ChatGPT-User 与 GPTBot 不是一回事
OpenAI 在文档中说明,部分用户行为会使用 ChatGPT-User 标识访问网页;Anthropic 也表示 Claude 可能用 Claude-User 为用户查询取回内容。这些标识与 GPTBot、OAI-SearchBot、ClaudeBot 等自动爬虫不同——后者由 OpenAI 或 Anthropic 自主调度,前者则与具体用户问题绑定。
两者在日志里的含义差别很大:自动爬虫是平台自行抓取索引;用户抓取是平台替用户拉取一次页面,可能被用于生成回答,也可能根本不进入最终答案。而传统浏览器分析(GA4、Marketing Pixel)依赖 JS 执行,在这种服务端取页路径下不会触发,于是分析后台看不到访问,边缘或源站日志却记下了一条请求。
IP 范围可验证,但不能完全信任 User-Agent
OpenAI 和 Anthropic 都公开了各自标识对应的 IP 段。匹配成功时,标识可被验证;不匹配时只能当作「未验证」处理。原因是 User-Agent 只是声明,任何客户端都可以写上 ChatGPT-User。Canonry 按小时汇总请求数、标准化路径、响应状态和验证状态,把爬虫流量、用户抓取、引用来源、答案引用四类事件分开统计,避免被一个「AI 流量总数」掩盖不同含义。
七天实测:947 个用户抓取,1667 个爬虫请求
作者在 canonry.ai 上抓取了一个 7 天窗口的数据:
- 947 条请求使用 AI 用户抓取标识;
- 1667 条请求使用四个爬虫标识;
- 其中 927 条被标记为 ChatGPT-User,与 Canonry 存储的 5 月 17 日 IP 快照匹配 64 条;
- 8 月 13 日用 OpenAI 当时发布的最新文件复检,同一批日志匹配 76 条;
- 其余 851 条未匹配,其中 789 条集中在 5 个小时内到达,几乎全部返回重定向或 404,探测路径包括 /.env 和 /.ssh/id_rsa。
这种「短时间内集中探测敏感路径」的模式与扫描器行为高度吻合,结合 IP 不匹配,作者判断这些请求很可能是冒用 ChatGPT-User 标识的扫描器。但他也指出,仅凭 IP 不匹配无法单独认定调用方身份。
抓取 ≠ 引用
文章最后澄清了一个常见误解:用户抓取只证明请求到达了网站,并不证明页面被 AI 答案引用。要确认引用关系,需要从保存的答案证据里检查源链接,这是另一套独立的统计口径。对于运营者而言,把抓取、爬虫、引用、来源访问分别计数,才能避免用一个数字误导判断。
