现场是这样的。一次线上故障用 git revert 回滚了发布分支,仓库里跟踪的 robots.txt 跟着回到三个月前的测试版,Disallow 里还留着 / 和 /staging/。两天后抓取量掉到 8%,才发现文件被覆盖。

中间走过弯路,把「发布流程不对 robots 做校验,改完直接推上去」当成主因,改完现象没变。

排查方向其实有限,先把可能性排一排。robots.txt 纳入版本管理且生产与测试共用同一份;回滚脚本按整个目录 checkout,没有排除配置文件;CDN 缓存了旧 robots,源站改回来还要等 TTL。

动手时先比对仓库与线上的差异

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

回滚时排除 robots 与 sitemap

git checkout HEAD~1 -- . ':(exclude)robots.txt'

然后加一条发布前校验

grep -q 'Disallow: /$' robots.txt && exit 1

等前面都确认过,再清掉 CDN 上的 robots 缓存

curl -X PURGE https://www.example.com/robots.txt

别只看报错消失,验证要多做一步。发布后 robots 与主干一致,抓取量在 48 小时内回到回滚前水平,流水线里的校验能拦住同类改动。

补一句。配置文件跟业务代码绑在一起发布,早晚会被回滚带走,分开管理比事后补救省事。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189