问题出现得很突然,日志倒是留得挺全。接了 prerender.io 做预渲染,文章改了标题后蜘蛛抓到的还是五天前的版本,用户刷新看到的是新的,两边内容不一致。
刚开始盯着「只在发布时清 CDN 缓存,没清预渲染层」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。预渲染结果按 URL 缓存,文章更新没有触发失效。还有一种是缓存 TTL 设成 7 天,期间所有改动都不可见。
少数情况下是预渲染服务用自己的爬虫,抓到的可能是更早的缓存。
先对比预渲染与真实页面
curl -s -A 'Googlebot' https://www.example.com/post/1 | grep -o '<title>[^<]*</title>'
手动清掉该地址的预渲染缓存
curl -X DELETE 'https://api.prerender.io/recache?url=https://www.example.com/post/1' -H 'X-Prerender-Token: TOKEN'
再往下把 TTL 降到 1 小时
curl -X PUT https://api.prerender.io/cache/ttl -d '{"ttl":3600}'
发布后自动触发重抓
add_filter('save_post', function($id){ wp_remote_get('https://api.prerender.io/recache?url='.get_permalink($id)); });
怎么算真的好了,看的是同一批现象。带 Googlebot UA 抓到的标题与用户看到的一致,日志里重抓请求在每次发布后都出现。
预渲染是给蜘蛛的另一份副本,两份内容不一致比不预渲染更危险,会被判 cloaking。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
