对照测试环境与线上的robots.txt,核心不是看两份文件内容是否一样,而是确认同一批URL在两种环境下会得到相同的抓取结论。做法是:先保证两份文件放在各自站点的根目录、可通过/robots.txt访问,再逐条比对User-agent分组、Disallow与Allow路径、Sitemap地址,最后用同一组测试URL分别请求两个环境,看“允许/禁止”的判断是否一致。测试环境与线上域名不同、目录结构不同、甚至协议不同,都会让看似相同的规则产生不同结果,所以必须以实际请求结果为准,而不是以文件文本为准。
对照的前提是两边都能被正常访问。分别请求两个环境的根目录robots.txt,检查:
如果测试环境整站开启了访问密码或IP白名单,爬虫类工具根本取不到文件,这时对照就失去意义。适用条件是:测试环境至少允许对/robots.txt的匿名GET请求。若不允许,应改为在服务器本地读取文件,再用规则解析工具比对,而不是用在线抓取工具。
两份文件文本不同并不一定是错误,但差异必须能解释清楚。建议按以下顺序比对:
User-agent: *。分组缺失会导致同一URL结论不同。*或结尾符$。测试环境常写成/test/这类前缀,而线上写的是/。Disallow: /覆盖时默认禁止。两边默认状态不同,是最容易被忽略的差异。假设线上有一条Disallow: /search,测试环境写成Disallow: /search/。对/search?q=1这个URL,前者会禁止,后者可能不匹配而放行。这就是同一现象有多种解释的典型情况:可能是规则写法差异,也可能是测试环境URL结构不同,需要分别验证,不能直接断定是某一方配置错误。
文本比对完成后,必须做行为验证。准备一组覆盖典型情况的URL,例如首页、栏目页、搜索结果页、后台路径、带参数的列表页。对每个URL,分别在测试环境和线上环境判断它是否被禁止抓取。
判断方法可以人工完成:找到匹配该URL的User-agent分组,从上到下逐条匹配路径,第一条命中的规则决定结果。也可以用支持指定robots.txt来源的规则测试工具,把两个环境的文件内容分别导入,输入同一URL对比输出。
验收信号是:对每一个测试URL,两个环境给出的允许/禁止结论一致;若不一致,能指出差异来自哪一条规则或哪一个域名前缀。如果所有URL结论都一致,且Sitemap地址已按环境区分,对照工作即可结束。
整站禁止抓取。测试环境常写Disallow: /防止被收录,这是合理的。但如果要拿它和线上对照,就必须意识到这份文件本身不代表线上策略,对照时应临时使用一份与线上等价的规则副本,而不是直接比最终文件。
域名与路径前缀不同。robots.txt的路径是相对于当前域名的。测试环境部署在子目录下时,/指向的位置和线上不同,规则含义随之改变。
把抓取限制当成索引移除。即使测试环境禁止抓取,已收录的URL也不会因此自动消失。对照工作的目标是统一抓取策略,不是清理索引。索引移除需要另外的手段,且不同搜索引擎的处理方式须分别核查。
先取到两个环境的robots.txt原始响应,确认状态码与内容类型正常,再按User-agent分组、路径规则、Sitemap地址三项列出差异清单。然后用同一组URL分别验证抓取结论,把不一致的条目对应回具体规则。差异清单和验证结果都对齐后,再决定是修改测试环境配置,还是修改线上规则。