现场是这样的。从 WordPress 迁到静态生成,sitemap 是构建时产出的,之后新增了三百篇文章,线上那份还是三个月前的版本。

排查方向其实有限,先把可能性排一排。发布流程没有触发重新构建,文件停在旧版本;构建产物被 CDN 长期缓存,回源也不刷新;新文章有页面但不在任何索引文件里。

第一件事是比对文件时间与最新发布时间

curl -sI https://www.example.com/sitemap.xml | grep -i last-modified

随后在发布流水线里加生成步骤

npm run build && ls -l dist/sitemap.xml

构建后刷新 CDN

curl -X PURGE https://www.example.com/sitemap.xml

末了核对条数变化

curl -s https://www.example.com/sitemap.xml | grep -c '<loc>'

白天有业务在跑,能验证的部分都压到了晚上做。

当时还开着另一个排查窗口,两边日志对照着看才定位到。

同一份数据我导出了两份,一份留底,一份拿来试。

恢复的判定其实很直接。last-modified 与最近一次发布时间一致,条数增加三百,GSC 读取数与构建产物相同。

提醒一点。静态站的 sitemap 属于构建产物,要跟代码一起发版,不能靠手工上传。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189