先看现象。CDN 开了 stale-while-revalidate,蜘蛛在回源刷新前拿到的都是上一版页面,改完标题三天后索引里还是旧标题。

排查方向其实有限,先把可能性排一排。stale 窗口设得太长,蜘蛛总在旧副本上抓。另一种情况是回源刷新是异步的,蜘蛛请求不会触发同步更新。

还有一种情况,刷新请求来自蜘蛛 UA,被当成低频流量。

另外,标题在 HTML 头部,整页缓存时一起被带旧。

第一件事是确认响应的缓存状态

curl -sI https://www.example.com/post/1024 | grep -iE 'age|x-cache'

缩短 stale 窗口

add_header Cache-Control "max-age=60, stale-while-revalidate=30";

发布后主动刷新一次

curl -X PURGE https://www.example.com/post/1024

复验标题版本

curl -s https://www.example.com/post/1024 | grep -o '<title>[^<]*'

隔了一天再看,现象没变,说明不是偶发。

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

怎么算真的好了,看的是同一批现象。发布后一分钟内边缘返回新标题,索引里的标题在下一轮抓取后更新。

补一句。异步刷新对用户体验友好,对蜘蛛不友好,内容更新后主动清一次缓存最省事。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189