搜尋抓取

重定向鏈與抓取路径:蜘蛛多跳一次,抓取预算就少一点

用戶感觉不到的 301、302,對蜘蛛来说是一次次獨立請求。跳轉鏈從哪来、多一跳要付出什么代價、日誌里怎么看出来、如何把鏈條收敛成一步到位,這篇文章按排查顺序讲清楚。

搜尋抓取

重定向鏈與抓取路径:蜘蛛多跳一次,抓取预算就少一点

蜘蛛走重定向,和用戶点連結不是一回事

用戶在浏览器里遇到 301 跳轉,几乎没感觉;蜘蛛不一样,每一次跳轉對它来说都是一次新的請求。從 A 跳到 B,再跳到 C,才算拿到最终頁面。中間的這几跳都要占用抓取预算,也會拉長服務器日誌里的時間线。

搜尋引擎對跳轉鏈有跳數上限(常见说法是單條鏈最多跟若干跳),超過以後,後面的地址就不會繼續跟。也就是说,鏈子拖得太長,末端頁面就是“看得见、走不到”。

跳轉鏈通常從哪来

  • 协议切換:http 到 https,老頁面、老外鏈還指着 http 地址。
  • 域名层級:非 www 跳 www,或反過来,两個方向同时存在就可能成环。
  • URL 規范化:大小寫、尾斜杠、index.html 之類的寫法差异,各自配了一條跳轉。
  • 改版或換域名:舊目錄整体跳新目錄,新目錄又跳一次到更细的地址。
  • 设备與語言判断:中間层脚本或服務端先判断,再跳到對應版本。
  • CDN、WAF、负载均衡配置:不带 CDN 域名的請求被彈回主域名。

多一跳,代價在哪里

最直接的是抓取预算被摊薄。蜘蛛一次訪問本来可以拿回一個頁面的内容,現在變成了“跳一次、再跳一次、最後才拿到”。同样的時間窗口里,它能覆盖的 URL 數量就少了。

日誌里的典型表現是:同一批 URL 反复出現 3xx 狀態,却很少看到紧接着的 200;或者只有起点被记錄,终点頁面的抓取次數明顯偏低。

抓取预算不是無限的。跳轉本身不产出内容,它只是把预算花在“找路”上。

几個容易忽略的连带問题

  • 跳轉過程中參數可能被丢掉,带參地址跳到最後變成無參地址。
  • 鏈條里只要有一环返回 404、403 或 5xx,後面的地址就断在這里。
  • 跳轉目标本身又是一個跳轉,缓存层各存一份,蜘蛛每次拿到的落点可能不同。
  • 站内連結仍指向舊的跳轉地址,等于每次訪問都强制多走一跳。

怎么查、怎么收

先把鏈條画出来,再决定動哪一段。可以用下面的顺序排查:

  1. 日誌里筛出 3xx,統計哪些 URL 出現频率高、目标指向哪里。
  2. 用抓取工具或命令行請求批量跑一遍,看完整跳轉鏈有几跳、终点狀態碼是多少。
  3. 检查 Sitemap、canonical、内鏈和外鏈,確認它們寫的是起点還是终点。

收敛的思路通常不复杂:

  • 規則合並,一步到位:http 直接跳到最终的 https 主域名,不要拆成两段。
  • 入口统一:内鏈、Sitemap、canonical 一律寫最终地址,让蜘蛛在入口處就不需要跳。
  • 舊路径保留但降權:跳轉仍然存在,用来接住老外鏈,但不要让站内連結繼續依赖它。
  • 落点必须可抓取:跳到 404、登入頁或纯 JS 渲染的空壳頁,等于白跳一趟。

服務器稳定性也在其中。5xx 一多,跳轉鏈會在半路断掉,蜘蛛下次再来,未必還记得终点在哪。需要說明的是,跳轉鏈並不是越少越好,而是每一步都要有明确目的:该接住的老地址接住,该省掉的中間环节省掉。