先把当时的情况摆出来。为了屏蔽带参数的排序页,robots 里写了 Disallow: /*?sort=price$。Google 上规则生效,百度却把整行当成字面路径,排序页照抓不误。
这类报错背后常见的原因有几处,逐个排除就行。百度对 $ 锚点的支持不完整,整行可能被判为无效规则。另一种情况是同组里还有一条更宽的 Disallow: /*?sort=,两条互相覆盖。
不容易想到的是,规则里的 * 与 ? 顺序写反,匹配到的路径和预期不同。还有一种情况,测试时只用了 Google 的 robots 测试工具,没在百度后台验证。
动手时先用真实 URL 验证规则是否命中
curl -s 'https://www.example.com/list?sort=price' -o /dev/null -w '%{http_code}\n'
然后把锚点规则换成路径前缀规则
Disallow: /list?sort=
接着在百度抓取诊断里核对 robots 结果
curl -A 'Baiduspider' -s https://www.example.com/robots.txt
剩下的就是清理同组里冲突的重复规则
grep -n 'sort=' robots.txt
恢复的判定其实很直接。改写后排序页在百度侧的抓取量三天内下降 92%,Google 侧行为没有变化,抓取统计里参数页条目同步减少。
这里还有个坑。各家对通配符的实现差异很大,凡是用到 $ 或复杂组合的规则,都要在目标搜索引擎自己的工具里验证一遍。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
