迁移到新对象存储后,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 后要重新确认一次。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189