搜索抓取

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 回源日志与蜘蛛抓取日志按时间对照,看抓取高峰是否经常撞上回源高峰。
蜘蛛看到的页面,取决于你的缓存策略。把缓存层当成抓取路径的一部分来管理,比事后猜测为什么蜘蛛没更新更有效。