搜尋抓取

重定向鏈與跳轉次數:蜘蛛跟到第几跳會放弃

重定向鏈會让蜘蛛多走几跳,消耗抓取预算,也可能在中途放弃。本文說明 301、302、307、308 的抓取差异,跳轉鏈多長需要留意,以及如何用响應头和日誌排查多跳、回环與參數叠加問题,把舊地址一步到位地指向最终 URL。

搜尋抓取

重定向鏈與跳轉次數:蜘蛛跟到第几跳會放弃

站点改版、域名迁移、URL 規則調整,都會产生重定向。重定向本身不是問题,問题是它被一层层叠加起来,形成一條很長的跳轉鏈。蜘蛛每跟一跳,都要重新發起請求、等待响應,抓取预算和時間就這样被消耗掉。

蜘蛛遇到重定向會怎么走

主流搜尋蜘蛛能识別 301、302、307、308 等狀態碼,並跟随 Location 指向的新地址。301 表示永久迁移,302 表示临时跳轉,307 和 308 則强調請求方法保持不變。對蜘蛛来说,它們都會产生一次額外的抓取動作。

如果 A 跳到 B,B 又跳到 C,C 才是最终頁面,那么蜘蛛實际要處理三次响應。跳數越多,放弃的概率越高。蜘蛛通常會在有限次跳轉後停止跟随,把该 URL 标记為抓取異常或重定向鏈過長。

多長的跳轉鏈算過長

没有统一的硬性數值,但经驗上,一跳能到终点是理想狀態,两跳已经需要留意,三跳以上就值得排查。鏈路過長时,蜘蛛可能只抓到中間頁,最终頁面反而迟迟不被發現;即使最终抓到了,传递的權重和更新信号也會被稀释。

  • 舊域名 → 新域名 → 加 www → 換 https → 改路径,五跳叠加很常见。
  • 列表頁 302 到登入頁,登入頁再 302 回列表頁,形成回环。
  • CDN、负载均衡、反向代理各自加一條跳轉規則,运维和 SEO 互不知情。
跳轉鏈的每一跳都是一次獨立的請求。對蜘蛛而言,這不是用戶無感的体驗問题,而是實打實的抓取成本。

怎么排查跳轉鏈

可以用命令行工具查看完整跳轉過程,例如用 curl 的 -IL 參數跟随重定向並輸出响應头;也可以從服務器訪問日誌中,統計同一 IP 段或同一 User-Agent 在短時間内连續訪問的 URL 序列。重点看两件事:跳了几次,以及中間是否出現循环。

  1. 找出所有返回 3xx 的 URL,按 Location 指向画成鏈路图。
  2. 合並重复規則,把多跳改成直接 301 到最终 URL。
  3. 检查内鏈和 Sitemap,確認它們指向的是终点地址,而不是會跳轉的舊地址。
  4. 對長期使用的 302,评估是否應该改為 301,避免信号模糊。

容易忽略的几個细节

重定向响應的正文通常不會被索引,但仍會占用传輸時間。如果 3xx 頁面返回了很大的 HTML 内容,蜘蛛還要下载和解析,建议尽量保持响應体為空或极简。

Location 使用相對路径虽然可行,但绝對 URL 更不容易出错。带參數的重定向也要注意:如果每次都追加一個追踪參數,最终地址會不断變化,蜘蛛可能把同一頁面当成多個 URL。

另外要区分 HTTP 重定向與頁面内的跳轉。meta refresh 和 JavaScript 跳轉不是 HTTP 层重定向,蜘蛛的處理方式不同,依赖它們做迁移並不可靠。能配置 301 的场景,優先用 301。

把跳轉控制在可控范围

定期抽查重点 URL 的跳轉次數,把鏈路長度当作一項基础指标来维護。改版或迁移时,提前規划好目标地址,让舊地址一步到位;上线後再用日誌確認蜘蛛是否沿着预期路径走到了终点。鏈條越短,蜘蛛越省力,新頁面被發現的路径也越清晰。