蜘蛛池知识

蜘蛛池入口页的 Cookie 与会话:别让 Set-Cookie 把蜘蛛挡在门外

接入蜘蛛池后,入口页能被抓取却抓不深,很多时候问题出在 Cookie 上。本文说明搜索引擎蜘蛛对 Cookie 的处理方式和浏览器的差异,梳理首次访问种 Cookie 再跳转、Cookie 墙、会话 ID 进 URL、按 Cookie 差异化返回等常见干扰,并给出排查步骤与配置建议。

蜘蛛池知识

蜘蛛池入口页的 Cookie 与会话:别让 Set-Cookie 把蜘蛛挡在门外

很多站点接入蜘蛛池后会发现一个现象:入口页日志里能看到蜘蛛来过,但只抓了一个 URL 就再没动静,或者每次抓取都被当成“新访客”,反复请求同一个地址。排除服务器响应慢、robots 拦截这些常见原因后,还有一个经常被忽略的变量——Cookie。

蜘蛛对 Cookie 的处理和浏览器不一样

搜索引擎蜘蛛通常不会像浏览器那样长期保存 Cookie。多数情况下,它对 Cookie 的态度是“这次请求带上一次响应里给的 Set-Cookie,但换一个抓取批次或换一个出口 IP,这些 Cookie 就丢了”。如果入口页的逻辑依赖 Cookie 判断“你是不是已经来过”,蜘蛛就可能永远停留在第一步。

更麻烦的是,部分站点把会话状态写进了 URL 参数,比如 jsessionid=xxx。蜘蛛抓到的每一个链接都带一个随机串,会被当成成千上万个不同页面,既浪费抓取预算,也容易形成大量近似重复的内容。

几种常见的 Cookie 干扰形式

1. 首次访问先种 Cookie 再跳转

入口页打开后不是直接输出内容,而是先 Set-Cookie,再通过 JS 或 302 跳到带参数的地址,真正的正文在第二跳。这类做法在防采集场景里很常见,但用在蜘蛛池入口页上,等于给蜘蛛加了一道门。

2. Cookie 墙与弹层

合规提示、年龄确认、地区选择这类弹层,如果需要点击才能继续并且挡住了正文,蜘蛛拿到的就是没有内容的页面。较稳妥的做法是把这类逻辑放在首屏渲染之后,或者对无 Cookie 的请求直接放行正文。

3. 按 Cookie 返回不同内容

登录用户看到 A 版,未登录看到 B 版。如果 B 版是登录引导页,蜘蛛拿到的就是无内容页面。接入前要确认未登录状态下的输出版本本身是完整、可抓取的。

4. Cookie 影响缓存命中

CDN 或反向代理如果按 Cookie 做缓存键,蜘蛛每次请求都会回源,TTFB 变高,抓取效率下降。可以考虑配置“无 Cookie 请求走缓存”的规则,让入口页的静态部分尽量命中缓存。

怎么排查

  • 用 curl 或搜索引擎提供的抓取测试工具,不带任何 Cookie 请求入口页,看返回的 HTML 里有没有正文。
  • 对比带 Cookie 和不带 Cookie 两次请求的响应体差异,差异越大风险越高。
  • 检查日志里的 URL 是否出现 jsessionid、PHPSESSID 之类的会话串。
  • 看同一个入口 URL 在不同时间被抓取时,返回的内容是否稳定。

配置上的几条建议

  1. 入口页尽量无状态,正文直接输出,不依赖任何 Cookie 判断。
  2. 会话 ID 不要拼进 URL,用 Cookie 承载或者干脆不用。
  3. Set-Cookie 加上合理的 Path 和 SameSite,避免污染整个域名下的其他路径。
  4. 对静态入口页,考虑让无 Cookie 的请求直接命中缓存。
  5. 如果业务上确实需要 Cookie,就给蜘蛛一个明确的放行分支,而不是让它自己猜。
提示:Cookie 只是影响抓取的一个环节,调整之后还需要结合日志观察一段时间,看抓取深度和入口页覆盖有没有变化,不要只看单次请求的结果。

把 Cookie 这条线理顺,蜘蛛在入口页上的“第一步”才走得下去,后面的内链分发、目标页引导才有实际意义。