搜尋抓取

重定向鏈让蜘蛛多走几步:301、302 與跳轉层數對抓取的影响

蜘蛛遇到跳轉連結时,需要為每一跳單獨發起請求,跳轉鏈越長,抓取机會被消耗得越多,路径判断也越模糊。本文梳理單跳、多跳、跳轉成环三種形態,說明換域名、http 與 www 規范化等常见長鏈来源,並给出日誌排查、規則收敛以及與 canonical 分工的做法。

搜尋抓取

重定向鏈让蜘蛛多走几步:301、302 與跳轉层數對抓取的影响

蜘蛛發現一個 URL,並不等于直接拿到内容。如果這個 URL 是跳轉的起点,蜘蛛要先跟着 301 或 302 走到终点,才能讀到真正的頁面。這一段路看起来只是多請求一次,但站点規模一大,跳轉鏈會實打實地吃掉抓取机會,也會让蜘蛛對路径的判断變得模糊。

每一次跳轉,都是一次獨立請求

從蜘蛛的角度看,請求 A 得到 301 指向 B,並不是顺手就知道 B 的内容,而是需要再發起一次請求去拿 B。對服務器来说,這是两次流量;對抓取预算来说,這是两次机會。單跳通常没問题,但如果 A 到 B 到 C 再到 D 连成一條鏈,蜘蛛就要走四步才拿到頁面,而其中三步什么都没拿到。

更麻烦的是判断成本。蜘蛛在鏈的每一环都要重新確認這是什么類型的跳轉、是否值得繼續。連結權重在鏈路上會被稀释,终点頁面看起来是從很遠的地方来,在抓取優先級上並不占優势。

常见的三種跳轉形態

單跳 301:目标最清晰

舊地址一次性指向最终地址,蜘蛛一次就到位。這是最理想的形態,改版、換目錄、合並重复頁时都應该收敛到這個狀態。

多跳鏈:一层套一层

多见于反复改版、規則叠加的场景。第一次改版把 A 跳到 B,第二次又把 B 跳到 C,舊規則没有清理,A 就變成了一條三跳鏈。蜘蛛仍然能走到,但代價明顯變高。

跳到 404 或成环

目标頁面已经刪除,跳轉規則却還在,蜘蛛走完一圈拿到 404;或者 A 跳 B、B 又跳回 A,形成环。這两種情况都會浪費抓取,還可能让蜘蛛降低對该目錄的抓取频率。發現後應尽快改成 410 或直接移除跳轉。

哪些做法最容易产生長鏈

  • 換域名时只在首頁做跳轉,内頁仍靠舊連結层层轉發。
  • http 到 https、裸域名到 www 的規范化没合並,形成两級跳轉。
  • 移動端獨立域名與自适應版本互相切換,来回重定向。
  • 短鏈、活動頁、跟踪參數頁用跳轉實現,落地頁又跳一次。
  • 舊 CMS 插件留下的規則長期没人清理。

怎么检查並收敛跳轉鏈

  1. 在服務器日誌里筛出狀態碼為 3xx 的請求,看哪些 URL 频繁被跳轉請求命中。
  2. 對高频跳轉地址做批量检查,记錄每一跳的目标地址,找出超過两跳的鏈路。
  3. 把規則改成直接指向最终地址,避免中途经過中間頁。
  4. http、https、www 與非 www 的規范化合並到一次跳轉完成。
  5. 定期清理指向已刪除頁面的跳轉,改成 410 或移除。

重定向和 canonical 的分工

两者不是替代關系。301 是强指令,蜘蛛走完就只會看终点;canonical 是提示,蜘蛛仍可能抓取被标注的那一頁,只是不把它当作首選。地址确實變了,用跳轉;只是頁面相似、想合並權重,用 canonical 更合适。拿 canonical 顶替跳轉,會让蜘蛛持續走在舊地址上。

跳轉期間的服務器狀態

跳轉鏈上的任何一跳返回 5xx、超时或连接被拒,蜘蛛都可能在半路停下。它通常會在稍後重试,但重试的是整條鏈。所以鏈越長,被中断的概率越高。稳定地给出正确的 301 和較短的响應時間,比單纯压缩頁面体积更直接。

把跳轉当成一條路来设計:能一步到位的,不要走两步;已经废弃的路,尽早封掉。