事情本身不复杂,线索都在日志里。静态文件全放对象存储,robots.txt 上传时漏了。桶的 404 兜底指向首页副本并返回 200,蜘蛛读到的规则里全是 HTML,等于没有规则,页面同时被当成软 404。

第一反应是「CDN 缓存了那份 HTML 兜底,改了文件也不刷新」,验证下来不成立。

这类报错背后常见的原因有几处,逐个排除就行。存储桶开了静态网站托管,404 兜底返回 200 的首页。另一种情况是上传脚本只同步 html 和图片,根目录文本不在白名单。

不容易想到的是,巡检只检查状态码 200,误以为文件正常。

第一件事是看状态码与内容类型

curl -sI https://www.example.com/robots.txt

然后确认返回体是不是 HTML

curl -s https://www.example.com/robots.txt | head -5

上传正确文件并指定纯文本类型

aws s3 cp robots.txt s3://bucket/robots.txt --content-type text/plain

刷

新

改完先别撤,确认这几项。替换后 robots 返回 text/plain 且首行是 User-agent,巡检脚本加了内容校验,软 404 提示同时消失。

这里还有个坑。软 404 最坑的地方是状态码永远是 200,巡检必须校验内容类型和前几个字节。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189