站点运营

站点运营:CDN 與缓存自查,別让舊頁面和错誤頁被缓存

開啟 CDN 和頁面缓存能降低源站压力,但也可能让蜘蛛讀到舊頁面、错誤頁或被缓存的跳轉。本文整理了缓存层常见的几類問题,並给出可执行的驗證步骤和日常维護习惯,帮你在享受缓存收益的同时,减少抓取端出現異常响應的概率。

站点运营

站点运营:CDN 與缓存自查,別让舊頁面和错誤頁被缓存

開啟 CDN 和頁面缓存之後,服務器压力通常會明顯下降,但缓存层也带来一個副作用:蜘蛛看到的頁面,可能不是你刚更新的那一版。缓存本身不是問题,問题在于缓存了什么、缓存多久、出错时返回什么。

缓存為什么會干扰抓取

搜尋引擎蜘蛛拿到的响應,往往经過 CDN 节点或反向代理,而不是直接打到源站。如果缓存层把舊的 HTML 版本、临时的错誤頁、甚至带登入態的頁面存了下来,蜘蛛就會按這份副本来理解你的站点。更麻烦的是,這類問题在浏览器里经常看不出来,因為你的浏览器可能命中了另一個节点,或者带上了不同的請求头。

常见缓存問题自查

  • 错誤狀態被缓存:源站短暂 500 或超时,CDN 返回错誤頁並缓存下来,後續正常請求也拿到错誤頁。
  • 404 頁被長缓存:某個地址先被刪除再恢复,但节点上還留着 404 响應。
  • 更新後仍是舊内容:文章已改,缓存過期時間却设得很長,蜘蛛连續几天讀到舊版本。
  • 缓存键設定不嚴:忽略了查询參數或語言 Cookie,不同參數返回同一份内容,或内容互相串。
  • 带狀態的頁面被缓存:登入後頁面、後台预览連結、測試參數頁進了公共缓存。
  • 跳轉被長期缓存:一次临时跳轉被当成長期規則,蜘蛛一直跟着舊路径走。
  • 节点之間不一致:不同地区节点返回的标题、正文甚至狀態碼不同。

怎么驗證缓存是否正常

  1. 用命令行請求首頁和一個内容頁,查看响應头里的缓存命中信息、缓存年龄和過期時間。
  2. 在内容更新後,立即請求同一地址,確認返回的是新内容而不是舊版本。
  3. 換几個不同地区的节点或工具再請求一次,對比标题、正文和狀態碼是否一致。
  4. 找几個已下线的地址,確認返回的是 404,而不是被缓存下来的舊頁面。
  5. 翻服務器日誌,關注蜘蛛的响應碼分布,如果 5xx 或 304 異常集中,可能和缓存层有關。

和蜘蛛抓取的關系

蜘蛛的抓取预算有限,如果它反复拿到错誤頁或未更新的内容,容易降低對该地址的訪問意愿。反過来,缓存用得好,可以顯著降低源站压力,让蜘蛛在高峰期也能稳定拿到 200 响應。關键是把缓存当成一层需要管理的服務,而不是開啟後就不管。

缓存的目标是让正常内容更快返回,而不是把異常狀態固定下来。凡是會變化的、带權限的、出错的响應,都值得單獨確認一次。

日常维護建议

  • 给 HTML 設定适中的缓存時間,内容更新时主動刷新相關路径。
  • 错誤狀態、重定向、带查询參數的结果,尽量不進入長期缓存。
  • 把 CDN 缓存規則寫進上线流程,改版或批量更新时一起检查。
  • 保留一份直连源站的驗證方式,方便区分是源站問题還是缓存問题。
  • 定期抽查若干頁面的缓存狀態,尤其是首頁、栏目頁和近期更新的内容頁。

缓存不是開啟之後就一劳永逸的功能,它需要配合發布节奏一起维護。把命中信息、過期時間和错誤响應纳入日常检查,蜘蛛看到的頁面才和你以為的一致。