问题出现得很突然,日志倒是留得挺全。接了 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。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189