搜索抓取

重定向链与蜘蛛抓取:多跳之后,URL 还能被顺利发现吗

蜘蛛会跟随重定向,但每一跳都要消耗抓取成本和发现机会。本文梳理多跳链、循环跳转、相对链接解析基准、301 与 302 的长期差异,以及 Sitemap 与内链里不该出现跳转 URL 的原因,并给出跳转链自查的基本步骤。

搜索抓取

重定向链与蜘蛛抓取:多跳之后,URL 还能被顺利发现吗

蜘蛛遇到 3xx 时会做什么

主流搜索引擎蜘蛛在抓取时会对 301、302、307、308 等状态码发起跟随请求,最终拿到状态 200 的页面内容。这个过程对用户是无感的,但从抓取角度看并不免费:每一次跳转都是一次独立的 HTTP 请求,占用该站点的抓取配额,也拉长单次抓取耗时。跳数越多,蜘蛛在同一个入口上花的预算越多,能分给其他页面的次数就越少。

另外,蜘蛛通常只把最终落地页当作有效结果,中间那些跳转 URL 很少被当成独立页面收录。也就是说,一条三跳的重定向链,等于你用三个 URL 的抓取成本,换来一个页面的内容。

多跳链最常见的几种形态

  • HTTP 到 HTTPS、再到 www:协议和主机名各改一次,一条链就两三跳。
  • 旧域名跳新域名、再跳带尾斜杠版本:改版或换域名时没做一步到位。
  • 短链、跟踪链接跳落地页:对外投放会批量产生这类中间 URL。
  • 按 UA 判断的移动端跳转:同一 URL 对不同 UA 返回不同的跳转目标。

这些形态单独看都不算错,但叠加起来就容易出现 跳转链过长、跳转目标不一致 的问题。建议在服务器配置层把 HTTP 到 HTTPS、非 www 到 www 的规则合并成一次跳转,直接指向最终 URL。

循环和断链:比多跳更严重

A 跳 B、B 又跳回 A 的循环,会让蜘蛛在同一个闭环里反复请求,最后放弃这条路径。日志上往往表现为同一组 URL 在短时间内被高频访问,状态码全是 3xx,没有 200。另一种情况是跳转终点落在 404、410 或者 noindex 页面,蜘蛛跟到底却拿不到可用内容,这条路径上的 URL 发现就断了。

排查建议:先看抓取日志里 3xx 的占比和出现频率,再抽样几条链用 curl -I -L 或浏览器网络面板确认跳数,重点检查是否存在循环和死路。

相对链接的解析基准是最终 URL

这一点经常被忽略:如果页面 A 通过 301 跳到页面 B,而页面 B 里用的是相对链接,蜘蛛会以 B 的地址作为解析基准,而不是 A。如果两处目录层级不同,相对链接很可能指向意料之外的位置,凭空多出一批无效 URL。做跳转时,尽量让落地页使用完整路径或根相对路径,减少歧义。

301 与 302 的长期差别

301 一般被理解为永久迁移,302、307 被理解为临时。短期活动页、临时维护用 302 没问题;但如果一个 URL 长期用 302 指向另一个 URL,蜘蛛会持续认为原地址仍是正式地址,信号合并和 URL 规范化都会变慢。换域名、改目录这类不可逆的调整,用 301 更合适。

Sitemap 和内链里不要放跳转 URL

Sitemap 是给蜘蛛的 URL 清单,里面出现 301 或 302 的地址,等于让它先去跳一次再回来。正确做法是清单里只写最终可访问、返回 200 的地址。内链同理:导航、面包屑、正文里的链接直接指向最终 URL,能省掉大量无意义的跳转请求。

至于 JS 跳转和 meta refresh,蜘蛛的处理能力弱于服务端 301、302,延迟更高,甚至可能不执行。需要长期生效的跳转,优先放在服务端完成。

跳转链怎么自查

  1. 随机抽取站内 20 到 30 个入口 URL,记录跳数,把超过一跳的整理出来。
  2. 检查协议、主机名、尾斜杠这三类规则能否合并成一条。
  3. 统计日志中 3xx 请求涉及的 URL 数量,看是否集中在少数几条链上。
  4. 确认所有跳转链的终点都返回 200,并且没有被 robots.txt 或 meta 标签挡住。

把跳转控制在一次以内,终点稳定返回 200,URL 的发现路径就会短很多。这件事不需要复杂工具,在配置层做一次整理,效果通常比反复提交 Sitemap 更直接。