这个坑值得记一笔。为了降低回源,把 HTML 的缓存时间设成了 7 天,新文章发布三天后蜘蛛抓到的首页还是旧版本,列表里根本没有新链接。

刚开始盯着「缓存键不含登录态,编辑看到的也是旧版本」,折腾了半个多小时,排掉了。

这类报错背后常见的原因有几处,逐个排除就行。首页和列表页被当成静态资源长时间缓存;发布时没有触发缓存刷新,边缘节点各自等到过期;sitemap 更新了但首页入口没变,蜘蛛没有跟进路径。

动手时先看首页的缓存状态

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

随后确认新文章是否出现在 HTML 里

curl -s https://www.example.com/ | grep -c '新文章标题'

再往下把 HTML 的 TTL 降到分钟级

location ~ \.(html|php)$ { add_header Cache-Control "public, max-age=300"; }

发布后主动刷新关键页面

curl -X PURGE https://www.example.com/; curl -X PURGE https://www.example.com/list/

改完先别撤,确认这几项。首页的 Age 头降到 5 分钟以内,新文章在发布后一小时内被抓取,回源量只上升了一成。

这里还有个坑。HTML 和静态资源的缓存策略要分开设,把首页缓存一周等于让蜘蛛永远慢半拍。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189