给站点接入 CDN、开启页面缓存,通常是提速最直接的办法。但对搜索蜘蛛来说,多一层缓存就多一层变量:同一个 URL,在不同时间、不同节点上,可能返回不一样的内容。运营要做的,是让缓存对用户和蜘蛛保持一致。
缓存为什么会干扰抓取
蜘蛛看到的页面,是缓存节点返回给它的那一版。如果这一版和用户看到的不一致,问题就来了:正文缺一段、价格是旧的、列表页少了几条,甚至缓存里存着已经下线的页面,而访问记录上仍是一个正常的 200。
更麻烦的是,不一致往往不是全局的。边缘节点各自为政时,蜘蛛这次抓到 A 版,下次抓到 B 版,站内就出现了同一地址多个版本的情况,canonical 判断和内容识别都会受影响。
常见的问题点
- HTML 被长时间缓存:把正文页当静态资源缓存几天甚至更久,发布新内容后蜘蛛仍拿到旧版。
- 缓存刷新滞后:内容更新了,但没有主动刷新缓存,只能等自然过期。
- 按 UA 区分返回:给蜘蛛和给用户返回不同版本,容易造成内容判断偏差。
- 回源失败返回空壳:源站异常时,CDN 返回一个 200 的空页面,蜘蛛会当成正常内容。
- 缓存带参数的 URL:把筛选、跟踪参数也缓存成独立页面,抓取面被放大。
- CDN 侧的安全规则:把某些 UA 或高频请求直接拦掉,返回 403,蜘蛛自然吃闭门羹。
- 多节点不一致:不同地区节点的缓存状态不同,抓取结果会飘忽。
怎么看缓存状态
多数 CDN 会在响应头里返回缓存状态标记,比如命中、回源、已过期等。自查时把这些头和你请求的 URL 一起记下来,连续观察几天,就能看出哪些页面长期命中旧版、哪些页面根本没被缓存。这两个方向的处理方式不同:前者要缩短缓存时间或主动刷新,后者要检查缓存规则是否把某些路径排除掉了。
别忽略静态资源
图片、CSS、JS 这类文件缓存时间长一些通常没问题,但要注意文件名或版本号是否随内容变化。改了样式却沿用同一个文件地址,缓存里仍是旧文件,页面呈现和蜘蛛读到的结构就可能对不上。给静态资源加上版本标识,是成本很低的做法。
一次可执行的缓存自查
- 用搜索蜘蛛的 UA 请求几个关键页面,记录返回内容和缓存状态头。
- 再用普通浏览器请求同一地址,对比两次结果是否一致。
- 查看 HTML 响应的 Cache-Control 与 Expires,确认正文页没有被设成长期强缓存。
- 发布新内容或修改旧内容后,立刻用蜘蛛 UA 再请求一次,看是否已经刷新。
- 换不同入口或节点请求同一地址,检查结果是否稳定。
- 确认 CDN 的安全与限速规则里,没有针对搜索蜘蛛的拦截。
- 对照服务器日志中的回源记录,看蜘蛛请求是否真的打到了源站。
把刷新动作纳入发布流程
缓存问题很少是一次性修好的,它跟着发布节奏反复出现。比较省事的做法是在发布流程里固定一步:内容更新后主动刷新对应 URL 的缓存,栏目页和首页这类聚合页也一起处理。这样比事后一个个排查要省力得多。
缓存的目标是让用户更快看到正确内容,蜘蛛看到的也应该是同一版。任何“给蜘蛛单独准备一份”的做法,都要先想清楚会不会带来新的不一致。
观察一段时间再调
改完策略后不必急着下结论。看几天的日志,关注蜘蛛请求的状态码分布、回源比例以及抓取到的页面版本是否稳定。如果发现同一地址仍有多版本返回,就回到上面的清单逐条核对。缓存策略与抓取表现的关系,通常需要一段时间的记录才能看清。