一句话:答案引擎无法引用它抓不到的页面,所以爬虫访问是 GEO 里唯一一个「前提」而非「优化项」的部分。
这是两个决定,不是一个
AI 公司运行的代理职责不同。有的为训练语料收集内容;有的是因为用户刚问了一个需要它的问题才去抓页面。封锁前者,是关于「内容是否用于训练模型」的一个可以辩护的商业决定;封锁后者,等于把自己从本周就会出现的回答里移除,而那些买家正在主动提问。
多数站点只做了一个决定并同时应用到两者身上,通常是无意的——因为这两类代理在同一个文件里挨着排。要有意识地把它们分开。
训练访问与检索访问是两个问题。一次回答一个。
值得逐个点名的代理
OpenAI 运行 GPTBot 用于内容收集、OAI-SearchBot 用于搜索索引、ChatGPT-User 用于由用户请求触发的抓取。Perplexity 运行 PerplexityBot,Anthropic 运行 ClaudeBot,Google 的 Google-Extended 与 Googlebot 分开管理其 AI 产品中的使用,Common Crawl 的 CCBot 则供给了大量下游数据集。中文市场的助手也各有自己的爬虫,例如 Bytespider。
把你有明确态度的那些点名写出来,其余交给默认规则。一个你从没听说过的代理,是「待评估」,不自动等于威胁。
为什么读 robots.txt 证明不了任何事
robots.txt 是守规矩的爬虫会遵守的声明。它不是强制手段,也不是代理与你页面之间唯一的关卡。robots.txt 写着放行,但前面还有 CDN 规则、机器人管理产品或防火墙对这些 UA 返回 403,实际就是封锁,而这个文件会一直宣称相反的事。
还有两个常见陷阱。一是优先级:最具体的匹配组生效,所以后面的通配组对已有专属组的代理并不适用,你以为全局生效的规则可能并不生效。二是抓取成功也可能毫无用处——响应是个空壳,内容要等 JavaScript 运行后才出现。
真正能证明放行的检查
用你在意的每一个 User-Agent 去请求一个真实页面,记录状态码与响应正文的大小,再把这份正文和浏览器渲染出来的内容作对比。三种结果有意义:403 或 429 说明你在 robots.txt 之下的某一层被挡住了;200 但正文近乎为空,说明内容是客户端渲染的,代理什么也拿不到;200 且文本在里面,才是真的可读。
要拿内容页去测,不要拿首页。首页往往是静态的,而真正回答买家问题的页面才在框架后面。
拿到结果之后
在造成封锁的那一层修复它——通常不是 robots.txt。然后重新检查,因为机器人管理规则常由另一个团队更新,而不是拥有站点的那个团队。把检查日期记在结果旁边:爬虫访问不是一次达成的状态,而是会悄悄变化的状态。