搜尋抓取

重定向鏈與蜘蛛:跳轉层級越多,URL 發現的损耗越明顯

改版、切 CDN、換域名之後,一個 URL 常常要经過好几跳才落到最终頁面。這篇文章讲重定向鏈是怎么一层层長出来的,它對蜘蛛抓取预算、URL 發現路径和失敗概率有哪些渐進影响,以及如何用一次抓取和訪問日誌數清跳轉层級、把多余的中間驿站合並掉。

搜尋抓取

重定向鏈與蜘蛛:跳轉层級越多,URL 發現的损耗越明顯

站点改版、切 CDN、換域名之後,URL 往往要经過好几跳才落到最终頁面。單次跳轉是正常做法,但几层叠在一起,蜘蛛從發現一個地址到真正讀到内容,中間要绕的弯就變多了。

單次跳轉没問题,叠加起来才麻烦

301、302 都是标准做法,用来處理域名變更、路径調整再正常不過。問题出在鏈條上:一個入口 URL 先跳到 A,A 再跳到 B,B 又跳到 C,最後才到落地頁。對用戶来说可能只是多等几百毫秒,對抓取来说,每一跳都是一次獨立的請求,以及一次 DNS、TLS、等待响應的完整循环。

常见的鏈條是這样長出来的

  • HTTP 到 HTTPS 没有一次到位:先跳到 https 的舊域名,再跳到 https 的新域名。
  • www 與非 www 来回跳:主域和带 www 的版本都能訪問,各自又指向對方。
  • 尾斜杠补跳:目錄地址先补斜杠,再跳到带參數的最终地址。
  • 目錄迁移留下的舊連結:老目錄跳到新目錄,新目錄内部又跳一次。
  • CDN 與负载层的規則:邊缘节点先做一次跳轉,源站再补一次。
  • 营销短鏈和跳轉頁:站外連結指向中轉頁,中轉頁再跳向内容頁。

鏈條變長,蜘蛛那邊會發生什么

  • 抓取预算被摊薄:本来一次請求能拿到的内容,現在要花两三次,同样的配額能覆盖的 URL 變少。
  • URL 發現路径被拉長:每一跳都产生一個新的地址需要被记錄和處理,队列里的條目随之增加。
  • 信号传递不清晰:鏈條中間的地址可能被当作獨立 URL 參與後續判断,需要靠 canonical 或 Sitemap 去對帳。
  • 失敗概率上升:鏈條上任何一环超时、返回 5xx 或连接被重置,整條路径就断在那里。

要說明的是,這些影响是渐進的,不會因為多了一跳就让頁面從索引里消失,但鏈條越長,能平稳走完的概率越低。

怎么數清一條 URL 有多少跳

  1. 拿站点主要的入口 URL,比如首頁、栏目頁、Sitemap 里的地址,用命令行工具或浏览器的網絡面板看完整的跳轉序列。
  2. 记錄每一跳的狀態碼、目标地址和耗时,重点關注 302 和临时跳轉,它們比 301 更容易被長期保留下来。
  3. 對照服務器訪問日誌,看蜘蛛請求這些地址时是否也在跟着跳,有没有在中間某一跳就停下。
  4. 把 http、https、www、非 www、带斜杠、不带斜杠几個版本分別试一遍,检查是否存在互相指向的循环。

缩短鏈條的几個做法

  • 把多級跳轉合並成一次,直接指向最终地址,不在中間保留過渡頁。
  • 确定唯一的規范域名和协议,其余版本一律 301 到它,不要再做二次轉發。
  • 站内連結、Sitemap、canonical 里直接寫最终地址,减少蜘蛛被带着跳的机會。
  • CDN 层的跳轉規則和源站規則對一遍,避免两邊各做一次。
  • 改版期間用的临时跳轉,在切換完成後尽早換成永久跳轉,或者直接把連結改掉。
缩短鏈條是為了让抓取路径更干净,不是為了把所有跳轉都去掉。必要的域名统一和路径調整,该跳還是要跳,關键是別在中間留下多余的驿站。

跳轉本身不是問题,堆积才是。把站点的主鏈條梳理到一跳之内,剩下的交给内容结构和内鏈去组织,抓取路径會顺畅很多。