搜尋抓取

重定向鏈與蜘蛛抓取:跳轉几跳之後,URL 還值不值得跟

重定向鏈會让蜘蛛為一個頁面多發出几次請求,進而摊薄抓取预算。本文梳理 301、302、meta refresh 等跳轉方式的差別,列出跳轉鏈的常见来源,並给出從日誌排查到压缩跳轉层數的實操步骤,帮助站点把抓取路径缩短到一跳。

搜尋抓取

重定向鏈與蜘蛛抓取:跳轉几跳之後,URL 還值不值得跟

一次跳轉,就是一次額外的抓取請求

蜘蛛拿到一個 URL 後,如果服務器返回 3xx,它通常不會直接放弃,而是沿着 Location 头繼續請求下一個地址。這意味着跳轉鏈上的每一跳都要占用一次 HTTP 請求。三跳的跳轉鏈,等于用三次請求換回一個最终頁面,而站点並没有因此多出一頁内容。

不同跳轉方式,蜘蛛的耐心不一样

301 與 308:長期有效

301(永久)和 308(永久且保持請求方法)會被理解為地址已经換了,蜘蛛一般會记錄這层關系,並把發現信号传递到目标 URL。規范做法是让舊地址一次跳到位,而不是逐层轉。

302、303、307:临时跳轉

临时跳轉的语义是這次先到那邊,蜘蛛會跟,但通常不會把舊 URL 從索引里彻底替換掉。如果長期用 302 做永久迁移,舊地址會持續被抓取、持續跳轉,形成長期的額外開销。

meta refresh 與 JS 跳轉

這两類跳轉需要先拿到 HTML,再解析或渲染才知道下一步去哪。相比 HTTP 层的 3xx,它們被识別得更晚,也更容易在渲染环节多排一次队。

跳轉鏈常见的几種来源

  • http 到 https、带 www 與不带 www 没有一次性收敛,形成 http 非 www → https 非 www → https www 的串联。
  • 栏目改版时,舊地址先跳到過渡頁,過渡頁再跳到新地址,中間多了一环。
  • 末尾斜杠、大小寫、預設端口等寫法不统一,一层层跳過去。
  • CDN 或反向代理层配置了額外的跳轉規則,與源站規則叠加。
  • 短鏈、推廣連結、站内跳轉頁長期挂在頁面上。

跳轉鏈對 URL 發現的影响

跳轉本身不會阻止 URL 被發現,但會影响發現的速度和深度。当内鏈大量指向需要跳轉的舊地址时,蜘蛛實际走到目标頁的路径變長了,同一份抓取配額能覆盖的頁面數就下降。深度較大的頁面本来發現就慢,再叠加两跳,很容易長時間停留在已發現、未抓取的狀態。

另外,跳轉鏈會让日誌里出現大量 3xx 记錄,看起来抓取很活跃,有效抓取却不多。做抓取分析时,如果把 3xx 計入有效請求,會高估蜘蛛對站点的覆盖程度。

自查與收敛的具体做法

  1. 從日誌里筛出 3xx。按 URL 聚合,看哪些地址被反复請求、每次跳到哪。
  2. 区分一跳與多跳。一跳且目标明确,通常可以接受;三跳及以上,基本都值得處理。
  3. 检查跳轉方向是否一致。避免 A 跳 B、B 又跳 A 的循环,這類循环會让蜘蛛在同一组地址上反复消耗。
  4. 把常见變体统一到唯一規范地址。协议、主机名、末尾斜杠一次性收敛,减少中間跳。
  5. 更新站内連結。把内鏈、導航、Sitemap 里的舊地址直接改成最终地址,让蜘蛛第一跳就落在目标頁上。
  6. 確認跳轉没有被 CDN 缓存放大。邊缘节点如果缓存了舊的跳轉响應,源站改了規則,蜘蛛仍可能拿到老版本。
判断标准很简單:如果一個 URL 需要两跳以上才能到最终頁,而且在站内被大量引用,那它带来的成本往往大于收益,值得優先清理。

什么时候可以保留跳轉

舊 URL 有外部連結、有用戶收藏、有歷史訪問时,保留一次 301 是合理的,它保護的是訪問体驗和外鏈價值。需要避免的不是跳轉本身,而是跳轉鏈:把多跳压成一跳,把临时跳轉改成永久跳轉,把跳轉目标固定下来,蜘蛛的路径就會短一截。