搜尋抓取

重定向鏈路與蜘蛛抓取:每一次跳轉要花多少成本

重定向是把舊地址轉交给新地址的常用手段,但對搜尋蜘蛛来说,每一次跳轉都意味着一次額外請求和一次排队。本文梳理 301、302、Meta refresh 與 JS 跳轉的差別,說明鏈式跳轉為什么會消耗抓取机會,並给出合並跳轉鏈、让内鏈與 Sitemap 直接指向最终地址的排查與收敛思路。

搜尋抓取

重定向鏈路與蜘蛛抓取:每一次跳轉要花多少成本

站点改版、域名迁移、协议切換的时候,重定向是最顺手的工具。但在搜尋蜘蛛看来,重定向不是一次免費的轉交,而是一次額外的請求加一次額外的排队:它先拿到 3xx 响應,记下 Location 里的目标地址,然後再回头去抓那個地址。跳轉鏈條越長,URL 被發現和被處理的路径就越绕。

蜘蛛拿到 3xx 之後做了什么

当蜘蛛請求一個 URL 得到 301 或 302 时,它通常不會把响應体当作頁面内容来處理,而是把目标地址当成一個新的待抓取 URL 放進队列。也就是说,一個重定向實际上占用了两次抓取机會:一次花在舊地址上,一次花在新地址上。如果新地址又返回 3xx,這個過程還會繼續,直到拿到 200,或者超過引擎设定的跳轉上限。走到上限之後,鏈路末端的頁面就可能一直没有被真正抓取。

不同跳轉方式的差別

  • 301 與 308:表示永久移動。适合域名迁移、协议切換、URL 结构定型後的規范化,蜘蛛會把它当作资源的迁移来處理。
  • 302 與 307:临时跳轉。适合短期活動頁、维護頁。如果長期用 302 承载整站迁移,蜘蛛會反复回到舊地址確認,舊地址也不容易被替換掉。
  • Meta refresh 與 JS 跳轉:蜘蛛需要先渲染頁面才可能执行,成本更高,也更依赖渲染队列的排期。能用服務端 3xx 解决的情况,不建议交给前端。

鏈式跳轉:最容易被忽视的浪費

比單次重定向更麻烦的是鏈條。典型场景是 http 跳 https,再跳 www,再跳一次带尾斜杠的最终地址;或者舊域名先 302 到另一個舊域名,再 301 到新站。每一跳都是一次獨立的請求,蜘蛛需要逐跳跟進,抓取机會被消耗在中間的過渡地址上,而真正的内容頁在鏈條末端等着。

更麻烦的是循环跳轉或指向失效頁面的跳轉:A 跳 B、B 跳回 A,或者重定向目标本身已经是 404。這類地址會持續占用抓取资源,却永遠走不到可用的内容。

常见的几類寫法

  1. 协议、主机名、尾斜杠分開跳:尽量合並成一次跳轉,直接指向最终地址。
  2. 大小寫不一致带来跳轉:例如 /Page 跳到 /page,而站内連結仍然寫成 /Page。
  3. 用跳轉代替站内導航:菜單或按钮先指向一個立即跳轉的中轉頁,蜘蛛要多走一步。
  4. 移動站與主站互相跳轉:需要確認没有形成回环,也没有让两邊都停留在跳轉狀態。

怎么把它收敛下来

思路很简單:让蜘蛛第一次拿到的地址就是最终地址。

  • 内鏈直接指向终点:導航、正文連結、相關推荐里都寫最终 URL,不要寫會跳轉的舊地址。
  • 合並跳轉鏈:检查 http、https、www、尾斜杠的组合,把多跳压成一跳。
  • Sitemap 只放返回 200 的地址:把 3xx 地址留在 Sitemap 里,等于每一次抓取都要先绕一圈。
  • 看日誌里的 3xx 比例:如果蜘蛛訪問记錄中 3xx 占比明顯偏高,通常說明站内還有大量連結指向會跳轉的地址。

跳轉不是問题,跳轉鏈才是

重定向本身是正常的技術手段,需要長期保留的迁移用 301,临时的調整用 302,關键在于鏈條要短、目标要稳定。当内鏈、Sitemap 和外部入口都指向同一個最终地址时,蜘蛛在發現的环节就能少走弯路,把有限的抓取机會留给真正需要被看到的頁面。

把跳轉当成交接棒,而不是接力赛:一次交接到位,蜘蛛的路径就短了。