搜尋抓取

搜尋蜘蛛抓取:重定向鏈過長與跳轉损耗的排查顺序

重定向本身是正常的 URL 迁移手段,但鏈路過長會让蜘蛛在跳轉中消耗抓取预算,甚至把中間地址当成獨立入口。本文按日誌與响應头、最终地址一致性、内鏈與 Sitemap 寫法、邊缘层跳轉配置的顺序,梳理重定向鏈的排查與收敛方法。

搜尋抓取

搜尋蜘蛛抓取:重定向鏈過長與跳轉损耗的排查顺序

為什么重定向會影响 URL 發現

重定向是常见的 URL 迁移手段,本身並不是错誤。但每次跳轉都是一次獨立的請求:蜘蛛需要請求初始地址,讀取响應头里的 Location,再發起下一次請求,直到落到最终返回 200 的頁面。如果鏈路有三四跳,或者中途出現循环、跨域、协议切換,抓取节奏會被拖慢,部分中間地址還可能被当成獨立入口记錄,導致同一内容出現多個被抓取地址。

先確認跳轉鏈的真實長度

排查的第一步不是改配置,而是先看清現有鏈路。可以用命令行工具或浏览器開發者工具观察完整跳轉過程。

  • 使用 curl -I -L 观察每一跳的狀態碼和 Location 头。
  • 记錄從初始 URL 到最终 URL 的层數,站内入口一般建议控制在一跳以内。
  • 检查是否存在 http 到 https、带 www 到不带 www、带斜杠到不带斜杠的连环跳轉。
  • 区分 301、302、307、308,临时跳轉可能让蜘蛛反复回訪中間地址,不利于入口收敛。

检查最终地址是否唯一且稳定

重定向的终点應该是一個固定、可直接訪問的 URL,而不是因设备、地区或登入態變化的動態地址。终点不稳定时,蜘蛛每次拿到的目标可能不同,URL 發現就會分散。

  • 用不同 UA 和不同线路請求同一入口,對比最终地址是否一致。
  • 確認最终地址返回 200,而不是再次跳轉或返回软 404 頁面。
  • 检查 canonical 指向是否與重定向终点一致,避免两套信号互相拉扯。
  • 若终点依赖 Cookie 或會话,考虑為蜘蛛提供稳定的預設版本。

排查内鏈與 Sitemap 的寫法

很多跳轉损耗来自站内引用。内鏈、導航、分頁、RSS 和 Sitemap 里如果寫的是舊地址或中間地址,蜘蛛每次都要多走一跳。

  1. 全站抽取内鏈,篩選出會返回 301 或 302 的連結。
  2. 優先把導航、面包屑、栏目頁模板中的舊連結替換為最终地址。
  3. Sitemap 中只保留最终 URL,不要提交跳轉地址。
  4. 检查是否存在鏈式重定向,例如 A 到 B 再到 C,應尽量改為 A 直接到 C。

服務器與邊缘层的跳轉配置

跳轉可能發生在源站、CDN、负载均衡或 WAF 层。多层各自配置跳轉时,容易出現叠加,最终表現就是鏈路變長。

  • 分別測試直连源站和经過 CDN 的响應,比較跳轉层數是否一致。
  • 检查 CDN 規則、HTTPS 强制跳轉、尾斜杠規則是否重复配置。
  • 確認 WAF 没有把蜘蛛請求重定向到驗證頁或拦截頁。
  • 在日誌中观察 3xx 狀態碼占比及其對應 UA,定位跳轉集中的目錄。

观察與收敛

調整後不要期待立刻出現變化。可以在服務器日誌里按周對比 3xx 請求數量、中間地址的抓取次數以及最终地址的抓取占比,观察入口是否逐步收敛到最终 URL。

重定向鏈的治理目标不是消灭跳轉,而是让每個入口都能用最少的請求到達最终内容。鏈路越短,URL 發現和抓取节奏越可控。

如果站点規模較大,可以按目錄分批處理,先收敛高频被抓取的舊地址,再處理長尾入口。每次調整後保留一份 URL 映射表,方便後續核對,也便于在改版或換域名时复用。