站点运营

站点运营:缓存自查,別让更新過的内容還停在舊版本

缓存能让頁面打開更快、减少回源請求,但設定和發布流程没對齐时,就會出現内容已经改過、訪客和蜘蛛看到的還是舊版本。這篇文章把浏览器缓存、CDN 缓存和應用层頁面缓存分開讲,给出一份可落地的自查清單、發布更新时的清理顺序和响應头驗證方法。

站点运营

站点运营:缓存自查,別让更新過的内容還停在舊版本

很多站点都遇到過這種情况:後台明明改了标题、換了配图,前台刷新還是舊内容,多点几次、換個浏览器又正常了。這通常不是發布失敗,而是缓存没有跟着更新。缓存本身是好東西,它让頁面打開更快、回源請求更少,問题是缓存时長和發布流程没有對齐,導致新内容在一段時間里被舊版本挡住。

缓存到底有几层

排查之前先分清對象。常见的缓存至少有三层,刷新頁面只能影响其中一部分。

  • 浏览器缓存:存在訪客本地,由 Cache-Control、Expires 等响應头控制。你自己刷新能看到新内容,別的訪客未必。
  • CDN 或反向代理缓存:存在邊缘节点上,命中之後可能很久不回源。蜘蛛從不同地区抓取时,拿到的也可能是节点上的舊副本。
  • 應用层頁面缓存:由 CMS 插件或框架生成静態 HTML,後台更新了内容但没清理缓存,頁面就一直是舊文件。

自查清單

  1. 打開几個更新频繁的頁面,查看响應头里的 Cache-Control,確認 HTML 的 max-age 是否设得過長。
  2. 带版本号或文件指纹的 JS、CSS、图片可以設定長期强缓存,HTML 文档不适合照搬這套規則。
  3. 检查 CDN 的缓存規則是否按路径区分,是否把整站 HTML 都缓存了。
  4. 確認發布内容後有没有触發缓存刷新,是自動的還是需要人工操作。
  5. 後台的「清除缓存」按钮是否有人负责按,是否寫進了發布流程。
  6. 缓存過期時間是否和栏目更新频率匹配,日报類栏目和一年不動一次的說明頁不该用同一套規則。
  7. 測試环境與生产环境的缓存是否串味,避免測試内容出現在线上。
缓存問题很少是「设错了某一個值」,更多是没人知道内容更新後该清哪一层。

發布更新的建议顺序

顺序對了可以省掉很多重复刷新:

  1. 在後台儲存並發布内容;
  2. 清理應用层頁面缓存;
  3. 刷新 CDN 上對應 URL 的缓存,量大时按目錄刷新;
  4. 用無痕窗口或命令行確認线上返回的是新内容;
  5. 检查地图文件中的最後修改時間是否同步更新。

怎么驗證是否命中舊缓存

看响應头最直接:用 curl -I 加上頁面地址,重点看 Cache-Control、Age、X-Cache 這類字段。Age 數值很大,說明這份内容在缓存里待了很久;X-Cache 顯示 HIT,說明来自节点而不是源站。多节点的情况下,多請求几次或換網絡环境再测,结果可能不一样。

哪些内容不适合長缓存

  • 登入後的個人頁面、购物车、訂單頁;
  • 带用戶身份或地域參數的頁面;
  • 站内搜尋结果頁;
  • 已经确定要下线的舊内容,缓存會让它繼續被訪問到。

把這些頁面單獨排除,其余内容再利用缓存提速,才是比較稳的做法。缓存不需要關掉,但需要分层管理,並把「更新後能立刻看到」当成發布流程里的一個固定步骤。