最小修复试验的核心是:只改一条规则,只影响一个可验证的目标,改前保存原文件,改后用抓取测试和日志验证,确认有效再决定是否保留或扩大。不要一次重写整个robots.txt,否则无法判断是哪条规则产生了效果。下面从交付结果倒推需要准备的资料、执行步骤和验收标准。
最小修复试验不是“把robots.txt改好”,而是回答一个具体问题,例如:某目录被误屏蔽后,放开该目录能否让目标URL恢复可抓取。交付结果应当写成可检验的句子,包含三要素:目标URL、预期变化、验证方式。
/products/ 下的某个页面,而不是“整个网站”。如果无法写出可检验的预期变化,说明问题还没定位清楚,此时改文件只是碰运气。先回到现象本身:是抓取被拦截,还是页面被抓取但不被索引?这两者的处理方向不同,robots.txt只能影响前者。
资料不全就动手,最容易把一个小问题变成全站故障。按以下清单逐项确认:
责任划分也要提前定:谁改文件、谁验证、谁决定回滚。只有一个人操作时,至少把回滚条件写在纸面上,例如“若目标URL仍不可抓取,或日志中出现新的404激增,则恢复备份”。
假设现象是某个公开目录被误屏蔽,文件中有这样一行:
Disallow: /products/
而实际需求是允许抓取 /products/ 下的公开页面,同时继续屏蔽 /products/search。最小试验不是直接删掉整行,而是先只处理公开目录这一条:
Disallow: /products/search
这样改动只影响一个路径范围,其他规则保持原样。改完后立即做两件事:一是用抓取测试功能请求一个 /products/ 下的具体页面,观察返回的是允许还是拦截;二是查看日志中爬虫对该路径的请求是否开始出现。两项都通过,才算这条规则修复有效。
适用条件是:问题确实由这一条规则引起,且没有其他规则覆盖同一路径。判断方法是检查文件中所有User-agent分组,确认目标爬虫命中的是哪一个分组、组内是否有更长前缀的Disallow规则。robots.txt的匹配按前缀判断,规则越具体越优先,但不同实现细节仍需以实际测试为准。
验收要区分“抓取限制”和“索引移除”。robots.txt写的是抓取许可,它不负责把已收录页面从索引中删除。如果目标是让某个页面从搜索结果消失,正确做法是使用noindex或移除请求,而不是靠Disallow。用robots.txt屏蔽一个已被收录的页面,结果往往是该页面无法被抓取,索引中的旧信息却可能长期保留。
同样,站点地图不保证收录,把URL放进站点地图只是提供发现线索。HTTPS也不保证安全无漏洞或排名提升,它只是传输层加密。这些都不是本次试验的验收项,不要混进来判断成败。
验收时还要注意:不同搜索引擎对robots.txt的支持细节不完全一致,同一份文件在不同爬虫下的表现需要分别核查。测试时应明确针对哪个爬虫,不要用一个爬虫的结果推断全部。
如果测试通过但日志中目标URL仍无请求,可能原因包括:该URL本身返回错误状态、站点地图未更新、内部链接不足、或爬虫抓取预算有限。这些都是“可能原因”,不是已经定位的原因,需要逐项用日志和抓取测试排除,而不是继续改robots.txt。
单条规则验证有效后,先保留这个最小版本运行一段时间,观察日志中目标路径的抓取是否稳定、是否出现新的误抓。确认稳定后,再决定是否把同样的思路应用到下一条冲突规则。每次只动一条,每次保留备份和验证记录,这样即使后续出现问题,也能快速定位到是哪次改动引入的。