先看现象。站点把规则全写进一份 robots.txt,内容有三十多 KB,最后几条 Disallow 怎么改都不生效,删掉前面一半规则后立刻恢复正常。
真正麻烦的地方在于,几个原因的现象几乎一样。各引擎只读取文件前 500KB,超出部分直接忽略。另一种情况是规则条目太多,解析器在行数上限处截断。
还有一种情况,文件里夹杂大量注释和空行,把有效规则推到了尾部。
另外,多条规则互相覆盖,最后一条并不是最终生效的那条。
动手时先看文件体积和行数
wc -c robots.txt; wc -l robots.txt
然后确认末尾规则是否在读取范围内
curl -s https://www.example.com/robots.txt | tail -5
随后合并重复规则并删掉注释
grep -v '^#' robots.txt | awk 'NF' > robots.clean
末了按目录拆分成精简规则
User-agent: *
Disallow: /tmp/
Disallow: /search/
恢复的判定其实很直接。精简后的文件不到 2KB,末尾规则在抓取测试里全部生效,误抓的目录当天停止被访问。
容易忽略的是,规则不是越多越好,条目堆到几千行时,先做合并比继续往尾部追加更有效。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
