识别 robots txt 文件配置冲突,核心是检查同一路径是否被多条规则同时允许和禁止,以及不同来源(主文件、子目录文件、站点地图、页面级 noindex)之间是否给出相反指令。判断结果取决于搜索引擎实际采用的匹配规则:多数主流搜索引擎按最长匹配路径优先,路径长度相同时才比较 Allow 和 Disallow 的先后。因此冲突往往不是语法错误,而是语义覆盖关系不清。
第一种是同一文件内规则打架,例如同时出现 Disallow: /article/ 和 Allow: /article/seo/,后者更长,通常允许抓取该子目录。第二种是 robots txt 与页面级指令打架,robots txt 允许抓取,但页面 <meta name="robots" content="noindex"> 阻止索引,两者目标不同,不算直接冲突,但容易让人误判。第三种是跨文件冲突,主站 robots txt 与子目录 robots txt 对同一路径给出不同限制,这种情况需要分别确认搜索引擎实际读取的是哪个文件。
把文件中所有 Allow 和 Disallow 行按路径前缀分组,同一前缀下并列写出。例如:
Disallow: /private/ 与 Allow: /private/public/:后者更长,通常允许抓取 public 子目录。Disallow: /*.pdf$ 与 Allow: /docs/:前者限制所有 PDF,后者允许 docs 目录,若 docs 下有 PDF,则两条规则对同一 URL 给出相反结果。Disallow: / 与 Allow: /:路径长度相同,按出现顺序判断,先出现的规则优先。分组后逐条问:这条规则是否覆盖了另一条规则的路径?覆盖关系明确时,冲突通常可解释;覆盖关系模糊时,才需要进一步测试。
robots txt 只控制抓取,不控制索引。如果页面已经被抓取,即使后来在 robots txt 中禁止,页面仍可能留在索引里。反过来,robots txt 允许抓取,页面级 noindex 仍可阻止索引。这两者不矛盾,但需要分清目标:想阻止抓取用 robots txt,想阻止索引用 noindex 或移除请求。站点地图列出某 URL 而 robots txt 禁止抓取该 URL,也不构成直接冲突,但会导致抓取预算浪费,应检查站点地图是否只包含允许抓取的 URL。
完成静态比对后,用搜索引擎官方提供的 robots txt 测试工具或 URL 检查工具输入具体 URL,观察返回结果是“允许”还是“被阻止”。测试时至少选三个 URL:一个被 Disallow 覆盖、一个被 Allow 覆盖、一个处于两者边界。如果测试结果与静态分析不一致,说明匹配规则理解有误,应回到路径分组重新比对。注意不同搜索引擎对通配符和结尾符的支持不完全一致,测试结果只代表该工具对应的搜索引擎。
从结果倒推,修改 robots txt 前应准备:当前线上文件全文、站点地图 URL 列表、需要保留抓取和需要阻止抓取的具体路径清单、以及页面级 robots meta 的抽样结果。任务分工上,规则编写者负责路径分组比对,测试者负责用官方工具验证边界 URL,验收者确认修改后没有误封重要目录。验收标准可以设为:所有目标 URL 的测试结果与预期一致,且站点地图中不包含被 Disallow 的 URL。下一步是选取一个边界 URL,用官方测试工具跑一次,把结果与路径分组表对照。