站点运营

站点运营:缓存策略自查,別让過期頁面反复返给蜘蛛

頁面更新後蜘蛛仍抓到舊内容,很多时候不是抓取問题,而是缓存层没有及时刷新。本文從浏览器缓存、CDN、反向代理、應用缓存和對象缓存几個层面,梳理一份可执行的缓存自查清單,帮助站点运营者减少舊頁面反复返回的情况。

站点运营

站点运营:缓存策略自查,別让過期頁面反复返给蜘蛛

做站点运营时,常會遇到一種情况:後台已经更新了标题或正文,自己刷新也能看到新内容,但搜尋蜘蛛抓到的還是舊版本,或者不同地区訪客看到的頁面不一致。這類問题不一定出在抓取或索引环节,很多时候是缓存层没有及时失效。

缓存的目的本来是减少服務器压力、加快訪問速度,配置合理對抓取和体驗都有帮助。但缓存策略如果不分清頁面類型和更新频率,就可能把過期内容反复返回给蜘蛛和訪客。下面從几個常见缓存层做一次自查。

先分清缓存出現在哪些位置

排查时不要只盯着一個地方,同一份頁面可能经過多层缓存:

  • 浏览器缓存:通過 Cache-Control、Expires 等响應头控制,影响訪客本地复用舊文件。
  • CDN 缓存:邊缘节点缓存 HTML、图片、JS、CSS,命中後不會回源。
  • 反向代理或網關缓存:Nginx、Varnish 等层缓存整頁或接口结果。
  • 應用层頁面缓存:CMS 或框架把渲染结果寫入文件或内存。
  • 對象缓存與資料库查询缓存:缓存資料片段,更新逻辑遗漏时會輸出舊資料。

如果更新後蜘蛛仍看到舊頁面,可以按“浏览器 → CDN → 反向代理 → 應用 → 資料”的顺序逐层排查,而不是直接怀疑抓取。

更新後要检查缓存是否真正失效

内容更新不只是儲存文章,還需要触發對應缓存刷新。常见疏漏包括:

  1. 只清了首頁缓存,栏目頁和詳情頁仍保留舊列表。
  2. CDN 刷新只提交了 URL,但带參數地址或移動端地址没有覆盖。
  3. 對象缓存键没有随内容版本變化,更新後仍讀取舊資料。
  4. 浏览器缓存時間設定過長,訪客和蜘蛛長時間拿到舊文件。
  5. 多台服務器之間缓存不一致,回源命中不同节点。

比較稳妥的做法是:為内容更新建立固定的刷新流程,明确哪些地址需要刷新、由谁执行、多久驗證一次。對于更新频繁的栏目,可以缩短缓存時間;對于長期不變的静態资源,可以設定較長缓存並配合文件名版本号。

缓存响應头自查要点

用 curl 或浏览器開發者工具查看响應头,重点關注以下字段:

  • Cache-Control:是否有 max-age、s-maxage、no-cache、private 等指令,是否與頁面性质匹配。
  • Age:CDN 或代理返回的 Age 值可以判断缓存已存活多久。
  • Expires:是否仍在用舊式過期時間,和 Cache-Control 是否冲突。
  • ETag / Last-Modified:协商缓存是否可用,更新後是否變化。
  • Vary:是否按 User-Agent、Accept-Encoding 等区分缓存,避免把移動端和桌面端混在一起。

如果 HTML 頁面設定了很長的强缓存,又缺少版本化更新机制,蜘蛛和訪客都可能反复看到舊内容。對资讯、商品、活動頁這類更新频繁的頁面,通常更适合較短的缓存時間,或者使用协商缓存。

驗證时要注意方法和邊界

驗證缓存是否刷新,不能只看自己浏览器的一次刷新。可以尝试:

  • 用不同網絡或不同地区节点訪問,观察返回内容是否一致。
  • 用 curl 带上缓存控制头和不带头分別請求,比較响應。
  • 查看 CDN 日誌或回源日誌,確認請求是否真正到達源站。
  • 對更新後的 URL 做一次强制刷新,再等待片刻复查。

也不建议為了“保證新鲜”而全站關閉缓存。缓存全部關掉後,服務器压力會明顯上升,响應變慢反而可能影响抓取效率。更合理的做法是按頁面類型分級:静態资源長缓存加版本号,列表頁和詳情頁短缓存,後台和登入態頁面不缓存。

缓存不是越少越好,而是要让该新的内容及时更新,该省的压力繼續省下来。

把缓存策略纳入日常站点运营检查,和 robots、sitemap、内部連結一样定期看一眼,能减少很多“明明更新了却像没更新”的誤會。每次改版、換服務器或接 CDN 之後,也建议重新核對一遍缓存規則。