先给结论:不要用“换一台设备再打开一次”来对照,那样只会得到两个无法比较的结果。正确做法是把设备、登录状态和请求头固定成两组可复现的请求,分别拿到 robots.txt 的响应,再逐行比对差异,最后判断差异是否来自服务端分流,而不是缓存或 CDN。
同一地址返回不同内容,可能发生在三个层次:服务端按 User-Agent 或 Cookie 分流、中间层按设备类型缓存、浏览器按登录态本地渲染。robots.txt 是纯文本文件,通常不涉及渲染,所以第三层基本可以排除。真正需要对照的是前两层。
判断顺序建议是:先用同一网络、同一时间、不同请求头各取一次,确认差异是否稳定复现;如果稳定,说明是服务端或中间层规则;如果时有时无,优先怀疑缓存。
以下为假设情境,用于说明对照方法,不代表任何真实站点。假设某站点的 robots.txt 在桌面浏览器打开时显示允许抓取全部目录,而在手机浏览器打开时多出一行禁止某个子目录。运营者已经清过浏览器缓存、换过网络,差异依旧。此时需要回答的不是“哪个才是真的”,而是“服务端依据什么分流”。
第一步,固定变量。准备两组请求:A 组使用桌面 User-Agent,不带 Cookie;B 组使用移动 User-Agent,不带 Cookie。两组都在同一台机器、同一出口 IP、同一分钟内执行。
第二步,用命令行取回完整响应,而不是只看正文。以 curl 为例,分别执行:
curl -A "桌面UA" -s -D - https://example.com/robots.txtcurl -A "移动UA" -s -D - https://example.com/robots.txt其中 -D - 会把响应头一并打印。重点看三处:状态码是否都是 200、Content-Length 或 ETag 是否不同、是否出现 Vary 头。如果 Vary 里包含 User-Agent,说明中间层明确按 UA 区分缓存,这本身就是差异来源的直接证据。
第三步,再取一次带登录 Cookie 的请求,与不带 Cookie 的同一 UA 请求对比。如果只有带 Cookie 时多出禁止行,说明分流依据是登录态而非设备。这一步能把“设备差异”和“登录差异”拆开。
拿到多组响应后,按下面的证据链判断:
Vary 明确列出区分维度:这是有意的服务端分流,需要确认哪一组是搜索引擎抓取时实际会遇到的版本。Vary 或分流标记:更可能是配置错误或缓存污染,应优先排查反向代理规则。这里有一个容易被忽略的动作:把每次请求的时间戳和响应头一起保存。如果后续差异消失,没有时间戳就无法判断是修复生效还是缓存过期,也就无法决定下一步是继续观察还是回滚配置。
对照的目的不是选出“正确版本”,而是让搜索引擎抓取时看到的版本与你的意图一致。搜索引擎抓取 robots.txt 时通常使用自己的 User-Agent,且一般不携带你的登录 Cookie。因此,判断基准应是无 Cookie、搜索引擎 UA 的那一组响应。
如果发现带登录 Cookie 的版本多出禁止规则,而匿名版本没有,说明这条规则只对登录用户生效,对抓取无影响,可以不动。反过来,如果匿名版本多出禁止规则,而你在后台看到的是登录版本,就会误判为“规则没问题”,实际抓取已被限制。
需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除。即使某条规则只对部分 UA 生效,也不应把它当作删除已收录页面的手段。站点地图也不保证收录,它只提供发现线索。修改分流规则后,应分别核查不同搜索引擎对该文件的处理情况,因为支持程度和缓存策略并不一致。
把上面的方法压缩成四步,便于每次改动前后执行:
如果三组结果仍然无法解释差异,下一步不是继续换设备,而是直接检查源站配置和中间层缓存规则,因为此时设备已不是有效变量。