迁移到新对象存储后,robots.txt 的响应头变成 text/plain; charset=utf-8,内容正常但百度站长平台的抓取诊断一直显示 robots 为空,抓取频次从 3 档掉到 1 档。
一开始怀疑是「文件开头有 BOM,第一行 User-agent 读不到」,查了一圈,方向不对。
把日志和配置对完,能解释这个现象的基本就这几处。部分解析器只认 text/plain,带参数的类型被判成未知格式。也可能是对象存储默认加了 Content-Disposition,被当成下载文件。
少数情况下是CDN 对 .txt 返回 gzip 却没给 Content-Encoding。
上来先看完整响应头
curl -sI https://www.example.com/robots.txt
再往下在源站强制覆盖类型
location = /robots.txt { default_type text/plain; }
去掉 BOM 与多余头
sed -i '1s/^\xEF\xBB\xBF//' robots.txt
末了用百度 UA 复验内容
curl -s -A 'Baiduspider' https://www.example.com/robots.txt | head -3
我习惯把每一步的执行时间和结果记在一边,后面复盘省事。
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
别只看报错消失,验证要多做一步。响应头只剩 text/plain,抓取诊断能读到完整规则,抓取频次一周内回到 2 档以上。
补一句。robots 的 MIME 类型比内容更容易出问题,换存储或加 CDN 后要重新确认一次。这类问题最好一次改到位,反复小改反而容易把原因搅混。
