同一个地址既被目录级 Disallow 挡住,又被一条更具体的 Allow 放行,实际抓取结果和预期完全相反,调换顺序也不起作用。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
curl -s https://example.com/robots.txt # 最长匹配优先,长度相同时 Allow 胜出
规则按最长匹配优先,路径更长的那条生效;长度完全相同时 Allow 优先。按书写顺序去理解就会一直判错,调整行序解决不了问题。这一点先确认清楚,后面就不用反复试。
「robots.txt Allow 优先级」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
具体做法是,把放行规则写得比屏蔽规则更长更具体;避免出现两条长度完全相等的规则,否则判断会很乱;用测试工具输入真实地址验证最终命中哪条。
改完照着核一遍,测试工具显示目标地址为允许,命中的是那条更长的规则。
