遇到robots.txt规则重复或冲突时,先不要急着删文件。正确做法是:把同一路径下互相矛盾的规则逐条列出来,判断冲突是“同一爬虫的多条规则”还是“不同爬虫组之间的规则”,再决定是合并成一条更宽或更窄的规则,还是按爬虫分组分层保留。合并适合规则数量少、目标一致的场景;分层适合不同爬虫需要不同权限、且你能分别验证的场景。
打开robots.txt,重点看三类重复或冲突:
Allow和Disallow同时覆盖,例如先禁止/private/,后面又允许/private/。Disallow: /tmp和Disallow: /tmp/files。User-agent: *允许,但User-agent: Googlebot禁止。观察时按“路径—爬虫—指令”三列做一张表,不要只看文件末尾。冲突往往不是语法错误,而是意图不一致。
判断依据不是规则数量,而是权限目标是否一致。
适合合并的情况:所有爬虫对同一路径应当得到相同结论;重叠规则只是历史遗留;你希望文件更短、更易维护。此时可以把多条规则收敛为一条覆盖范围更准确的规则。
适合分层的情况:不同爬虫确实需要不同权限,例如允许常规搜索抓取、限制某些抓取工具;或者你需要分别观察不同爬虫的抓取行为。此时保留独立User-agent组,但每组内部仍应避免自相矛盾。
如果只是同一爬虫组内重复,优先合并;如果是跨爬虫组冲突,先确认业务意图,再决定是否分层保留。不要因为“看起来乱”就把所有组删掉重写。
User-agent组。*组无意覆盖特定爬虫。短例子(假设场景):文件里先写User-agent: *下Disallow: /search,又写User-agent: Googlebot下Allow: /search。如果你的意图是允许Googlebot抓取搜索页,那么分层保留是合理的;如果所有爬虫都不该抓,直接删掉Googlebot组里的允许规则,合并为一条禁止规则更清晰。
复查不是看文件“顺眼”,而是验证行为。可以用抓取测试工具分别以不同爬虫身份请求冲突路径,观察返回的是允许还是禁止。同时检查:
如果复查发现禁止规则挡住了CSS、JS或重要内页,应回到处理步骤调整,而不是靠提交站点地图弥补。站点地图不保证收录,它只是发现线索。
下一步:把当前robots.txt按“路径—爬虫—指令”整理成一张表,标出所有重复和冲突项,再决定每一项是合并还是分层保留。