站点运营

站点运营:缓存與 CDN 自查,別让蜘蛛一直拿到舊頁面

缓存和 CDN 能提升訪問速度,但配置不当會让搜尋引擎蜘蛛持續拿到舊版頁面。本文從缓存位置、自查方法、更新流程三個角度,整理一份站点运营可落地的缓存自查清單,帮助你把内容更新真正推到蜘蛛面前,减少因缓存不同步造成的誤判。

站点运营

站点运营:缓存與 CDN 自查,別让蜘蛛一直拿到舊頁面

缓存和 CDN 本来是為了让用戶打開更快、让源站少扛一点压力。但在站点运营里,它們也可能變成一個隐蔽的坑:你明明更新了标题、正文或栏目结构,搜尋引擎蜘蛛抓到的却還是几天前的版本。更麻烦的是,這種問题在浏览器里不一定看得出来,因為你自己訪問时可能命中了另一份缓存。

蜘蛛看到的頁面,可能和你看到的不一样

用戶訪問頁面时,通常會经過浏览器缓存、CDN 邊缘节点、反向代理缓存、應用层頁面缓存等多层结构。蜘蛛没有浏览器缓存,但它同样會经過 CDN 和反向代理。如果這些层缓存了 HTML,而缓存又没有及时刷新,蜘蛛拿到的就是舊頁面。

常见現象是:後台已经發布新内容,前台用無痕窗口也能看到,但蜘蛛抓取记錄里仍然顯示舊标题,或者抓取到的頁面大小和現在不一致。這时不要急着怀疑蜘蛛“不来”,先確認它拿到的是哪個版本。

缓存本身不是問题,缓存和内容更新不同步才是問题。

容易出問题的几個缓存位置

  • CDN 的 HTML 缓存:有些站点為了提速,把 HTML 也设成長時間缓存。静態资源可以這样做,HTML 要谨慎。
  • 反向代理缓存:Nginx 的 proxy_cache、Varnish 等如果規則寫得太宽,可能把登入態、不同參數、不同 UA 的請求混在一起返回。
  • 應用层頁面缓存:一些 CMS 或插件會生成静態 HTML 文件。更新内容後如果没有清缓存,源站返回的就已经是舊文件。
  • 浏览器缓存头:Cache-Control 和 Expires 設定過長,虽然主要影响用戶,但也會让排查时产生誤判。

自查方法:用不同身份請求同一個 URL

不要只看浏览器。可以用命令行或在线工具,分別模拟普通用戶和蜘蛛的 UA,观察响應头和正文版本。

  1. curl -I 查看响應头,重点看 Cache-Control、Age、X-Cache、CF-Cache-Status、X-Proxy-Cache 等字段。
  2. 用普通 UA 和搜尋引擎蜘蛛 UA 各請求一次,對比返回的 HTML 是否一致,尤其是标题和更新時間。
  3. 在 URL 後加一個随机查询參數,绕過 CDN 缓存,看源站真實返回的内容。
  4. 如果带參數和不带參數返回不同,說明缓存規則可能把參數当成了不同资源,或者源站對參數處理不一致。
  5. 把 CDN 返回的頁面大小與源站返回的頁面大小做對比,差异明顯时優先检查缓存。

需要提醒的是,不要用带随机參數的 URL 去判断蜘蛛看到的版本。蜘蛛抓取的是規范 URL,随机參數只能帮你確認源站内容。

把缓存刷新和内容更新排進同一個流程

與其事後排查,不如把缓存處理寫進日常更新流程。内容發布後,除了检查前台,還要確認缓存层已经刷新。

  • 更新重要頁面後,主動刷新 CDN 和反向代理缓存,不要只等過期時間。
  • HTML 的缓存時間可以短一些,或者使用 stale-while-revalidate 之類的策略,让蜘蛛和用戶都能較快拿到新版本。
  • 静態资源用文件名指纹或版本号,放心設定長缓存,不必每次全站刷新。
  • 更新站点地图中的 lastmod,让蜘蛛知道哪些頁面确實變了。
  • 观察抓取日誌里蜘蛛請求的狀態碼和响應大小,如果長時間不變,值得回查缓存。

別走到另一個极端

也有人因為担心缓存問题,干脆把全站缓存關掉。這样源站压力會變大,蜘蛛抓取时响應變慢,反而影响抓取效率。合理的做法是区分對待:图片、CSS、JS 等静態资源可以缓存久一点;HTML 和接口資料根據更新频率設定較短缓存,並保留主動刷新通道。

站点运营里的很多問题,並不是某個設定绝對错誤,而是它和内容更新节奏脱节了。缓存與 CDN 自查的意义,就是让蜘蛛每次来訪时,看到的都是你目前真正想让它看到的那一版。