robots.txt编写:同一地址因设备或登录状态返回不同内容怎样对照

📍 WDQWDWQD987AAAAA:216.73.216.7
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /76c09deebeaf.html
📄

robots.txt编写:同一地址因设备或登录状态返回不同内容怎样对照

先给结论:不要试图让两种返回结果“统一成一个答案”,而要把它们当成两条独立证据链分别固定,再用请求头、响应状态和响应体三列并排比对。只有确认差异来自服务端对设备或登录状态的差异化响应,而不是缓存、CDN或爬虫身份,才能决定 robots.txt 该不该区分处理。

先看一个假设情境:同一路径为什么给出两种结果

假设站点有一个 /article/123 路径。你用桌面浏览器登录后打开,看到完整正文;用移动端未登录状态打开,只看到摘要和登录引导。此时你怀疑 robots.txt 是否需要为移动端单独放行或屏蔽。这个差异本身不是 robots.txt 造成的——robots.txt 只影响爬虫能否抓取路径,不改变服务端对设备或登录态返回什么内容。真正要判断的是:两种返回里,哪一种是爬虫实际会拿到的版本。

把假设写清楚:该站点使用同一域名、同一路径,服务端根据 User-Agent 和 Cookie 状态做内容裁剪。这个前提成立时,下面的对照方法才有意义;如果差异其实来自 CDN 缓存命中不同节点,处理方向完全不同。

用三列并排记录,而不是凭截图下结论

准备一张对照表,每一行是一次请求,列固定为三项:请求特征、响应状态码、响应体关键片段。请求特征至少记录 User-Agent、是否携带登录 Cookie、请求方法。响应体不要整页保存,只截取能区分版本的片段,例如正文首段、登录提示文案、被裁剪的段落标题。

如果第二行和第三行返回的正文片段一致,而第一行不同,说明差异主要来自登录状态,而不是设备类型。这个判断会直接改变下一步:登录态差异通常不该靠 robots.txt 解决,而应检查是否存在对未登录爬虫的软性内容屏蔽。

区分三种常见原因,别把缓存问题当成规则问题

同一地址返回不同内容,至少有三种可区分的原因,证据也不同。

  1. 服务端按请求头差异化输出。证据是同一路径、不同 UA 或 Cookie 下响应体结构不同,且响应头里没有明显的缓存命中标记。此时 robots.txt 只能决定爬虫是否允许请求该路径,不能决定请求后拿到哪一版。
  2. CDN 或反向代理缓存了不同版本。证据是同一请求特征在短时间内多次请求,返回结果不稳定,或响应头中出现缓存状态字段。此时应先核对缓存键是否包含 UA 或 Cookie,而不是改 robots.txt。
  3. 爬虫身份被单独处理。证据是用搜索引擎官方 UA 请求时返回空壳或验证页,而普通浏览器 UA 正常。此时要核查服务端是否有针对特定 UA 的拦截逻辑,robots.txt 的 Allow 或 Disallow 不会绕过这层拦截。

这三种原因可以同时存在。不要因为“改了 robots.txt 后结果变了”就认定 robots.txt 是原因——缓存过期、服务端发布或拦截策略调整都可能在同一时间生效。

对照之后,robots.txt 能做什么、不能做什么

假设对照结论是:未登录移动 UA 拿到的是摘要页,登录后拿到全文,且爬虫 UA 拿到的是摘要页。此时你要做的是决定是否允许爬虫抓取这个摘要页。允许抓取不等于该页会被收录,也不等于摘要页会展示全文;Disallow 也不等于该 URL 会从已有索引中移除。robots.txt 的抓取限制不是可靠的索引移除手段,这一点在差异内容场景下尤其容易误判。

一个实际动作:在 robots.txt 中保留对该路径的抓取许可,同时检查服务端是否对爬虫 UA 返回了与未登录用户一致的摘要页。如果一致,说明内容差异来自登录门槛,而不是抓取规则。下一步应转向内容可访问性设计,而不是继续调整 robots.txt 的 User-Agent 分组。

如果站点地图里列出了该路径,也不代表它一定被收录。站点地图只是发现线索,不保证抓取和索引结果。把站点地图当作对照证据之一可以,但不能用它反推 robots.txt 写得对不对。

把对照结果写成可复查的交接记录

完成上述对照后,留下一份最小记录:请求特征、状态码、响应体片段、请求时间、当时使用的 robots.txt 内容摘要。这样下次出现相反结果时,可以判断是规则变了、缓存变了,还是服务端输出变了。记录里不要只写“移动端看不到”,要写清是未登录移动 UA 看不到,还是登录后移动 UA 也看不到——这两个结论指向完全不同的下一步。

最后提醒一点:不同搜索引擎对 robots.txt 的解析和支持细节需要分别核查,不能假设一套规则在所有爬虫上行为一致。对照时如果只测了一种爬虫 UA,结论就只适用于那一种。

图1 图2

nginx