搜索抓取

搜索蜘蛛抓取:会话 Cookie 与登录态跳转造成的路径偏移排查

蜘蛛大量落在登录页或带会话参数的地址上,往往不是链接写错,而是服务端用 Cookie 判断身份的规则把自然抓取一并拦下。本文梳理路径偏移的常见表现、用无 Cookie 请求的排查顺序、会话串与登录跳转的处理方式,以及调整后需要持续观察的指标。

搜索抓取

搜索蜘蛛抓取:会话 Cookie 与登录态跳转造成的路径偏移排查

有些站点在浏览器里访问一切正常,但从抓取日志看,蜘蛛大量落在 /login、/verify 这类地址上,目标内容页的抓取量始终上不去。这种“路径偏移”很多时候不是链接写错,而是会话状态在作怪。

一、常见的偏移表现

  • 蜘蛛请求内容页,返回 302 或 307,最终落到登录页、验证页或地区选择页;
  • 同一个内容地址每次被抓取都带上不同的会话参数,一个入口被拆成很多份;
  • 目录页对未登录用户开放,但列表与分页链接只在登录后才输出,蜘蛛看不到后续入口。

二、为什么会发生

服务端若用 Cookie 判断访问者身份,而蜘蛛通常不携带站点 Cookie,就会被当成“未登录访客”。如果规则写得过粗,比如“未登录访问内容目录一律跳登录”,自然抓取也会被一并拦下。另一种情况是框架在首次响应时下发 Set-Cookie,并把会话号写进 URL;这些带参数的链接一旦被复制到页面里,就会形成一批带会话串的入口,既浪费抓取量,也让入口归并变得混乱。

三、排查顺序

  1. 用不带 Cookie 的请求访问几个典型内容页,记录状态码与最终地址;
  2. 在抓取日志里筛 3xx,统计 Location 指向的域名与路径分布,确认是否集中指向登录或验证页;
  3. 检查页面中出现的链接,是否带 sid、jsessionid、token 一类参数;
  4. 确认 CDN、WAF、反向代理层是否也存在基于 Cookie 的跳转或人机校验规则;
  5. 对比登录前后的 HTML,判断分页与列表链接是否属于登录后才渲染的部分。

四、处理方式

  • 把公开内容页从“必须登录”的规则里摘出来;确需权限的内容用明确的 403 回应,而不是跳转登录页;
  • 关闭 URL 重写中的会话串附加,避免带参数链接被复制扩散;
  • 分页与列表尽量在未登录状态下输出可抓取的链接,需要交互的部分再交给脚本;
  • 确实不想被抓取的路径,用 robots 规则明确排除,减少无效请求占用。
跳转到登录页并不会隐藏内容,只会让抓取预算花在一个没有正文的地址上。

五、验证与持续观察

调整后不要只看一天的数据。观察目标目录的状态码分布是否从 3xx 转为 200,落到登录页的请求占比是否下降,带会话参数的 URL 数量是否收敛,以及内容页的单日抓取次数是否回到合理区间。同时留意新上线的功能是否又引入了 Cookie 判断,把“无 Cookie 访问内容页返回 200”作为上线前的固定自检项,会比事后翻日志省事得多。