识别 robots.txt 规则冲突,核心方法是把同一路径可能命中的多条规则全部找出来,比较它们的匹配长度、通配符位置和允许/禁止方向。如果一条规则明确允许而另一条明确禁止,且两条规则都匹配同一 URL,就要按“更具体规则优先”的原则判断实际生效结果。冲突往往不是整个文件报错,而是某几个目录或参数被一条短规则意外覆盖。
不要只看 robots.txt 的文本顺序。先把每个 User-agent 分组拆开,再对每条 Allow 和 Disallow 记录以下信息:路径模式、是否含 *、是否以 $ 结尾、属于哪个爬虫分组。冲突通常出现在三种情况:同一分组里 Allow 与 Disallow 指向同一路径;通配符让一条短规则覆盖了更长的目录;多个 User-agent 分组对同一爬虫的匹配范围重叠。
* 和 $ 的规则,它们是冲突高发点。假设文件里有这样两条规则(仅为示例,不是真实站点):
Disallow: /cgi-bin/<br>Allow: /cgi-bin/public/
对于 URL /cgi-bin/public/a.html,两条规则都匹配。判断依据是匹配到的路径长度:/cgi-bin/public/ 比 /cgi-bin/ 更长,因此允许规则生效。如果两条规则匹配长度完全相同,一条 Allow 一条 Disallow,则应视为方向冲突,需要人工决定保留哪一条,不能依赖书写顺序猜测。
通配符会改变匹配长度。例如 Disallow: /*.pdf$ 与 Allow: /docs/ 同时存在时,前者匹配所有以 .pdf 结尾的 URL,后者只匹配 /docs/ 目录。对于 /docs/manual.pdf,两条都命中,但 /*.pdf$ 的模式更具体,禁止规则通常优先。要验证这一点,应把目标 URL 分别代入每条模式,记录实际匹配的字符数,而不是凭感觉判断。
准备一组代表性 URL,覆盖首页、栏目页、带参数页、静态资源和被屏蔽目录下的子路径。对每个 URL 执行以下检查:
验证时要把“抓取限制”和“索引移除”分开看。robots.txt 禁止抓取,不等于页面会从搜索结果中消失;已经收录的 URL 仍可能因外部链接或历史数据出现。若目标是移除索引,应使用对应的移除工具或页面级 noindex,而不是只改 robots.txt。站点地图也不保证收录,它只是提供发现线索。
每次新增或修改规则,都重新跑一遍上面的 URL 清单。重点复查三类记录:新加的通配符是否意外覆盖了原本允许的目录;删除某条 Allow 后是否让更短的 Disallow 接管;针对不同爬虫的分组是否出现同一路径方向相反。把每次变更前后的匹配结果记下来,比只保存 robots.txt 文本更容易发现回归。
如果冲突涉及具体搜索引擎的支持差异,应分别核对该搜索引擎的官方文档,因为不同实现对通配符、规则优先级和分组合并的处理并不完全一致。不要假设一个引擎的生效结果可以套用到另一个引擎。
下一步:拿你当前 robots.txt 里匹配长度最接近的一对 Allow/Disallow,用真实 URL 代入计算匹配字符数,确认哪条实际生效,再决定是否合并或删除其中一条。