事情本身不复杂,线索都在日志里。文章正文每天改 但模板层算 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 省的是带宽 一旦校验值算错 省下的就是蜘蛛对你内容的知情权。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189