sitemap 每天凌晨重新生成,CDN 对 xml 套了 7 天缓存。新文章发布三天后 GSC 里还是旧列表,重新提交也没变化,而源站文件的修改时间早就是新的。

一开始怀疑是「生成脚本没有调用刷新接口」,查了一圈,方向不对。

排查方向其实有限,先把可能性排一排。CDN 对 .xml 套用了和图片一样的缓存策略。少数情况下是回源请求带 If-Modified-Since,边缘直接返回缓存。

不容易想到的是,索引与子文件缓存时间不一致,读到的列表一半新一半旧。

动手时先看响应头里的缓存命中情况

curl -sI https://www.example.com/sitemap.xml | grep -i -E 'age|cache'

强制回源对比条目数

curl -s -H 'Cache-Control: no-cache' https://www.example.com/sitemap.xml | grep -c '<loc>'

给 sitemap 单独配短缓存

location ~* sitemap.*\.xml$ { add_header Cache-Control 'public, max-age=600'; }

生

成

那几天正好在做别的变更,先把时间线对齐才敢动手。

改完先别撤,确认这几项。改成十分钟缓存并在生成后主动刷新,新文章当天就能出现在 sitemap 里,GSC 的读取时间同步提前。

补一句。sitemap 的缓存时间应该按分钟算,别和静态资源共用一套规则。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189