搜尋抓取

重定向鏈與蜘蛛抓取:跳轉层級太深时,URL 還找得到吗

站内跳轉鏈過長會拉高蜘蛛的發現成本:每一次 301、JS 跳轉都要額外請求,中間一旦出現 404、超时或需要渲染,URL 就可能没被走到。本文梳理常见的跳轉鏈類型、對 URL 發現的影响,以及用日誌自查和收敛跳轉規則的實操思路。

搜尋抓取

重定向鏈與蜘蛛抓取:跳轉层級太深时,URL 還找得到吗

站内跳轉是运营里最不顯眼、却最容易堆出問题的一环。改版、換域名、調整栏目结构、合並頁面,每一步都可能留下一條 301;模板里再埋几個 JS 跳轉,几年下来一個 URL 要经過四五跳才落到最终頁面。對用戶来说只是慢一点,對蜘蛛来说,這是一條要反复走、而且容易走丢的路径。

跳轉不是不能有,但每一跳都有代價

蜘蛛识別 3xx 狀態是常規能力,正常的 301、302 一般不會直接導致頁面抓不到。問题出在鏈路長度和稳定性上:每一步跳轉都是一次額外請求,會占用服務器响應時間,也消耗蜘蛛在這條路径上的耐心。当鏈路超過两三跳,或者中間某一跳返回 404、超时、需要 JS 执行,蜘蛛很可能中途停下,终点 URL 也就没有被發現和抓取。

更麻烦的是,跳轉鏈上的中間 URL 往往相互指向同一個终点。蜘蛛會分別去請求它們,等于用同一份抓取配額做了几遍無用功。

几種常见的跳轉鏈,問题点各不相同

1. 层叠 301:A→B→C→D

多见于多次改版。第一次改版 A 跳到 B,第二次 B 跳到 C,第三次 C 跳到 D,舊規則全留着,鏈路就越拉越長。更稳妥的做法是把規則收敛成 A→D、B→D、C→D,每一跳都直達终点。

2. JS 跳轉與 meta refresh

這類跳轉依赖脚本执行或浏览器行為,處理優先級和确定性都低于服務端 301。能換成服務端跳轉的尽量換;必须在 JS 里做的,至少保證跳轉目标是一個静態可訪問的 URL。

3. 跳轉到首頁或列表頁

有些站点把下线頁面统一跳到首頁,看似省事,實际效果是蜘蛛每次追到一個失效地址都會被送到首頁,既浪費路径,也模糊了 URL 之間的關系。下线内容更适合返回 410 或 404,而不是统一兜住。

4. 跳轉时丢參數或加參數

跳轉規則如果顺手拼上跟踪參數、會话 ID,很容易生成一批新的重复 URL,把本来一條路径的抓取拆成好几條。

跳轉鏈對 URL 發現的影响,大致在這几层

  • 發現成本:每一跳都是一次請求,配額有限时,鏈條越長越不划算。
  • 發現可靠性:中間出現错誤狀態、超时、需要渲染,發現過程就断了。
  • 信号传递:信号沿跳轉传递會有损耗,鏈越長损耗越明顯。
  • 重复 URL:中間地址可能被当成獨立 URL 處理,簇變大,收敛變难。

自查與收敛的常規做法

  1. 抓一份服務端訪問日誌,筛出返回 3xx 的請求,按来源 URL 與目标 URL 統計出現频次。
  2. 把跳轉規則画成图,找出長度超過两跳的鏈路,以及绕回自身的循环。
  3. 精简規則:能直達的直達,能删的舊規則删掉,別让歷史規則無限叠加。
  4. 確認终点 URL 可正常訪問、狀態碼為 200,内容與跳轉前的语义基本一致。
  5. 把终点地址更新到站内連結、Sitemap 和 canonical 上,减少蜘蛛再走舊路径的机會。
  6. 改完之後隔一段時間复查日誌,看舊跳轉的請求量有没有逐步下降。
一個简單的判断标准:如果一條跳轉鏈你自己在浏览器里要走三跳以上,蜘蛛那邊大概率也不會舒服。

几個容易被忽略的细节

  • HTTPS 與 HTTP、www 與非 www 的跳轉尽量一次性到位,不要先跳协议再跳域名。
  • 移動端模板里的跳轉規則容易和 PC 端叠加,产生額外鏈路,改版时两邊都要看。
  • CDN 层的跳轉規則和源站的跳轉規則可能同时生效,排查时要一起確認。
  • 短鏈、活動連結、QR Code专用連結尽量不長期留在站内,它們會持續制造中間 URL。

跳轉本身不是問题,問题是鏈路没人清理、没人收敛。把跳轉鏈当作站内结构的一部分定期维護,URL 發現這件事會省下不少不必要的消耗。