搜尋抓取

重定向鏈與蜘蛛抓取:跳轉几次算多,什么时候该改直连

重定向本身不是問题,鏈式重定向才是。本文梳理蜘蛛遇到 301、302、307、308 时的處理差异,多少跳算多,常见鏈式来源,以及如何用内鏈、Sitemap 和 canonical 把抓取路径拉直,减少無效跳轉。

搜尋抓取

重定向鏈與蜘蛛抓取:跳轉几次算多,什么时候该改直连

站点做過改版、換過域名、上過 HTTPS 之後,重定向几乎不可避免。單次 301 跳轉對蜘蛛来说只是多一次請求,但一旦跳轉串成鏈,事情就變得不划算:蜘蛛要连續請求多個地址,才能拿到真正的内容。抓取配額和時間都被消耗在路上,而不是落在頁面上。

蜘蛛遇到一個重定向时,會做什么

当蜘蛛請求地址 A,服務器返回 3xx 狀態碼和 Location 头,蜘蛛會记錄目标地址,然後發起第二次請求。這個過程對單次跳轉来说很快,但每一次跳轉都是一次獨立的 HTTP 請求,會占用抓取预算。如果目标地址又返回 3xx,蜘蛛只能繼續跟,直到拿到 200 或遇到错誤。

鏈式重定向為什么更麻烦

A 跳到 B,B 跳到 C,C 才是最终頁面,這就是鏈式重定向。鏈條越長,蜘蛛中途遇到超时、连接中断或错誤頁的概率越高。一旦某一跳失敗,後面的内容可能不會被發現。另外,每多一跳,連結传递的信号會被稀释一次,内鏈的價值也跟着打折扣。

常见的鏈式重定向来源

  • 舊域名跳到新域名,新域名又跳到 HTTPS,HTTPS 再跳到带 www 的版本,三层串在一起。
  • CMS 里文章改了 slug,舊地址跳到新地址,新地址又被插件或規則跳了一次。
  • 反向代理和 CDN 各配置了一层跳轉規則,用戶看不出来,蜘蛛却要多走一步。
  • 語言或地区切換器設定了預設跳轉,入口頁反复横跳。
  • 尾斜杠、大小寫規則没有统一,同一個路径被拆成多個跳轉节点。

301、302、307、308 對抓取的影响

301 表示永久移動,蜘蛛拿到後會逐步把索引更新到新地址。302 和 307 表示临时移動,蜘蛛一般會保留舊地址,繼續抓舊地址,重定向狀態可能長期存在。308 是永久重定向,同时保留請求方法,行為上和 301 接近。重点不在于哪個狀態碼更高級,而在于永久性變更用永久重定向,临时活動用 302,並且活動結束後尽快撤掉。

跳几次算多

没有统一阈值,但经驗上 1 到 2 跳可以接受,超過 3 到 4 跳就值得检查。如果鏈上超過 5 跳,或者鏈中夹杂 404、超时、循环跳轉,蜘蛛放弃的概率會明顯上升。更實际的做法是看日誌:如果某個最终頁面長期只能通過多跳到達,而它又是重要頁面,就應该考虑改直连。

怎么排查和收尾

  1. 從服務器訪問日誌里篩選 3xx 狀態,找出被频繁請求且带重定向的地址。
  2. 對重点 URL 用 curl 或浏览器網絡面板,看完整的跳轉鏈和最终狀態碼。
  3. 把跳轉鏈画出来,找共同前缀和多余的中間节点。
  4. 能合並的規則尽量合並,例如把 HTTP 到 HTTPS、非 www 到 www 在一處完成,不要串成两跳。
  5. 检查内鏈和 Sitemap,尽量直接寫最终 URL,而不是舊地址或中間地址。

内鏈、Sitemap 與 canonical 的分工

内鏈是蜘蛛最常走的路。内鏈直接指向最终 URL,可以避免大量跳轉。Sitemap 里放最终 URL,不要放舊地址或跳轉中的地址,否則等于主動给蜘蛛多安排几步。canonical 用来告诉蜘蛛哪個是規范版本,但它不能替代重定向;如果舊 URL 還能訪問,最好既做重定向,也在内鏈里逐步清理。

重定向是搬家时的临时通道,不是長期入口。通道越多,蜘蛛越容易迷路。

定期检查跳轉鏈,尤其是改版、換域名、上 CDN 之後的前几個月。把路径拉直,蜘蛛才更愿意多抓几頁。