把测试环境和线上的 robots.txt 当成两份独立响应来对照:先分别请求,再逐项比较状态码、正文内容、Content-Type 和关键规则,而不是只打开文件看几眼。测试环境的 robots.txt 可以放开抓取,线上则要按真实策略收紧,两者目标不同,所以对照的重点不是“完全一样”,而是确认差异是有意为之,并且不会让线上暴露测试目录或误封正式路径。
robots.txt 只对“当前主机名”生效。测试环境通常是 test.example.com 或带端口、带基础路径的地址,线上是 www.example.com。爬虫访问哪个主机,就只读取那个主机下的 robots.txt,不会把测试环境的规则带到线上,也不会反过来。
因此对照前先写清两件事:
如果测试环境根本不允许外部访问,那么它的 robots.txt 主要用于防止内部爬虫或预览工具误抓,对照时更应关注是否误封了需要联调的路径。
对两个环境分别发起请求,记录以下检查项:
text/plain。如果返回 text/html,可能是被错误地当成页面渲染,部分爬虫会拒绝解析。User-agent、Disallow、Allow、Sitemap 行。Disallow: /Test/,线上写 Disallow: /test/,在多数系统里是两个不同路径。* 和 $ 的写法要两边一致。测试环境若用 Disallow: /*?debug= 屏蔽调试参数,线上漏掉这条,带参数的正式 URL 可能被意外抓取。可执行的短例子(假设域名):
curl -sS -D - https://test.example.com/robots.txt -o test-robots.txt
curl -sS -D - https://www.example.com/robots.txt -o live-robots.txt
diff -u test-robots.txt live-robots.txt
适用条件:两个环境都能从当前网络访问。判断结果:diff 输出为空表示正文完全一致;有输出则逐条判断差异是否合理。若测试环境故意放开全部抓取,出现大量差异是正常的,但必须确认线上没有因此少写屏蔽规则。
测试目录与后台路径。测试环境常包含 /staging/、/preview/、/admin/ 等路径。线上 robots.txt 若照搬测试环境的 Disallow 列表,可能把正式栏目一起封掉;反过来,测试环境若完全不屏蔽,内部预览页可能被外部爬虫抓走。
Sitemap 声明。robots.txt 里的 Sitemap 行应指向对应环境的站点地图。测试环境写线上的 sitemap 地址,会让爬虫在测试环境里读到线上地图,属于配置错位。注意:sitemap 只是提交线索,不保证收录;robots.txt 里的声明也不等于收录指令。
抓取限制与索引移除的区别。Disallow 只阻止爬虫抓取,不阻止已收录 URL 出现在结果里。如果线上某个页面已经被抓取并收录,后来才加 Disallow,它仍可能保留在索引中。对照时若发现“线上封了但还能搜到”,不要把它当成 robots.txt 失效,而应另行处理移除需求。
不同搜索引擎的解析差异。各家对通配符、最长匹配、Allow 优先级的处理并不完全一致。对照时如果规则复杂,应分别用目标搜索引擎的抓取测试工具核验,而不是假定一份规则在所有引擎里行为相同。
多人协作时,把对照结果做成可复查的记录,比口头说“我看过了”更省返工。验收信号可以包括:
下一步:在发布流程里固定一次对照动作——每次改动 robots.txt 后,分别请求两个环境并保存 diff 结果,把差异说明附在变更记录中,再交给下一环节确认。