搜尋抓取

一次跳轉與多次跳轉:重定向鏈怎么影响蜘蛛的抓取路径

蜘蛛每遇到一次跳轉,都要重新發起一次請求。跳轉鏈越長,到達同一個落地頁消耗的抓取次數越多,URL 被發現和確認的速度也越慢。本文梳理多跳重定向的常见来源、對抓取路径的影响,以及把鏈路收口到一跳的排查與處理思路。

搜尋抓取

一次跳轉與多次跳轉:重定向鏈怎么影响蜘蛛的抓取路径

跳轉不是一次請求,而是一串請求

很多站点把 301 当成顺手處理的事情:http 跳 https、带 www 跳不带 www、舊目錄跳到新目錄、末尾斜杠再补一刀。對用戶来说,浏览器地址栏一闪就過去了;對蜘蛛来说,每一次跳轉都是一個獨立的 HTTP 請求。蜘蛛需要先拿到 3xx 响應和 Location 头,再對新的地址發起一次請求,逐跳推進,直到拿到 200 才真正開始解析頁面内容。

換句话说,一個要跳三次才能到達的地址,實际消耗的抓取次數是四次:三次 3xx 加一次 200,而不是一次。站点規模上来之後,這種放大效應會變得很可观。

多跳鏈路通常從哪里来

  • 协议與主机名叠加:http://example.com 先跳到 https://example.com,再跳到 https://www.example.com,最後才落到具体頁面。
  • 结尾斜杠與大小寫:服務器配置把 /a 跳到 /a/,把 /A 跳到 /a,鏈路上又多出两环。
  • 迁移残留:老域名、老目錄、老參數地址没有一次性指向最终地址,而是先指到一個中間頁。
  • 邊缘层規則叠加:CDN 或反向代理先跳一次,請求回到源站後又跳一次。
  • 按 UA 或語言分支跳轉:根據 User-Agent、Accept-Language 决定跳向哪個版本,蜘蛛和用戶可能走到不同终点。
  • 短鏈與营销連結:為了統計点击,中間再套一层跳轉頁。

跳轉鏈對抓取路径的三点影响

第一,請求數被放大。每多一跳,就多占一次抓取額度,而這些請求本身並不产出任何可索引的内容。

第二,發現變慢。蜘蛛沿着内鏈或 Sitemap 找到一個地址後,如果它是一條長鏈,那么真正落地頁被確認的時間會被推後,新内容的更新信号也可能因此延迟被感知。

第三,分支不一致容易制造重复地址。同一個頁面因為跳轉條件不同,可能产生 HTTP 版、HTTPS 版、带 www 版等多個中間態,蜘蛛需要額外去判断哪一個是規范地址。

怎么把鏈路看清楚

單條地址的检查

用命令行工具跟踪完整鏈路,逐條记錄狀態碼和 Location 指向,重点關注跳轉次數超過一次、以及中途出現循环或多终点的情况。關键頁面、频道入口頁、Sitemap 中出現的地址,都可以抽样跑一遍。

批量观察

在服務器日誌里篩選 3xx 狀態碼,按 Location 的目标地址聚合,看哪些目标被反复跳轉、哪些鏈路的层級最深。比起盯單個 URL,日誌聚合更容易發現成片的配置問题,比如某條邊缘規則影响了整個栏目。

收口的几個做法

  1. 让每條鏈只跳一次,直接指向最终地址,不要中途经過過渡頁。
  2. 全站统一协议與主机名,站内連結、Sitemap、RSS 里直接寫最终形式。
  3. 检查 CDN、WAF、反向代理层的跳轉規則,避免與源站規則叠加成两跳。
  4. 迁移时把舊地址一次性映射到最终地址,而不是先跳到中間頁再跳一次。
  5. 尽量不给蜘蛛單獨設定跳轉分支,让它和用戶落到同一個最终地址。
  6. 定期复查内鏈與 Sitemap 中的地址,確認返回的是最终態的 200,而不是 3xx。

收口的目标很朴素:把每個 URL 的到達成本压到最低。鏈路短了,同样的抓取額度就能覆盖更多頁面,蜘蛛在站点里的推進也會更顺。

跳轉本身不是問题,問题是同一批地址每次都要多走几步才到终点。