服務器返回 301、302、307、308 时,蜘蛛拿到的不是頁面内容,而是一個新的地址。它必须再發一次請求,才能繼續這條路径。單次跳轉很常见,也不算什么大問题;真正麻烦的是跳轉连成一條鏈,一個 URL 要经過三四個地址才能落到最终頁。
一次跳轉,两次抓取
對蜘蛛来说,抓取预算里记的是請求次數,不是“最终拿到了几個頁面”。一次跳轉至少消耗两次請求:一次拿 3xx 响應,一次拿最终内容。鏈上有三跳,成本就是四次。站点規模不大时感觉不明顯,URL 數量到几萬、几十萬,跳轉鏈就會實打實地占掉一部分抓取額度。
同时,跳轉也拉長了發現時間。蜘蛛在鏈上中途停下、限速、改天再来,新頁面進入索引的時間就會往後拖。
跳轉鏈通常從哪里長出来
- HTTP 到 HTTPS 一次跳轉,再從裸域跳到 www,這是两條獨立規則,叠在一起就成了两跳。
- 舊栏目改版时逐次配置的跳轉,A 跳到 B,B 後来又跳到 C,舊規則没清理,A 就變成两跳甚至三跳。
- CDN、负载均衡、反向代理各自加了一條跳轉規則,比如补斜杠、统一小寫、修正大小寫路径。
- 頁面里用 meta refresh 或 JavaScript 做的“跳轉”,蜘蛛需要先下载 HTML 再执行,成本比 HTTP 跳轉更高,效果也更不稳定。
- 移動端與桌面端互跳、多語言站点按 IP 或語言自動跳,容易形成来回跳或按 UA 分流的多條鏈。
鏈太長會出現什么
- 抓取次數被摊薄:本该用在内容頁上的請求,花在了中間地址上。
- 信号分散:内鏈、外鏈、Sitemap 如果指向的地址不一致,同一份内容會出現多個入口,權重判断更模糊。
- 循环與断鏈:两條規則互相指向,或跳到已经失效的地址,蜘蛛走到一半只能放弃。
- 狀態碼誤判:临时跳轉反复出現时,蜘蛛可能仍把舊地址当作主版本,新地址的收益被延後。
把跳轉收敛到一跳
- 梳理現有規則,找出所有落在中間的地址,確認每一跳的目标是否必要。
- 让最常见的入口一次到位:http 直接跳 https 的 www 版本,不要在 http 裸域上再中轉一次。
- 内鏈、Sitemap、canonical、分享連結统一寫成最终 URL,不要依赖跳轉来“修正”。
- 改版时用 301 指向新地址,而不是先指到临时頁再指到最终頁。
- 定期用日誌或抓取工具抽查 3xx 的分布,看看有没有超過一跳的路径。
服務器與配置侧的检查点
很多跳轉不是内容团队配的,而是服務器和邊缘节点自動加的。检查 HSTS 設定、CDN 的强制 HTTPS、回源协议、URL 重寫規則,能發現一批看不见的中轉。若站点使用 WAF 或限流,還要確認跳轉响應本身没有被誤拦成 403 或 5xx,否則蜘蛛看到的是“错誤”而不是“搬走了”。
跳轉本身没有错,错的是让蜘蛛在路上多走几趟。能把一個地址一跳送到最终頁,就別用两跳。
小结
把跳轉鏈当作抓取路径上的收費站:每過一個,都要交一次請求。定期清理中間地址、让連結直接指向最终 URL,是最省事的做法。它不能让頁面一定被收錄,但能让蜘蛛少花冤枉時間,把配額留给真正的内容。