先给结论:如果同一 URL 在未登录与已登录、或不同设备上返回不同的 robots.txt 内容,优先把它当成“响应差异”问题而不是“规则写错”问题;此时应先用同一台机器、同一网络、同一时刻分别记录每种状态的响应,再决定以哪一份作为判断抓取限制的依据。直接改规则、只测一种状态,往往会把差异掩盖掉。
robots.txt 是服务器按请求返回的普通文本文件,差异通常来自三处:
关键判断点不是“哪份看起来更完整”,而是哪份是搜索引擎抓取时真正会拿到的那份。搜索引擎抓取 robots.txt 时通常不带你的登录 Cookie,也不模拟你的设备,因此登录后看到的版本往往不是它看到的版本。
实际工作中常见两种取舍:
如果两种状态返回的内容完全一致,说明差异不在 robots.txt 层,应转去检查页面本身的渲染差异,而不是继续在这里调整规则。
上面“以匿名请求为基准”的结论,在一种情况下会失效:站点把 robots.txt 放在需要登录才能访问的路径下,或对匿名请求返回了 403、404 而非正常文本。这时匿名请求拿不到有效内容,你看到的“空文件”并不代表规则为空,而可能是权限拦截。此时应改用能代表抓取方的访问方式重新取样,或先修正访问控制,再谈规则对照。
另一个容易误判的点:某次请求返回了 200 且内容正常,不代表所有边缘节点都返回同一份。缓存未刷新时,不同节点可能给出旧版本。
假设某站桌面端匿名请求返回 User-agent: * 加 Disallow: /search,而移动端匿名请求返回的却是 Disallow: /。这两份都来自匿名请求,却指向完全相反的抓取限制。此时不能简单取“更宽松”的那份,而要先确认服务器为何对设备分流,再统一成一份,或明确让两种 UA 得到相同结果。这个例子只是说明比较方法,不代表任何真实站点的现状。
建议按顺序执行:
Disallow 差异;这个动作的结果会直接决定下一步:如果匿名结果一致,说明 robots.txt 层没有设备差异,可以把精力转到页面渲染或索引问题上;如果不一致,则任何基于单一状态的规则修改都可能顾此失彼,必须先统一响应再验证。需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录,因此对照的目的应是让抓取限制可预期,而不是把它当作收录控制手段。