站点运营

站点运营:CDN 與缓存策略自查,別让蜘蛛拿到過期頁面

缓存能加速站点,也可能让蜘蛛拿到舊頁面、舊狀態碼。本文梳理 CDN 與頁面缓存的自查要点:缓存头是否合理、错誤狀態碼是否被缓存、缓存键是否過粗或過细、發布後刷新流程是否覆盖列表頁,並给出上线後的检查動作。

站点运营

站点运营:CDN 與缓存策略自查,別让蜘蛛拿到過期頁面

缓存是站点加速的常規手段,但它同时也是抓取环节里最容易出問题的部分。CDN、反向代理、頁面缓存插件、對象存储,只要有一层配置不当,蜘蛛或訪客就可能拿到几小时甚至几天前的頁面、错誤的狀態碼,或者一個本该登入後才可见的内容。這類問题往往不容易被察觉,因為你在浏览器里刷新一下看到的是新内容,而缓存节点上還留着舊版本。

缓存為什么會干扰抓取

搜尋引擎蜘蛛請求頁面时,看到的通常是缓存节点的响應,而不是源站。如果缓存层没有正确区分請求来源、没有透传源站返回的头部信息,就會出現几種典型情况:

  • 頁面已经更新,但缓存仍返回舊 HTML,蜘蛛判断内容未變化,减少後續訪問;
  • 源站返回 404 或 500,缓存层却用舊的 200 頁面兜底,形成软 404;
  • 带參數的地址被缓存成同一個键,不同内容互相覆盖;
  • 登入態、地区、語言等差异化内容被统一缓存,用戶看到错誤版本。

自查要点

1. 缓存头是否合理

检查源站返回的 Cache-ControlExpiresETagLast-Modified。HTML 文档不建议設定過長的强缓存,通常用較短的 max-age 配合协商缓存更稳妥;图片、字体、JS/CSS 這類带指纹的静態资源可以设長一些。注意 CDN 自身的缓存規則可能覆盖源站头部,两邊要對照着看。

2. 狀態碼是否被缓存

404、410、301、5xx 是否進入了缓存,是常见盲区。一次源站抖動产生的 5xx 如果被缓存几十分钟,蜘蛛和訪客都會看到错誤頁面。建议在 CDN 侧明确哪些狀態碼不缓存,或只缓存极短時間。

3. 缓存键是否過粗或過细

键太粗,忽略 UA、語言、登入態,會把不同内容混在一起;键太细,把随机跟踪參數都算進去,命中率接近零,回源压力反而更大。可以先梳理站点實际需要的区分维度,再做取舍。

4. 刷新與预热流程

内容發布後是否自動刷新對應 URL,栏目頁、列表頁、首頁是否在刷新范围内,這些都需要在流程里寫清楚。只刷新詳情頁,列表頁仍顯示舊标题,蜘蛛顺着列表走就會拿到過期連結。

上线後的检查動作

  1. 用命令行請求目标 URL,观察响應头里的 Age、X-Cache、Cache-Control 等字段;
  2. 對比源站直连與经過 CDN 两條路径返回的 HTML 是否一致;
  3. 抽查已發布的新内容,確認列表頁、詳情頁、站点地图里的連結都是新地址;
  4. 把缓存異常纳入日常监控,比如 5xx 比例、回源率、命中率的突變;
  5. 改版或批量更新时,提前確認缓存刷新方式,避免舊頁面長期残留。
缓存的目标是减少重复回源,不是让内容“冻”在原處。凡是會影响抓取判断的头部和狀態碼,都值得單獨確認一次。

缓存策略没有统一答案,頁面類型、更新频率、服務器承载能力不同,取舍也不同。但只要把缓存头、狀態碼、缓存键和刷新流程這四項固定下来定期核對,就能减少“蜘蛛看到的是舊版本”這類問题带来的运营困扰。