如何审查 AI 爬虫对网站的访问情况
测试 GPTBot、OAI-SearchBot、ClaudeBot 和 PerplexityBot 能否抓取你的网站,定位拦截原因,并安全验证每项修复。
快速解答
审查 AI 爬虫访问情况时,应检查 robots.txt,使用各爬虫的官方 User-Agent 测试重要 URL,将返回的状态码和 HTML 与普通浏览器请求进行比较,并查看 CDN 或防火墙日志中的拦截记录。如果服务器返回验证挑战、403、空页面外壳或不同内容,仅在 robots.txt 中设置 Allow 规则并不足以确保爬虫能够正常访问。
要点总结
- 分别测试检索爬虫和训练爬虫,因为它们的用途和控制方式不同。
- 检查最终响应正文,而不只是 robots.txt 或 HTTP 状态码。
- 审查有代表性的页面类型:主页、文章页、产品页、文档页,以及一个深层 URL。
- 先修复 CDN 和防火墙规则,再改写内容;无法访问的页面无法获得引用。
- 每次部署后重新检查,并通过服务器日志监测真实爬虫的访问。
AI 爬虫访问审查应检查哪些内容?
完整的访问审查应依次检查四个层面:robots.txt 中声明的访问权限、能否通过 CDN 或防火墙访问网站、重定向后的最终 HTTP 响应,以及无需运行浏览器端 JavaScript 即可获取的有效 HTML 内容。通过其中一层,并不代表下一层也能正常工作。
| 检查层面 | 通过条件 | 常见问题 |
|---|---|---|
| robots.txt | 未禁止相关 User-Agent 抓取 | 通配规则覆盖了原本用于放行的规则 |
| 网络边缘层 | 爬虫能与访客一样访问同一个源站 | 机器人防护返回 403、429 或验证挑战 |
| HTTP | 经过合理的重定向后,返回一个状态码为 200 的规范页面 | 重定向循环、软 404 或语言地区跳转陷阱 |
| 渲染内容 | 初始 HTML 中包含标题、答案、链接和结构化数据 | 仅返回空应用外壳,内容依赖客户端 JavaScript 加载 |
哪些爬虫需要单独检查?
不要把所有 AI User-Agent 都视为同一种爬虫。搜索检索、用户触发的抓取和模型训练可能分别使用不同的爬虫,也有不同的控制方式。应先按用途制定访问策略,再使用各服务商文档中列出的准确官方 User-Agent 标识进行测试。
- OpenAI:使用 OAI-SearchBot 测试搜索发现,使用 ChatGPT-User 测试用户触发的检索,并根据你的训练访问策略测试 GPTBot。
- Anthropic:分别检查 ClaudeBot,以及当前文档中列出的各类检索爬虫。
- Perplexity:根据最新文档,测试 PerplexityBot 和用户触发的检索。
- Google:区分 Googlebot 的搜索访问权限,以及 Google-Extended 对生成式模型训练和依据关联(grounding)的控制。
如何开展可重复执行的爬虫测试?
- 选择五个有代表性的 URL,其中包含一个主页没有直接链接的深层页面。
- 获取 robots.txt,并记录适用于每个 User-Agent 的规则。
- 使用官方 User-Agent 字符串请求每个 URL,记录状态码、最终 URL、内容类型、响应大小和响应时间。
- 检查返回的 HTML 是否包含 canonical、H1、直接答案、主要链接和 JSON-LD。
- 将爬虫响应与普通浏览器响应进行比较,并排查有实质影响的差异。
- 检查边缘节点和源站日志,查找验证挑战、限流和反复失败的请求。
curl -L -A 'OAI-SearchBot' -D headers.txt https://example.com/ -o page.html
grep -Ei '<title|<h1|application/ld\+json|rel="canonical"' page.html如何排查爬虫请求失败的原因?
| 观察到的结果 | 可能原因 | 下一步检查 |
|---|---|---|
| 403 或验证挑战页面 | CDN、WAF 或机器人管理规则拦截 | 查看对应的边缘事件及命中的规则 ID |
| 429 | 自动化流量共用限流额度 | 检查针对爬虫的限流设置和重试指引 |
| 返回 200,但 HTML 内容极少 | 仅在客户端渲染,或数据请求被拦截 | 查看初始页面源码和服务器日志 |
| 重定向至登录页或语言地区选择页 | 中间件或地理位置规则导致跳转 | 测试 Cookie、Accept-Language 和 canonical 的处理方式 |
| 页面内容正确,但缺少结构化数据 | 结构化数据仅在浏览器中注入 | 将关键标记移至服务端渲染的 HTML 中 |
如何确认访问问题已修复?
只有当受影响的 User-Agent 收到状态码为 200 的规范页面,且页面中的实质性答案与访客看到的一致时,才能确认修复有效。请保存测试命令、时间戳、响应头,以及响应正文的哈希值或内容摘录。随后在服务器日志中确认真实爬虫的访问记录:模拟测试证明可以访问,日志则证明实际发生了抓取。
- 重新测试所有受影响的页面模板,而不只是主页。
- 确认 robots.txt 与站点地图中的引用保持一致。
- 检查缓存是否仍在返回修复前被拦截的响应。
- 在 CDN、防火墙或渲染方式变更后,将此项审查纳入发布检查。
分步指南
- 1选择有代表性的页面
从每种页面模板中选取重要 URL,并至少包含一个深层页面。
- 2查看适用的 robots 规则
逐一检查每个官方 AI User-Agent 适用的规则,包括通配规则。
- 3抓取并比较响应
记录重定向、状态码、响应头、正文大小、可见内容和结构化数据。
- 4追查拦截原因
结合边缘节点和源站日志,定位具体的拦截规则或渲染依赖。
- 5重新测试并持续监测
验证修复后的响应,并持续关注真实爬虫的访问记录。
常见问题
- 允许 GPTBot 访问,是否也会允许 ChatGPT Search 访问?
- 不一定。OpenAI 文档为训练、搜索发现和用户触发的检索分别列出了不同的爬虫。应根据你希望授予的访问权限,对当前各官方爬虫分别进行审查和配置。
- robots.txt 已允许访问,为什么 AI 爬虫仍收到 403?
- robots.txt 只是声明抓取偏好,并不能绕过 CDN、防火墙、身份验证层或机器人验证挑战。请查看边缘事件和源站日志,确定是哪一层拒绝了访问。
- 返回 200 是否就足够了?
- 不够。200 响应中可能包含验证挑战页面、空应用外壳、软 404,或内容不完整的本地化页面。应检查返回的 HTML,确认其中包含实际答案、canonical、链接和结构化数据。
- 应该多久审查一次爬虫访问情况?
- 托管环境、CDN 规则、渲染方式、重定向、身份验证或 robots.txt 发生变化后,都应重新测试。对于运行稳定的网站,每月定期检查并持续监测日志,通常就能发现大多数再次出现的问题。
- 是否应该允许所有 AI 爬虫访问?
- 这取决于你的访问策略。应将用户触发的检索、搜索发现与模型训练分开考虑,再对文档列出的各爬虫有针对性地放行或拦截,而不是用一条规则一概处理。