前天改了首页一句标语,后台明明已经是新文案,无痕窗口刷了十几次前台还是旧的。客服以为没保存成功,运营以为被回滚了,最后一对响应头才发现:页面缓存和 CDN 各自留了一份旧 HTML。WordPress 改完内容前台还是旧版,多半不是数据库没写上,而是某一层还在喂旧页。
先分清是哪一层在吐旧内容
别一上来就「清全站缓存」或重启机器。用无痕窗口打开出问题的 URL,F12 → Network,点开文档请求(通常是第一个 HTML),盯这几个响应头:
x-cache/cf-cache-status/age:边缘或反向代理是不是 HITcache-control:是public, max-age=...还是no-store/privateset-cookie:登录态有没有被错误地跟可缓存 HTML 绑在一起
把「浏览器本地 → CDN 边缘 → 源站页面缓存 → 对象缓存」四层分开想。每一层清法不同,混着清又慢又容易把整站打冷。

浏览器:先排除「你自己的缓存」
同事说「我这边已经新了,你那边还旧」,优先怀疑本机缓存或扩展。
- 无痕/隐私窗口打开同一 URL,或换一台没开过该站的设备。
- 硬刷新(Ctrl/Cmd + Shift + R)。硬刷新变新、普通刷新仍旧,多半是浏览器或中间代理在缓存 HTML。
- 若站点挂了 Service Worker / PWA,在 Application 面板看导航请求是不是还被拦截。
只读头探测示例(不要带管理后台 Cookie 去乱刷生产接口):
bash
curl -sI 'https://example.com/' | egrep -i 'HTTP/|cache-control|x-cache|cf-cache|age|vary|set-cookie'
营销首页若故意边缘缓存,HIT 正常;但你刚改完且清过 CDN 后仍长期 HIT、且 age 很大,说明清理没落到这个 URL。
CDN:按 URL 定点 purge
很多外贸站前面挂了 Cloudflare 或其它 CDN。改标题、改首页模块后,边缘仍 HIT,访客看到的就是更早生成的那份 HTML。
建议顺序:
- 只 purge 变更相关的 URL(首页、该文 permalink、相关归档),先验证这几个变新。
- 再查规则:带
utm_的 URL 是否被当成不同缓存键,导致「有的链接新、有的旧」;查询串策略是否把预览参数也缓存进去了。 - 登录态、预览链接、
/wp-admin/、购物车/结账应旁路,不要和匿名首页共用同一份全页缓存。
全站 purge 可以救急,高峰期却容易把回源打满。能定点就定点。缓存键和排除规则怎么对齐,可以对照 WordPress CDN 与缓存加速要点。
源站页面缓存:发布钩子有没有接到
CDN 清干净了,源站页面缓存插件仍可能继续吐旧 HTML。常见表现:直连源站 IP 也是旧文案,或 curl --resolve 到源站仍旧。
核对这几项:
- 发布/更新后,插件是否自动失效对应 URL;手动更新后是否还要在插件里清「此页」。
- 多语言、自定义文章类型、页面构建器(内容在 post meta)是否被「仅清文章 permalink」漏掉。
- 是否同时开了两套页面缓存,规则互相覆盖------你清了 A,B 还在。
生产环境慎用「清空全部对象 + 全部页面」的大按钮,除非你清楚流量和预热策略。优先清问题 URL,再抽查列表页、分类页是否还引用旧摘要。
对象缓存:HTML 新了,模块还旧
有时壳子新了,侧栏、菜单、相关文章还是旧的------更像 object cache / transient 锁住了查询结果或小部件输出。
- 用了 Redis/Memcached 时,低峰对对象缓存做有针对性的 flush(先确认面板清的是对象缓存,不是整站文件缓存)。
- 查自建 transient 是否把首页模块锁了很长过期时间,改内容后没删对应 key。
- 菜单、小工具、页面构建器全局模块常被单独缓存------清页面不等于清这些片段。
bash
# 有 WP-CLI 时,确认对象缓存后端(只读探活,按环境调整)
wp cache type
对象缓存异常时,也会出现「后台已新、接口偶发旧数据」,要和纯 HTML 边缘 HIT 分开看。
改完再收工的验收
- 无痕窗口打开变更 URL:文案/标题已是新版;再换一个带
utm_source=test的链接,避免只测一种缓存键。 curl -sI看问题 URL:清过后应出现 MISS/BYPASS 或更小的age;确认不是登录 Cookie 下的特例。- 直连源站与走 CDN 各看一次,避免「边缘新了、源站还旧」或反过来。
- 相关列表页、首页模块、菜单若引用了该内容,也抽查,防止片段缓存漏清。
前台还是旧版,很少是 WordPress 没保存,多数是某一层还在提供旧响应。按浏览器 → CDN 定点 → 源站页面缓存 → 对象缓存往下压,通常比重启整机更快,也少误伤高峰流量。