发布新文后 sitemap 里一直看不到新地址,源站文件已经更新,回源日志显示 CDN 三天没来取过,蜘蛛每天读的都是旧版本。
一开始怀疑是「sitemap 响应没带 Cache-Control,边缘用了默认策略」,查了一圈,方向不对。
把日志和配置对完,能解释这个现象的基本就这几处。CDN 按扩展名把 xml 归到静态资源,缓存 TTL 设成 72 小时。也可能是发布流程没有调用刷新接口,只有手动操作才会更新。
少数情况下是索引文件和子文件 TTL 不一致,子文件更新了索引还是旧的。
动手时先看 CDN 返回的缓存状态
curl -sI https://www.example.com/sitemap.xml | grep -iE 'age|cache'
然后对比源站与边缘的内容
curl -s https://www.example.com/sitemap.xml?t=1 | grep -c '<loc>'
给 sitemap 单独设短 TTL
location = /sitemap.xml { add_header Cache-Control 'max-age=300'; }
发布后自动刷新边缘缓存
curl -X POST https://api.cdn.example.com/purge -d '{"url":"https://www.example.com/sitemap.xml"}'
别只看报错消失,验证要多做一步。边缘 Age 降到 300 秒以内,新文章地址在十分钟内可从 CDN 取到,抓取记录同步出现新 URL。
容易忽略的是,sitemap 是动态文件,缓存策略要按内容更新频率单独配,别跟着图片走默认规则。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
