站点运营

站点运营:缓存與 CDN 自查,別让蜘蛛反复抓到舊頁面

缓存能让站点變快,也能让蜘蛛几天里反复拿到同一份舊内容。本文梳理發布後缓存未刷新、错誤頁被缓存、缓存键含動態參數等常见坑,並给出一份按顺序执行的缓存與 CDN 自查清單,帮你在改版和日常更新中减少抓取层面的誤會。

站点运营

站点运营:缓存與 CDN 自查,別让蜘蛛反复抓到舊頁面

缓存是站点运营里最不顯眼、也最容易出岔子的一环。它能让頁面變快,也能让蜘蛛在几天里反复拿到同一份舊内容:标题改了、價格換了、商品下架了,用戶看到的是新版,搜尋引擎拿到的却還是缓存层里的副本。這類問题不报错、不报警,只在抓取结果里慢慢顯形。

為什么缓存問题容易被漏掉

因為從浏览器里看不出来。运营人員在自己电脑上刷新,看到的是本地缓存或者已经刷過的 CDN 节点,很容易得出“已经更新了”的结论。而蜘蛛從另一個地区、另一個节点回源,得到的可能是几小时前甚至几天前的頁面。

更麻烦的是,缓存出問题时頁面往往仍然正常返回 200。狀態碼没错,内容却對不上,這種安静的错誤最难排查,也最容易被归因到別的地方去。

常见的几類缓存坑

  • 發布新内容後缓存未刷新:正文已经更新,缓存里還是舊版,蜘蛛抓到的标题和頁面實际内容不一致。
  • 缓存键包含了動態參數:同一篇文章按不同參數被缓存成多份,命中率下降,回源压力反而更大。
  • 把错誤頁也缓存了:短暂的 404 或 500 被缓存住,蜘蛛连續几天只能看到错誤頁。
  • 缓存了重定向規則:A 頁跳 B 頁的配置改過了,缓存里還留着舊跳轉,蜘蛛一直在绕路。
  • 回源失敗直接吐错誤碼:源站抖動时 CDN 未做兜底,蜘蛛會把這段異常记在抓取记錄里。

可以按顺序做的自查

  1. 先理清缓存层級:本地浏览器缓存、CDN 节点缓存、源站或應用层缓存各自管什么,谁负责刷新,出問题时先看哪一层。
  2. 检查 HTML 的缓存头設定。max-age 是否给得過長,是否把 HTML 和图片、CSS、JS 這類静態资源用了同一套策略。
  3. 確認缓存键的组成。带查询參數的頁面、带地区或设备区分的頁面,是否會各自生成一份缓存副本。
  4. 检查错誤頁是否被缓存。建议 404、500 這類响應設定較短的缓存時間或不缓存,避免異常狀態被固化。
  5. 用不同地区、不同 UA 的實际請求驗證,而不是只看自己浏览器里的刷新结果。有條件时對比响應头里的缓存命中标识。
  6. 检查回源失敗时的表現。源站短暂不可用时,返回的是缓存舊頁還是 5xx,這决定了蜘蛛看到的是内容還是故障。
  7. 把刷新動作寫進發布流程。内容更新、栏目調整、模板改版之後,明确由谁触發刷新、多久之内完成。

改版期間要格外留心

模板更換、URL 調整、站点迁移這些動作,常常同时改動缓存規則和跳轉規則。两者叠加,最容易出現“用戶看到新版、蜘蛛看到舊版加舊跳轉”的情况。改版上线後,建议挑几個代表性頁面,分別用浏览器和抓取工具實际請求一次,對比内容是否一致。

缓存不是设一次就完事的開關,而是需要跟着内容节奏一起维護的环节。發布越快、更新越频繁的站点,越需要把刷新当成流程的一部分。

小结

缓存本身没有對错,關键在是否與内容更新节奏對齐。把层級理清、把错誤頁排除在外、把刷新動作寫進發布流程,就能减少大量“明明改了却抓不到”的困惑。這類自查不需要复杂工具,需要的是一次次實际的請求驗證,以及不依赖本地浏览器刷新的习惯。