站点运营

站点运营: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 的缓存,栏目页和首页这类聚合页也一起处理。这样比事后一个个排查要省力得多。

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

观察一段时间再调

改完策略后不必急着下结论。看几天的日志,关注蜘蛛请求的状态码分布、回源比例以及抓取到的页面版本是否稳定。如果发现同一地址仍有多版本返回,就回到上面的清单逐条核对。缓存策略与抓取表现的关系,通常需要一段时间的记录才能看清。