搜尋抓取

CDN 缓存與蜘蛛抓取:蜘蛛看到的頁面從哪来

站点在源站前挂 CDN 或反向代理後,蜘蛛抓取时未必回源,可能讀到缓存副本、過期頁面甚至被缓存下来的错誤响應。缓存 TTL、回源策略和清理节奏,都會影响蜘蛛對頁面的判断。本文從抓取路径出發,梳理缓存层常见的影响,並给出用响應头和日誌自查的方法。

搜尋抓取

CDN 缓存與蜘蛛抓取:蜘蛛看到的頁面從哪来

很多站点在源站前面挂了 CDN 或反向代理,蜘蛛發起的請求,未必每次都落到源站。它拿到的可能是缓存里的副本、可能是回源後的最新内容,也可能是一個被缓存下来的错誤頁。對搜尋蜘蛛来说,它只按响應结果處理頁面;對运营来说,需要知道蜘蛛到底看到了什么。

缓存命中时,蜘蛛讀到的是哪一份

CDN 的工作方式不复杂:先看本地有没有可用的缓存副本,命中就直接返回,未命中或過期就回源取一次,再按規則决定要不要缓存。問题在于,蜘蛛的抓取节奏和你的發布节奏、缓存過期节奏往往不同步。頁面已经更新,但 CDN 上還是舊副本;或者缓存刚好過期,蜘蛛回源时又碰上源站响應慢。

這些情况不一定會让抓取失敗,但會影响蜘蛛對頁面的判断:标题、正文、内鏈、甚至狀態碼,都可能是缓存层给出的。

抓取路径上常见的几類缓存問题

  • 内容更新延迟:源站已發布新版本,CDN 仍按 TTL 返回舊頁面,蜘蛛短期内讀到的是舊内容。
  • 错誤頁被缓存:源站短暂 5xx 或超时,CDN 把错誤响應缓存下来,蜘蛛反复拿到同一個失敗结果。
  • URL 變体各自缓存:带跟踪參數、大小寫或斜杠不同的地址各存一份,蜘蛛可能把同一内容当成多個頁面。
  • 個性化内容混入:缓存了带登入態、地区信息或推荐模块的 HTML,蜘蛛看到的版本與普通訪客不一致。
  • 静態资源與 HTML 策略混淆:图片、CSS 可以長缓存,HTML 若也设很長的 TTL,更新就很难及时被蜘蛛感知。

让缓存层和抓取节奏對齐

  1. 区分资源類型設定缓存策略。静態资源可以長缓存並加指纹;HTML 通常需要更短的 TTL,或使用可协商的缓存方式。
  2. 把清缓存纳入發布流程。發布完成後主動刷新相關 URL 的缓存,而不是等 TTL 自然過期。
  3. 確認错誤狀態不會被長期缓存。检查 CDN 對 4xx、5xx 的缓存規則,避免蜘蛛被缓存下来的失敗响應挡住。
  4. 检查回源請求头。源站可以根據 User-Agent 或来源标识识別蜘蛛,但不要在缓存层做過于個性化的輸出,否則蜘蛛和用戶看到的不一致。
  5. robots.txt 和 X-Robots-Tag 別只放在源站。如果缓存层返回了舊头部,蜘蛛可能按舊規則處理整個目錄。

缓存之外,服務器稳定性仍是底座

缓存命中率高时,源站压力小,蜘蛛抓取更顺;但缓存一旦集中過期,回源請求會短时叠加。如果源站没有余量,超时和 5xx 就會出現,蜘蛛可能降低抓取频率。對抓取路径来说,稳定的响應比短暂的极速更重要。必要时可以预热關键頁面,或把 TTL 打散,避免同一時間大批 URL 一起回源。

用响應头和日誌做一次自查

  • 用带蜘蛛 User-Agent 的請求訪問几個重要 URL,观察 Age、Cache-Control、X-Cache 等响應头,判断是命中還是回源。
  • 對比同一 URL 在源站和 CDN 节点返回的正文,確認是否一致。
  • 把 CDN 回源日誌與蜘蛛抓取日誌按時間對照,看抓取高峰是否经常撞上回源高峰。
蜘蛛看到的頁面,取决于你的缓存策略。把缓存层当成抓取路径的一部分来管理,比事後猜测為什么蜘蛛没更新更有效。