蜘蛛池入口页的主要任务是让搜索引擎蜘蛛稳定到达、正常解析,并沿着链接继续往下走。很多站点为了扛住抓取压力,会在入口页前面加一层 CDN 或缓存。缓存本身没有好坏,但它会改变蜘蛛实际拿到的东西,所以需要单独拿出来说清楚。
缓存命中的时候,蜘蛛拿到的是什么
当入口页命中缓存,蜘蛛请求到达 CDN 边缘节点就直接返回,源站可能完全没有收到这次请求。带来两个直接结果:
- 响应更快,首字节时间明显缩短,蜘蛛在同样的时间窗口内可以抓更多 URL。
- 源站日志里看不到这次抓取,容易误判成“蜘蛛没来”或者“抓取量下降”。
更需要注意的是内容一致性。如果缓存副本是旧版本,蜘蛛解析到的标题、正文、链接都可能和当前源站不同。入口页承担的是引导作用,链接一旦对不上,后续跟进就会偏。
哪些缓存配置容易出问题
把 HTML 当静态资源长期缓存
部分 CDN 的默认策略对 .html 和无扩展名路径也会缓存。入口页如果被长时间缓存又没有主动刷新,蜘蛛看到的就是一份“冻结”的页面。改版、换链接、调整结构之后,蜘蛛仍然按老版本走。
忽略 Vary 头
入口页如果同时存在 PC 和移动两套输出,又没有正确声明 Vary,缓存就可能把移动版返回给桌面蜘蛛,或者反过来。结果是蜘蛛抓到的版本和你想让它抓的版本不一致。
过期时间与缓存头互相打架
Cache-Control 的 max-age、Expires、Last-Modified、ETag 如果设置相互矛盾,不同 CDN 节点的行为可能不一样。入口页在不同地区被抓到的内容因此出现差异,排查时会很难定位。
回源频率和蜘蛛抓取不是一回事
缓存命中率升高,回源请求会变少,但这并不代表蜘蛛不来了。回源日志只是源站能看到的那部分抓取,被缓存层挡掉的抓取不在里面。
所以用回源日志统计抓取量时,需要把缓存这一层算进去,否则很容易得出“抓取量下滑”的错误结论。反过来,如果入口页刻意不缓存,蜘蛛每次请求都打到源站,服务器压力会直接上升,抓取高峰时更容易出现超时。
入口页缓存的取舍建议
- 入口页内容相对稳定、更新不频繁的,可以缓存,但过期时间不宜太长,建议控制在几小时到一天,并且更新后主动刷新。
- 需要频繁调整链接结构、做对照观察的入口页,不建议深度缓存,或者把缓存时间设得很短。
- 涉及登录态、个性化输出、按 UA 分流的入口页,尽量不要缓存,或者把 Vary 声明清楚。
- 目标页如果是动态内容,缓存策略要和入口页分开考虑,不建议一套规则套全站。
怎么观察和排查
- 用普通 UA 和蜘蛛 UA 实际请求入口页,对比返回内容和源站是否一致。
- 查看响应头里的 Cache-Control、Age、X-Cache 等字段,判断这次是否命中缓存。
- 在 CDN 后台查看入口页的缓存命中率和回源量,与源站日志交叉比对。
- 更新入口页后,确认缓存是否已经刷新,再观察蜘蛛是否抓到新版本。
缓存是入口页运维里容易被忽略的一环。把缓存策略、过期时间和内容一致性管清楚,蜘蛛拿到的版本才和你想让它看到的一致,后续的链接跟进也才有意义。