搜尋抓取

重定向鏈與抓取成本:跳數過多时如何收敛落地 URL

重定向本身不是問题,鏈式重定向才是。本文說明為什么一次跳轉等于一次抓取請求,列出 http 到 https、裸域到 www、CDN 回源等常见多跳来源,並给出一套用命令行、抓取日誌和配置抽查来數跳數、把多跳收敛成一次落地的方法與核對清單。

搜尋抓取

重定向鏈與抓取成本:跳數過多时如何收敛落地 URL

重定向是域名统一、协议切換、栏目改版时的常規手段,本身没有問题。真正麻烦的是“鏈”:一個地址先 301 到 A,A 再 302 到 B,B 又补一次尾斜杠修正才落到 C。對用戶来说只是多等一會,對搜尋蜘蛛来说,這是三次獨立的 HTTP 請求、三次抓取配額、三次超时或中断的机會,而它最後只拿到一份内容。

為什么跳數會變成抓取成本

抓取配額不是無限资源,它取决于站点整体响應速度、服務器承载能力和歷史抓取表現。鏈式重定向带来的額外消耗,主要体現在三個方面:

  • 請求次數成倍增加。每跳一次就是一個完整請求,包含 DNS、TLS 和响應头,蜘蛛要重复走一遍。
  • 失敗概率叠加。鏈上任何一环超时或返回 5xx,整條路径就断了,URL 可能被标记為抓取異常。
  • URL 身份變模糊。中間地址如果被別處引用,蜘蛛會同时记住多個版本,落地頁之外的地址也可能被当成獨立 URL 處理。

所以“一次跳轉就落地”和“三次跳轉才落地”,消耗差別是實打實的。

多跳鏈常见的几個来源

  • 协议與域名层层收口。http 先跳到 https,https 的裸域再跳到 www,最後才到真正的落地頁。
  • 迁移时没有做一一映射。舊栏目整体跳到新栏目首頁,再由栏目首頁跳到詳情,形成两跳。
  • CDN 與源站各配了一层規則。邊缘节点跳一次,回源後源站又跳一次,蜘蛛看到的就是两跳。
  • 參數清理用了 302。带參數的 URL 先 302 到去參版本,去參版本又因大小寫或尾斜杠再修正一次。
  • 用 JS 跳轉或 meta refresh 代替 301。蜘蛛需要先拿到頁面内容再解析,成本比服務端跳轉更高,而且不一定會跟随。

用三步把跳數核出来

  1. 命令行走一遍。用支持跟随跳轉的命令請求几個代表性 URL,把每一跳的狀態碼和 Location 打印出来,數清一共几次。重点抽查:首頁、栏目頁、被外鏈最多的詳情頁、带參數的列表頁。
  2. 在抓取日誌里找连續請求。同一個蜘蛛 IP、同一時間段内,针對同一来源路径出現多次請求,且目标地址逐次變化,通常就是一條跳轉鏈。把這類路径整理成清單。
  3. 對照配置抽查。拿清單去核對 CDN 規則、源站伪静態、反向代理和框架路由,確認每一跳由哪一层产生。很多时候多跳不是设計出来的,而是几层配置各自加了一跳。

把多跳收敛成一次落地

  • 跳轉目标一律寫最终 URL,不要先跳到中間頁再跳一次。
  • 同一個来源只保留一條規則,邊缘层和源站层不要重复配置。
  • Sitemap 里只放落地 URL,不放會跳轉的中間地址。
  • 站内連結直接指向最终地址,避免自己制造新的入口跳轉。
  • 能用服務端 301 的,就不要用 JS 或 meta refresh 代替。
  • 批量修改前先導出跳轉規則表,逐條标注“来源—目标—跳數”,改完再重新數一遍。

改完之後观察什么

改完不必急着下结论,先看現象:同一路径在抓取日誌里是否還有连續多次請求,重定向類的抓取異常是否下降,原本卡在中間地址的 URL 是否開始出現對落地頁的抓取。

把跳數控制在一次,不只是省一次請求,更是让蜘蛛记錄的唯一地址更清晰。中間地址被清掉,後續的 URL 發現、去重和内容保鲜都會顺一些。

小结

重定向不必全部消灭,需要消灭的是“鏈”。把每一跳確認清楚,让蜘蛛一次請求就拿到最终内容,抓取配額才能用在真正需要更新和發現的 URL 上。