搜尋抓取

重定向鏈與蜘蛛抓取:跳數、類型和常见断鏈点

重定向本身没問题,問题出在鏈上。文章梳理一跳與多跳的差別、301 與 302 在蜘蛛眼中的不同含义,以及循环跳轉、跳到 404、终点带 noindex 等几種常见断鏈情况,並给出一套可执行的检查動作,帮你在日誌之外提前發現跳轉鏈條的隐患。

搜尋抓取

重定向鏈與蜘蛛抓取:跳數、類型和常见断鏈点

為什么重定向鏈值得單獨看

重定向本身没有問题,問题出在“鏈”。蜘蛛顺着連結爬過来,遇到 301 會繼續跟到终点,把终点当作這個 URL 的落点。但每多一跳,就多一次請求、多一次等待,也多一個可能出错的环节。一條三跳的鏈路,只要中間任何一环超时或返回異常,這個 URL 在這一轮抓取里基本就白跑了。

一跳重定向:正常且推荐

最常见的场景是 http 跳 https、裸域跳 www、舊 URL 換新地址。這類一跳的 301 是标准做法,蜘蛛處理起来没有负担:跟過去,把新地址入库,舊地址慢慢登出。真正需要留意的是,站内連結和 Sitemap 里應该直接寫终点地址,而不是繼續寫那個要跳轉的舊地址。否則蜘蛛每轮都要多走一步,抓取容量就這么一点点被消耗掉。

多跳鏈條是怎么長出来的

鏈條很少是一次设計出来的,多半是几次改版叠加的结果。比如最早是 http 版本,後来上了 HTTPS,再後来统一到 www,最後又調整了域名或目錄结构。没人回头清理,于是一條 URL 要经過三四個 301 才能到终点。

還有一種情况是鏈條里混進了 302。302 表達的是“临时”,蜘蛛通常不會用它替換掉原来的 URL,也就是说舊地址會繼續留在队列里,下一轮再来一遍。如果這個“临时”已经存在了两年,那它對蜘蛛和用戶来说其實都已经是永久的了。

几種容易出問题的鏈路

  • 循环跳轉:A 跳 B,B 跳 A,或者更長的环。蜘蛛跟几次之後會放弃,這個 URL 基本不會被收錄。
  • 跳到 404:舊地址還在被外鏈引用,301 指過去却是個死頁面,等于把蜘蛛送進了死胡同。
  • 跳轉终点带 noindex:蜘蛛跟到了頁面,却被告知不要索引,這一趟同样白走。
  • 跳到一個還會再跳的地址:常见于 CDN、负载均衡、多地区自動跳轉。用戶看到的是一瞬間,蜘蛛看到的是一串請求。
  • 用脚本或 meta refresh 做的跳轉:首轮 HTML 抓取时不一定被识別,容易和渲染阶段产生不一致。

跳轉與抓取容量的關系

抓取容量是有限的,蜘蛛每次来訪能處理的 URL 數量大致固定。站内如果有大量地址要走两三跳才到终点,等于同样的内容多占了几倍的抓取次數。數量不多时感受不到,一旦是几十萬級的舊 URL 堆积,影响就會体現在新頁面的發現速度上。

检查重定向鏈的几個動作

  1. 挑一批重要 URL(首頁、栏目頁、Sitemap 里的地址),用命令行工具或抓取工具看完整過程,记錄跳數和每跳的狀態碼。
  2. 把跳轉超過两跳的整理成清單,能合並的就合並成一次直達。
  3. 確認每個 301 的终点返回 200,並且這個终点本身短期内不會再改。
  4. 回头查一遍 Sitemap 和内鏈,看有没有直接指向跳轉 URL 的。
  5. 翻服務器日誌,找那些反复出現、狀態碼是 301 或 302 的請求,它們往往就是鏈條的源头。

處理原則

站内連結與 Sitemap 只寫终点地址;301 用一次就够,不要串成鏈;临时跳轉不要拿来当長期方案;跳轉的终点必须是可索引的 200 頁面。

重定向鏈不复杂,只是容易被忽略。定期把站内重要 URL 的跳轉路径過一遍,通常比事後從日誌里捞異常要省事得多。