一次跳轉,就是一次額外的抓取請求
蜘蛛拿到一個 URL 後,如果服務器返回 3xx,它通常不會直接放弃,而是沿着 Location 头繼續請求下一個地址。這意味着跳轉鏈上的每一跳都要占用一次 HTTP 請求。三跳的跳轉鏈,等于用三次請求換回一個最终頁面,而站点並没有因此多出一頁内容。
不同跳轉方式,蜘蛛的耐心不一样
301 與 308:長期有效
301(永久)和 308(永久且保持請求方法)會被理解為地址已经換了,蜘蛛一般會记錄這层關系,並把發現信号传递到目标 URL。規范做法是让舊地址一次跳到位,而不是逐层轉。
302、303、307:临时跳轉
临时跳轉的语义是這次先到那邊,蜘蛛會跟,但通常不會把舊 URL 從索引里彻底替換掉。如果長期用 302 做永久迁移,舊地址會持續被抓取、持續跳轉,形成長期的額外開销。
meta refresh 與 JS 跳轉
這两類跳轉需要先拿到 HTML,再解析或渲染才知道下一步去哪。相比 HTTP 层的 3xx,它們被识別得更晚,也更容易在渲染环节多排一次队。
跳轉鏈常见的几種来源
- http 到 https、带 www 與不带 www 没有一次性收敛,形成 http 非 www → https 非 www → https www 的串联。
- 栏目改版时,舊地址先跳到過渡頁,過渡頁再跳到新地址,中間多了一环。
- 末尾斜杠、大小寫、預設端口等寫法不统一,一层层跳過去。
- CDN 或反向代理层配置了額外的跳轉規則,與源站規則叠加。
- 短鏈、推廣連結、站内跳轉頁長期挂在頁面上。
跳轉鏈對 URL 發現的影响
跳轉本身不會阻止 URL 被發現,但會影响發現的速度和深度。当内鏈大量指向需要跳轉的舊地址时,蜘蛛實际走到目标頁的路径變長了,同一份抓取配額能覆盖的頁面數就下降。深度較大的頁面本来發現就慢,再叠加两跳,很容易長時間停留在已發現、未抓取的狀態。
另外,跳轉鏈會让日誌里出現大量 3xx 记錄,看起来抓取很活跃,有效抓取却不多。做抓取分析时,如果把 3xx 計入有效請求,會高估蜘蛛對站点的覆盖程度。
自查與收敛的具体做法
- 從日誌里筛出 3xx。按 URL 聚合,看哪些地址被反复請求、每次跳到哪。
- 区分一跳與多跳。一跳且目标明确,通常可以接受;三跳及以上,基本都值得處理。
- 检查跳轉方向是否一致。避免 A 跳 B、B 又跳 A 的循环,這類循环會让蜘蛛在同一组地址上反复消耗。
- 把常见變体统一到唯一規范地址。协议、主机名、末尾斜杠一次性收敛,减少中間跳。
- 更新站内連結。把内鏈、導航、Sitemap 里的舊地址直接改成最终地址,让蜘蛛第一跳就落在目标頁上。
- 確認跳轉没有被 CDN 缓存放大。邊缘节点如果缓存了舊的跳轉响應,源站改了規則,蜘蛛仍可能拿到老版本。
判断标准很简單:如果一個 URL 需要两跳以上才能到最终頁,而且在站内被大量引用,那它带来的成本往往大于收益,值得優先清理。
什么时候可以保留跳轉
舊 URL 有外部連結、有用戶收藏、有歷史訪問时,保留一次 301 是合理的,它保護的是訪問体驗和外鏈價值。需要避免的不是跳轉本身,而是跳轉鏈:把多跳压成一跳,把临时跳轉改成永久跳轉,把跳轉目标固定下来,蜘蛛的路径就會短一截。