先把当时的情况摆出来。站点接 CDN 后,sitemap.xml 的缓存时间沿用了静态资源的 6 小时,新文章发布后两小时内提交索引,蜘蛛读到的还是旧版文件,当天的新 URL 一条都没被抓。

排查方向其实有限,先把可能性排一排。CDN 把 xml 当成静态文件,按扩展名套用了长缓存。另一种情况是发布流程里没有对 sitemap 做主动刷新。

少数情况下是源站的 Cache-Control 由全局配置下发,没有单独例外。不容易想到的是,索引文件缓存住了,子文件更新也读不到。

第一件事是查看 sitemap 的缓存命中状态

curl -sI https://www.example.com/sitemap.xml | findstr /i "age cache-control x-cache"

接着确认新条目是否已在源站文件里

curl -s -H "Pragma: no-cache" https://www.example.com/sitemap.xml | findstr /c:"new-post-1024"

给 sitemap 单独设置短缓存

location = /sitemap.xml { add_header Cache-Control "max-age=300"; }

发布后主动刷新 CDN

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

怎么算真的好了,看的是同一批现象。缓存降到 5 分钟后,发布当天的 URL 在两小时内被抓,日志里新文请求不再缺失。

容易忽略的是,sitemap 要按动态文件对待,缓存时间比发布频率还长,提交多少次都是旧内容。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189