测试环境与线上对照 robots txt 协议,核心不是比较两份文件是否一字不差,而是判断同一套抓取规则在两种环境下会不会产生不同结果。正确做法是:先确认协议文件本身是否可访问、语法是否有效,再比较测试环境与线上环境的域名、路径和返回状态,最后用抓取工具分别请求,观察允许与禁止结果是否一致。若测试环境故意放开抓取,就不能把它当成线上规则的预览。
对照 robots txt 协议时,目标通常有两种。第一种是规则一致,即两份文件对同一路径给出相同的允许或禁止结论。第二种是效果一致,即测试环境能模拟线上抓取限制,让被禁止的路径同样抓不到。两者代价不同:规则一致只需文本比对,成本低;效果一致还要保证域名、路径前缀、重定向和访问权限都接近线上,成本高。如果只是上线前检查语法,选第一种即可;如果要验证目录级屏蔽是否生效,必须选第二种。
/robots.txt,确认返回状态码为 200,而不是 404、403 或跳转到登录页。其中最容易出错的是路径前缀。假设线上禁止 /private/,测试环境部署在 /test/private/,那么只写 Disallow: /private/ 对测试路径并不生效。此时要么调整测试环境路径,要么在测试文件中写对应前缀,但这会改变规则本身,不能直接复制回线上。
robots txt 协议只表达抓取偏好,不保证页面从搜索结果中消失。已经被抓取并建立索引的网址,即使后来加入禁止规则,也可能继续出现在结果里,因为抓取限制和索引移除是两件事。对照测试环境与线上时,如果目标是验证“页面是否还会被收录”,只比较 robots txt 协议不够,还要分别检查该网址的索引状态和页面上的索引指令。测试环境通常不应被搜索引擎收录,因此更合理的做法是让测试环境整体不可公开抓取,而不是依赖一份和线上相同的协议文件。
User-agent、Allow、Disallow 和 Sitemap 行,标记差异。判断标准可以简化为:如果差异只出现在测试环境专用路径上,且线上规则未被误改,可以接受;如果同一路径在两个环境得到相反结果,且该路径线上需要禁止,则测试环境不能作为上线依据,应以线上文件为准并单独修正测试配置。
只做语法和上线前检查,选文本比对,速度快,代价是发现不了路径前缀和重定向问题。要验证目录屏蔽、抓取预算控制或站点地图声明是否生效,选抓取结果对照,更接近真实情况,代价是需要维护两套环境的一致性。若测试环境本身不允许公开访问,不要为了对照而放开它;可以改用本地抓取模拟,或只在测试环境内部验证规则语法。下一步,先列出两个环境各自的协议文件路径和返回状态,再决定采用文本比对还是抓取结果对照。