站点运营

站点运营:CDN 與缓存策略自查,把新舊内容的缓存規則理清楚

缓存配置决定了蜘蛛和用戶在不同時間、不同节点上看到的是哪一版頁面。本文梳理浏览器缓存、CDN 缓存與源站缓存的分工,给出 HTML 與静態资源的常见設定思路、發布後的刷新與驗證動作,以及容易被忽略的缓存坑,帮助站点在新内容上线後及时可见、舊内容不被错誤滞留。

站点运营

站点运营:CDN 與缓存策略自查,把新舊内容的缓存規則理清楚

缓存為什么也是站点运营的事

缓存本身不改變内容质量,但它决定了蜘蛛和用戶在不同時間、不同节点上看到的是哪一版頁面。常见的情况是:編輯在後台改好了标题和正文,本地刷新也對,但搜尋引擎抓到的仍是几小时前的舊版本;或者反過来,一個临时的错誤頁面被缓存住,長時間挂在搜尋结果里。這些問题往往不是内容問题,而是缓存規則没理清。

做缓存自查的目标很简單:新内容尽快可见,舊内容按预期登出,不该缓存的頁面绝不缓存。

先分清三层缓存

浏览器缓存

由 Cache-Control、Expires、ETag 等响應头控制,影响回訪用戶和部分爬虫的重复抓取行為。HTML 通常建议短缓存或协商缓存,静態资源可以長缓存。

CDN / 反向代理缓存

缓存的是节点上的副本,通常關注 缓存键(URL、查询參數、Host、Accept-Encoding、UA 等)和 TTL。缓存键設定過粗,會把不同版本的頁面混在一起;設定過细,命中率又會掉下来。

源站應用层缓存

頁面片段、資料库查询、對象缓存等。這层出問题时的表現是:CDN 已经刷新了,但回源拿到的還是舊内容。

常见配置思路

  • HTML 頁面:設定較短的 TTL,或使用协商缓存,让内容變更後能較快生效;首頁、栏目頁、詳情頁可以按更新频率区別對待。
  • CSS、JS、字体、图片:文件名带指纹(hash 或版本号)时可以設定長缓存,改版时靠文件名變化自動失效。
  • 接口與動態請求:明确标注不可缓存,避免把用戶相關資料缓存到公共节点。
  • 错誤狀態碼:404、5xx 頁面不要長缓存,否則一次抖動會持續影响抓取。
  • robots.txt 與 sitemap:建议短缓存甚至不缓存,避免規則更新後蜘蛛仍在讀舊文件。

發布新内容後的自查動作

  1. 確認發布流程里包含缓存刷新(purge)這一步,而不是靠等 TTL 自然過期。
  2. 用 curl -I 或浏览器開發者工具查看响應头,重点看 Cache-Control、Age、X-Cache 等字段,判断命中的是节点副本還是回源结果。
  3. 換几個不同地区的解析节点抽查同一 URL,確認各节点返回内容一致。
  4. 检查首頁、栏目頁、sitemap 是否同步更新,避免只剩詳情頁是新的。
  5. 记錄一次刷新到生效的大致耗时,作為後續运营的參考。

几個容易踩的坑

  • 移動端與桌面端共用一份缓存:如果站点按 UA 輸出不同模板,缓存键里必须体現這一点,否則會串版。
  • 带登入態的頁面被缓存:公共节点缓存了個人中心之類的頁面,既有安全問题,也會让蜘蛛抓到不该抓的内容。
  • 301 和 404 被長期缓存:URL 迁移或頁面恢复後,节点仍返回舊狀態,看起来像“改了没用”。
  • 回滚时只回滚代碼,忘了刷新缓存:结果新舊版本混在一起,排查起来很費時間。
  • CDN 與源站压缩不一致:開啟压缩後要確認缓存键包含编碼维度,避免返回乱碼或解压失敗。
缓存自查不需要一次做到完美,先把首頁、栏目頁、sitemap、robots.txt 這几個關键位置的規則寫清楚,收益通常最直接。

一份可执行的检查清單

  1. 列出站点主要頁面類型,逐類标注期望的缓存时長與刷新方式。
  2. 核對静態资源是否带指纹、是否長缓存。
  3. 確認發布流程中缓存刷新是固定動作。
  4. 抽查三類 URL:刚發布的詳情頁、刚修改的栏目頁、近期下线的舊頁。
  5. 记錄一次異常情况的處理過程,形成文档。

把缓存当成内容發布流程的一部分来管,蜘蛛看到的版本和用戶看到的版本才不會長期打架。