识别 robots.txt 配置冲突,核心方法是把同一路径在“不同 User-agent 分组”“Allow 与 Disallow”“规则与站点地图/页面 meta 指令”之间的实际匹配结果列出来,逐条对照。只要同一 URL 被一条规则允许、又被另一条规则禁止,或者不同分组给出相反结论,就属于冲突。冲突不一定会报错,爬虫只会按自己的匹配逻辑选一条执行,所以必须人工核对。
多人协作时,冲突往往不是写错单词,而是规则之间互相覆盖。常见有三类。
Disallow: /search,又写 Allow: /search/new。后者更具体,通常用于放行子路径,但若路径前缀判断不一致,就可能出现“以为禁止、实际放行”。/api/,另一个分组允许 /api/。当某个爬虫同时匹配多个分组时,需要确认它实际采用哪一组,不能凭“写了就算”。noindex;或者 robots.txt 禁止抓取,页面却希望被索引。禁止抓取后,爬虫可能读不到页面上的 noindex,这会让移除意图落空。把当前 robots.txt 复制到表格里,至少列出四列:User-agent 分组、规则类型(Allow/Disallow)、路径、写这条规则的目的。目的这一列最关键,因为它能暴露“同一路径被两个人按不同意图处理”的情况。没有目的记录的规则,复查时无法判断该删还是该留。
主流实现通常遵循“最具体路径优先”的思路:路径越长、越具体的规则,越可能覆盖笼统规则。判断时可以这样核对:
这里要说明适用条件:不同搜索引擎对通配符 * 和结尾符 $ 的支持并不完全一致,所以涉及这两类符号的冲突,必须分别到对应搜索引擎的官方文档核查,不能只按一套逻辑下结论。
确认冲突后,不要直接删规则。先确认哪条规则代表当前真实意图,再决定保留哪条。假设某站点希望禁止抓取 /tmp/,但允许抓取 /tmp/public/,那么可以写成:
Disallow: /tmp/<br>Allow: /tmp/public/
这是一个假设示例,用于说明“更具体路径放行”的写法。实际是否生效,仍要按目标搜索引擎的匹配规则核对。处理时还要注意:robots.txt 的抓取限制不等于可靠的索引移除。禁止抓取只能阻止爬虫访问,已经收录的页面不会因此自动消失;如果目标是移除索引,应使用页面级 noindex 或相应的移除工具,并确认爬虫仍能读到该指令。
多人协作交付时,建议固定三项复查动作:
把规则和意图写在同一份变更记录里,比只留最终文件更有效。每条规则后面标注负责人、目的和复查日期,冲突时就能快速定位是谁、为什么加的。涉及 HTTPS、站点地图、页面级指令时,要分清各自作用:HTTPS 不保证安全无漏洞或排名;站点地图不保证收录;robots.txt 不保证索引移除。它们解决的是不同问题,不能互相替代。
下一步:拿当前 robots.txt 和一份待检查 URL 清单,按上面的四步做一次对照,把最长匹配结果和分组归属写进变更记录,再交付。