站点运营

站点运营:CDN 缓存與回源策略自查,別让缓存把更新内容鎖在舊副本

CDN 與反向代理缓存能省回源、提速訪問,但也容易让蜘蛛反复拿到舊副本。本文從缓存键、缓存时長、刷新流程、回源狀態碼和节点一致性几個方向,整理一份可落地的自查清單,並给出用响應头做快速驗證的方法。

站点运营

站点运营:CDN 缓存與回源策略自查,別让缓存把更新内容鎖在舊副本

缓存問题往往先在抓取上暴露

CDN 和反向代理缓存的初衷是减少回源、加快訪問。但對搜尋引擎蜘蛛来说,它拿到的响應並不一定来自你的源站。如果缓存键设計得過于宽松、過期時間設定得過長,或者發布新内容後没有及时刷新,蜘蛛就可能反复拿到同一份舊副本,誤以為頁面一直没有變化。這類問题在日常訪問中很难被察觉,因為普通用戶看到的也是缓存副本,打開速度還很快,没有人會去追問内容是不是最新的。

自查可以從這几個方向入手

1. 缓存键是否把不该合並的請求合並了

缓存键决定了哪些請求共享同一份缓存。合並得太多,就會把本该区分的頁面混在一起:

  • 是否忽略了移動端與桌面端的区分,把两套模板缓存成一份;
  • 是否忽略 Cookie 或登入態,把個性化頁面缓存成公共副本;
  • 是否把查询參數一律忽略,導致分頁、篩選頁共用同一份缓存;
  • 是否把不同語言、不同地区的版本合並到同一個键上。

2. 缓存时長與刷新机制

HTML 通常适合較短的缓存時間,带指纹的静態资源可以長缓存。重点检查:

  1. 首頁、列表頁等更新频繁的頁面,缓存時間是否偏長;
  2. 發布、更新、刪除内容後,是否有主動刷新或按目錄批量刷新的流程;
  3. 刷新只覆盖 CDN 邊缘,還是同时覆盖源站前面的代理缓存;
  4. 有没有可自助操作的刷新入口,還是只能等技術手動處理。

3. 回源請求與狀態碼

缓存节点回源时的行為,會直接影响蜘蛛對站点的判断。留意回源是否带上了正确的 Host、协议與路径;更要注意回源返回的 5xx、404 是否被缓存下来。被缓存的错誤响應會在一段時間内持續返回给蜘蛛,影响比源站短暂故障更大。

4. 多节点生效不一致

多节点、多机房的环境下,同一時間不同节点可能返回不同版本。如果規范化标簽、canonical、hreflang 恰好落在版本不一致的頁面上,蜘蛛拿到的信号就會互相矛盾,难以判断哪個才是主版本。

一個简單的检查方法

用命令行工具直接看响應头最省事:观察 AgeX-CacheCache-ControlVia 等字段,多次請求同一個 URL,確認命中情况與過期時間是否符合预期。發布新内容後隔几分钟再請求一次,看看返回的是不是新版。带查询參數、带移動端 UA、带不同語言头的請求各测一次,能較快發現缓存键的問题。

缓存不是一次性配置,而是一條需要跟着内容节奏持續维護的鏈路。

日常维護的几條建议

  • 把刷新動作寫進發布流程,而不是等出現問题再补救;
  • 不同類型的頁面使用不同缓存策略,不要全站一套參數;
  • 错誤响應設定較短缓存或不缓存,避免错誤狀態被放大;
  • 记錄每次策略調整的時間與原因,方便後續回溯;
  • 改動後观察日誌中的狀態碼分布與来源 IP,確認回源比例回到合理区間。

缓存的收益很明确,代價是鏈路變長、變量變多。定期做一遍這類自查,能减少用戶看到新版、蜘蛛看到舊版這種不對称情况,出問题时也少走一些弯路。