搜尋抓取

重定向鏈越長,蜘蛛损耗越大:從入口到落地頁的跳轉检查

蜘蛛抓取一個 URL 时,如果中間隔着多次跳轉,抓取预算和時間都會被消耗。本文從重定向類型、常见跳轉来源、落地頁取舍和检查方法几個方面,說明如何把跳轉鏈控制在一跳以内,让蜘蛛更快到達真正的内容頁。

搜尋抓取

重定向鏈越長,蜘蛛损耗越大:從入口到落地頁的跳轉检查

蜘蛛每跟一次跳轉,都要多花一次請求

当一個 URL 返回 301 或 302,蜘蛛不會立刻把它当成最终頁面。它會先记錄跳轉目标,再發起一次新的請求。跳轉一次還好,如果一條鏈上有三次、五次跳轉,蜘蛛就要连續走完這几步,才能看到真正的頁面内容。這個過程會占用抓取预算,也會拉長單次抓取的時間。

更麻烦的是,跳轉鏈往往不是刻意设計的,而是在域名迁移、协议升級、目錄结构調整中慢慢堆积出来的。蜘蛛每次回訪都要重新走一遍,损耗是持續發生的。

几種重定向類型,蜘蛛的理解不一样

  • 301 永久重定向:表示舊地址永久換到新地址,蜘蛛通常會把信号和後續抓取逐步轉移到目标 URL。
  • 302 / 307 临时重定向:表示临时跳轉,蜘蛛可能仍會保留原 URL 的抓取,不一定會立刻替換。
  • 308 永久重定向:和 301 類似,但明确要求保持請求方法,蜘蛛一般按永久跳轉處理。

如果只是為了把用戶從 http 带到 https,或者從舊域名带到新域名,應该用 301 或 308,而不是 302。用错類型,蜘蛛可能長期在两個地址之間反复確認,落地頁的抓取稳定性會受影响。

跳轉鏈通常從哪里来

常见的堆积点有几類:

  1. http 到 https 的协议跳轉,再加上 www 與非 www 的跳轉,容易形成两跳。
  2. 舊域名整体迁移到新域名,但内鏈和 Sitemap 里還保留舊地址。
  3. URL 改版後,舊目錄 301 到新目錄,新目錄又 301 到带參數的最终地址。
  4. CDN 或负载均衡层配置了額外跳轉,源站也有一层跳轉。
  5. 登入、地区選擇、語言切換等中間頁,用跳轉把蜘蛛带向預設頁。

這些跳轉單獨看都有理由,叠在一起就會拉長路径。蜘蛛從入口到落地頁的每一步都要重新解析、重新請求,服務器也要多响應几次。

落地頁的取舍:尽量让内鏈直接指向终点

最直接的做法,是让站内連結和 Sitemap 里的 URL 都指向最终地址。比如 https 已经全站可用,内鏈就不要再用 http;确定使用 www 域名後,非 www 地址只保留跳轉,不再出現在導航和文章正文里。這样蜘蛛從内鏈進入时,一次請求就能到達落地頁。

跳轉可以用,但最好不要让蜘蛛连續跟两次以上。一跳到達最终 URL,是更省抓取预算的结构。

Sitemap 里提交的也應该是最终 URL,而不是會跳轉的舊地址。如果 Sitemap 里混入大量跳轉地址,蜘蛛會先抓這些地址,再跟着跳到目标,額外消耗抓取次數。對于已经確認不再使用的舊 URL,可以用 301 指向最相關的目标頁,而不是统一跳到首頁或某個不相關的頁面。

检查跳轉鏈的几個入手点

  • 用命令行或抓取工具查看單條 URL 的响應狀態和 Location 头,確認跳轉次數。
  • 從服務器日誌里篩選 3xx 狀態碼,看看哪些地址在被蜘蛛频繁請求。
  • 抽查内鏈和 Sitemap 中的 URL,確認它們是否直接返回 200。
  • 检查 CDN、反向代理和源站配置,避免同一层重复設定跳轉。
  • 對于跳轉鏈,優先合並成一次 301,再確認目标頁可正常訪問。

服務器稳定性與跳轉後的响應

跳轉本身不复杂,但跳轉後的落地頁必须稳定。如果蜘蛛跟完跳轉,落地頁返回 5xx 或超时,這次抓取就白跑了,還可能影响後續回訪节奏。带宽和连接數紧張时,跳轉請求也會占用一部分並發。把跳轉鏈缩短,等于减少了蜘蛛和服務器之間的往返次數,對两邊都更轻。

另外,跳轉响應不宜過慢。有些站点在跳轉前做复杂判断、查資料库或等待外部接口,蜘蛛拿到的只是一個慢响應。更合理的做法是让跳轉层尽量轻,把内容判断放到落地頁之後。

小结

重定向不是不能用,但要控制長度和類型。内鏈和 Sitemap 尽量指向最终 URL,舊地址用一次 301 指向最相關的目标,避免多层跳轉和跳轉环。蜘蛛每次少走一步,落地頁被發現和抓取的机會就更稳定一些。