现场是这样的。站点切 https 时把 http 的 robots.txt 整体 301 到了 https 版本,Google 正常解析,百度抓取诊断里却提示 robots 读取失败,屏蔽规则等于没有。
中间走过弯路,把「robots 的 Content-Type 返回 text/html,被当成页面而不是纯文本」当成主因,改完现象没变。
排查方向其实有限,先把可能性排一排。百度对 robots 的 301 跟随有限制,跨协议跳转常被判读取失败;跳转链路里还叠加了 CDN 的 302,最终地址与提交的不一致;站点同时存在两份 robots,http 目录里那份是旧的。
上来先分别用两个 UA 请求确认跳转
curl -A 'Baiduspider' -sI http://www.example.com/robots.txt
再往下把 http 的 robots 改成直接返回 200 的纯文本
curl -s http://www.example.com/robots.txt | head -5
修正响应头里的类型
add_header Content-Type text/plain;
剩下的就是删掉残留的旧文件避免两份并存
find /var/www -name 'robots.txt' -ls
怎么算真的好了,看的是同一批现象。百度抓取诊断显示 robots 读取成功,屏蔽规则生效,之前被误抓的参数页请求量当天下降了一半。
robots 是最该保持单份、直出、200 的文件,任何跳转、鉴权、压缩上的花样都可能让某家蜘蛛读不到。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
