事情本身不复杂,线索都在日志里。文章正文每天改 但模板层算 ETag 只取 post_modified_gmt 而内容更新走的是自定义字段 时间没变 蜘蛛带 If-None-Match 请求 源站一直回 304 新内容三周没有被抓到
第一反应是「CDN 把 304 当成可缓存 一直不给新体」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。ETag 基于修改时间生成 内容变了时间没变。还有一种是自定义字段更新不触发 post_modified 刷新。
还有一种情况,Last-Modified 也没有随内容更新。
第一件事是对比 ETag 与修改时间
curl -sI https://www.example.com/p/1 | grep -i -E 'etag|last-modified'
接着让 ETag 按正文哈希生成
etag $upstream_http_etag;
更新自定义字段时同步刷新修改时间
wp post update 1 --post_modified="2026-11-10 10:00:00"
强制带旧 ETag 验证返回 200
curl -s -H 'If-None-Match: "old"' https://www.example.com/p/1 | wc -c
怎么算真的好了,看的是同一批现象。内容更新后 ETag 变化 蜘蛛再请求拿到 200 正文为新版本 304 比例回到正常区间。
这里还有个坑。304 省的是带宽 一旦校验值算错 省下的就是蜘蛛对你内容的知情权。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
