搜索抓取

重定向链与蜘蛛抓取:每多一跳,抓取成本就多一层

蜘蛛遇到重定向会跟随,但每多一跳就多一次请求等待,抓取效率会打折扣。本文拆解301、302、307、308在抓取中的差别,梳理http到https、www、末尾斜杠、CDN规则等常见重定向链来源,并给出排查与收敛方法,帮站点把跳转控制在合理范围内。

搜索抓取

重定向链与蜘蛛抓取:每多一跳,抓取成本就多一层

蜘蛛抓取一个 URL 时,如果服务器返回 301 或 302,它会顺着 Location 继续请求下一个地址。这个过程对用户几乎无感,对蜘蛛却意味着多一次往返。单次跳转通常可以接受,但当成串的重定向出现时,抓取效率会明显被消耗。

重定向本身不是错,错在链太长

网站迁移、协议切换、域名统一,都离不开重定向。问题不在于“有没有跳转”,而在于“要跳几次”。蜘蛛每跟一次跳转,就要重新建立请求、等待响应,日志里也会多出一条记录。如果内链和 Sitemap 里写的还是旧地址,蜘蛛每次访问都要走完整条链,长期下来就是持续浪费。

一次重定向,蜘蛛要付出什么

  • 多一次 HTTP 请求的等待时间,尤其在响应较慢时叠加明显;
  • 抓取队列里的 URL 状态会变化,旧地址可能被反复抓取;
  • 跳转链中间环节如果返回错误,蜘蛛可能直接放弃;
  • 带参数的跳转还可能被当成新 URL,增加重复抓取。

301、302、307、308 在抓取中的差别

301 表示永久移动,蜘蛛通常会逐步把索引指向新地址,旧地址的抓取频次会下降。302 表示临时移动,蜘蛛可能继续抓旧地址,因为它不确定跳转是否长期有效。307 和 308 会保持原请求方法,主要用于非 GET 场景,普通页面里不多见。选择哪种状态码,要和实际的迁移意图一致,不要长期用 302 替代 301。

链式重定向常见的几种来源

  • http 跳 https,同时 www 又跳非 www,叠成两跳;
  • 末尾斜杠规则不统一,/page 跳 /page/,再跳一次到最终地址;
  • 旧域名整体迁移后,内链没有同步更新;
  • CMS 插件、CDN、负载均衡各自加了一条跳转规则;
  • 移动端适配或语言切换时,用跳转代替直接输出正确页面。

怎么排查重定向链

  1. 用命令行工具逐层查看响应头里的 Location,确认到底跳了几次;
  2. 在浏览器开发者工具的 Network 面板里看请求链路;
  3. 翻服务器日志,找同一个 URL 出现多条 301/302 记录的情况;
  4. 检查 Sitemap 和主要内链,确认写的是最终地址而不是中间地址;
  5. 确认跳转终点返回 200,而不是又一个跳转或错误页。

把重定向控制在合理范围

多数情况下,一跳到位是可以做到的。把 http 到 https、www 到非 www、末尾斜杠这些规则合并成一次跳转,内链和 Sitemap 直接使用最终 URL,旧地址只保留必要的 301。不要让重定向链形成循环,也不要用重定向去掩盖本该返回 404 的页面。

重定向是桥,不是路。桥太多,蜘蛛也会绕累。

抓取效率是一点点积累出来的。减少每一跳的等待,把入口直接指向最终地址,蜘蛛才能把时间花在真正的内容页上。