先看现象。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>[^<]*'
隔了一天再看,现象没变,说明不是偶发。
那几天正好在做别的变更,先把时间线对齐才敢动手。
怎么算真的好了,看的是同一批现象。发布后一分钟内边缘返回新标题,索引里的标题在下一轮抓取后更新。
补一句。异步刷新对用户体验友好,对蜘蛛不友好,内容更新后主动清一次缓存最省事。这类问题最好一次改到位,反复小改反而容易把原因搅混。
