搜尋抓取

重定向鏈與抓取路径:一次跳轉和一串跳轉的差別

頁面通過 301、302 跳轉时,搜尋蜘蛛不會停下,而是繼續跟着 Location 走。本文梳理重定向鏈在抓取路径里的作用:一跳與多跳的成本差別、常见長鏈来源、如何用响應头和日誌自查,以及内鏈、Sitemap 與跳轉規則该怎样统一,让 URL 發現少绕路。

搜尋抓取

重定向鏈與抓取路径:一次跳轉和一串跳轉的差別

重定向不是终点,而是路径的一部分

搜尋蜘蛛沿着連結一层层往下走,遇到 301 或 302 时通常不會停下,而是繼續跟到 Location 指向的地址。這就意味着,一次重定向會把原本一次請求就能拿到的頁面,拆成两次甚至更多次請求。跳數越多,抓取路径越長,蜘蛛在這條 URL 上花的時間也越多。

一跳、两跳與多跳的成本差別

單次 301 是很常见的做法,站点迁移、http 換到 https、裸域換到 www 几乎都要用到。問题一般出在鏈上:A 跳到 B,B 又跳到 C,C 才是真正的頁面。每多一跳,就多一次连接建立和响應等待。對服務器来说這不算大事,但蜘蛛的抓取額度有限,同一批 URL 里如果存在大量多跳鏈,能分给真正内容頁的抓取机會就少了。

此外,多跳鏈在传递權重信号时會被稀释,部分抓取系統對超過一定跳數的鏈會降低跟進意愿,甚至直接放弃這條路径。

301 與 302 在抓取中的区別

301 表示永久迁移,蜘蛛通常會把新地址当作正式地址,並逐步用新地址替換索引中的舊地址。302 表示临时跳轉,蜘蛛一般會保留舊地址並持續回来复查,于是舊地址會長期占用抓取名額。如果本来是永久換址却用了 302,舊 URL 會一直留在抓取队列里,新地址的確認也會被拖慢。

長鏈通常来自哪里

  • 协议與域名同时切換:先跳到 https 版本,再跳到带 www 的地址,最後還补一次结尾斜杠。
  • 目錄层級改版:舊栏目路径没有直接指向新地址,而是先跳到中間過渡頁。
  • CDN 或负载均衡回源时附加的跳轉,日誌里不顯眼,但蜘蛛确實多走了一次。
  • URL 大小寫、结尾斜杠、index.html 等寫法不统一,靠跳轉来兜底。
  • 短鏈、活動頁、舊域名保留的入口,常年挂着多重跳轉。

怎样自查重定向鏈

最简單的办法是看响應头,用命令行加 -L 參數把每一跳的狀態碼和 Location 都打印出来,重点看三件事:最终到達的地址是不是規范地址;中間有没有本该是 301 却用了 302、307 的跳轉;整條鏈一共跳了几次。

另一個角度是服務器日誌。同一来源的蜘蛛在很短時間内连續請求多個相似路径,往往就是它在跟着跳轉鏈走。如果某條鏈的中間地址訪問量很高,终点頁訪問量却一般,說明這條鏈本身就在消耗抓取。

让 URL 發現少走弯路

  1. 内鏈直接指向终点地址。導航、面包屑、正文里的連結都不要指向會跳轉的地址,能省一次請求就省一次。
  2. Sitemap 里只放最终地址。把 301 之前的 URL 寫進 Sitemap,等于让蜘蛛每次都先撞一次跳轉。
  3. 把多跳合並成一跳。能在一個跳轉里從舊地址直達新地址,就不要分两步完成。
  4. 协议、域名、结尾斜杠统一成一種寫法,全站内鏈按這個寫法生成。
  5. 定期清理歷史遗留的跳轉規則,尤其是几次改版叠加出来的長鏈。

跳轉與服務器稳定性

多跳鏈不只影响蜘蛛,也會放大服務器压力:每個中間跳轉都是一次真實請求。如果跳轉規則寫得复杂,還要查資料库或做正則匹配,响應時間就會上去。响應慢到一定程度,蜘蛛會降低抓取频率,连正常頁面的抓取节奏都會受影响。所以整理重定向鏈,本质上也是整理站点性能和抓取效率。

不必追求零跳轉,迁移和协议统一本来就离不開 301。關键是让鏈控制在一跳之内,並让内鏈與 Sitemap 尽量指向终点。

這样蜘蛛的每一次訪問都更接近有效内容,URL 被發現、被處理的节奏也會更稳定。