这个坑值得记一笔。robots.txt 里同时写了 Disallow: /search 和 Allow: /search/label,两条前缀等长,百度抓 /search/label/SEO 时仍按屏蔽处理。

刚开始盯着「末尾少写斜杠,匹配范围比预期小」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。谷歌在等长时取 Allow,百度按出现顺序取第一条,Disallow 在前就赢了;Allow 规则写进了另一个 UA 分组,对目标蜘蛛不生效;CDN 缓存了旧版 robots,线上和源站不一致。

先看线上实际生效的规则

curl -s https://www.example.com/robots.txt | grep -n -A2 'User-agent'

接着把 Allow 写成更长更具体的前缀

Allow: /search/label/

然后分别按两家蜘蛛的 UA 取一次

curl -s -A 'Baiduspider' https://www.example.com/robots.txt

剩下的就是对目标地址做一次抓取测试

https://search.google.com/search-console/robots-testing-tool

当时还开着另一个排查窗口,两边日志对照着看才定位到。

别只看报错消失,验证要多做一步。规则调整后目标路径的抓取测试显示允许,日志里该路径开始出现 200 响应。

容易忽略的是,机器人的匹配按前缀长度优先,不是按行的先后顺序,调整行位置解决不了等长冲突。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189