站点运营

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

接入 CDN、開啟頁面缓存能明顯提速,但多一层缓存就多一层變量:同一個 URL 在不同時間、不同节点上可能返回不同版本。本文梳理缓存干扰抓取的常见情形,並给出一份可执行的自查清單,從用蜘蛛 UA 對比返回结果,到检查 HTML 缓存头、發布後主動刷新缓存、確認 CDN 安全規則没有把蜘蛛挡在门外。

站点运营

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

给站点接入 CDN、開啟頁面缓存,通常是提速最直接的办法。但對搜尋蜘蛛来说,多一层缓存就多一层變量:同一個 URL,在不同時間、不同节点上,可能返回不一样的内容。运营要做的,是让缓存對用戶和蜘蛛保持一致。

缓存為什么會干扰抓取

蜘蛛看到的頁面,是缓存节点返回给它的那一版。如果這一版和用戶看到的不一致,問题就来了:正文缺一段、價格是舊的、列表頁少了几條,甚至缓存里存着已经下线的頁面,而訪問记錄上仍是一個正常的 200。

更麻烦的是,不一致往往不是全局的。邊缘节点各自為政时,蜘蛛這次抓到 A 版,下次抓到 B 版,站内就出現了同一地址多個版本的情况,canonical 判断和内容识別都會受影响。

常见的問题点

  • HTML 被長時間缓存:把正文頁当静態资源缓存几天甚至更久,發布新内容後蜘蛛仍拿到舊版。
  • 缓存刷新滞後:内容更新了,但没有主動刷新缓存,只能等自然過期。
  • 按 UA 区分返回:给蜘蛛和给用戶返回不同版本,容易造成内容判断偏差。
  • 回源失敗返回空壳:源站異常时,CDN 返回一個 200 的空頁面,蜘蛛會当成正常内容。
  • 缓存带參數的 URL:把篩選、跟踪參數也缓存成獨立頁面,抓取面被放大。
  • CDN 侧的安全規則:把某些 UA 或高频請求直接拦掉,返回 403,蜘蛛自然吃閉门羹。
  • 多节点不一致:不同地区节点的缓存狀態不同,抓取结果會飘忽。

怎么看缓存狀態

多數 CDN 會在响應头里返回缓存狀態标记,比如命中、回源、已過期等。自查时把這些头和你請求的 URL 一起记下来,连續观察几天,就能看出哪些頁面長期命中舊版、哪些頁面根本没被缓存。這两個方向的處理方式不同:前者要缩短缓存時間或主動刷新,後者要检查缓存規則是否把某些路径排除掉了。

別忽略静態资源

图片、CSS、JS 這類文件缓存時間長一些通常没問题,但要注意文件名或版本号是否随内容變化。改了样式却沿用同一個文件地址,缓存里仍是舊文件,頁面呈現和蜘蛛讀到的结构就可能對不上。给静態资源加上版本标识,是成本很低的做法。

一次可执行的缓存自查

  1. 用搜尋蜘蛛的 UA 請求几個關键頁面,记錄返回内容和缓存狀態头。
  2. 再用普通浏览器請求同一地址,對比两次结果是否一致。
  3. 查看 HTML 响應的 Cache-Control 與 Expires,確認正文頁没有被设成長期强缓存。
  4. 發布新内容或修改舊内容後,立刻用蜘蛛 UA 再請求一次,看是否已经刷新。
  5. 換不同入口或节点請求同一地址,检查结果是否稳定。
  6. 確認 CDN 的安全與限速規則里,没有针對搜尋蜘蛛的拦截。
  7. 對照服務器日誌中的回源记錄,看蜘蛛請求是否真的打到了源站。

把刷新動作纳入發布流程

缓存問题很少是一次性修好的,它跟着發布节奏反复出現。比較省事的做法是在發布流程里固定一步:内容更新後主動刷新對應 URL 的缓存,栏目頁和首頁這類聚合頁也一起處理。這样比事後一個個排查要省力得多。

缓存的目标是让用戶更快看到正确内容,蜘蛛看到的也應该是同一版。任何“给蜘蛛單獨准备一份”的做法,都要先想清楚會不會带来新的不一致。

观察一段時間再調

改完策略後不必急着下结论。看几天的日誌,關注蜘蛛請求的狀態碼分布、回源比例以及抓取到的頁面版本是否稳定。如果發現同一地址仍有多版本返回,就回到上面的清單逐條核對。缓存策略與抓取表現的關系,通常需要一段時間的记錄才能看清。