為什么重定向鏈值得單獨看
重定向本身没有問题,問题出在“鏈”。蜘蛛顺着連結爬過来,遇到 301 會繼續跟到终点,把终点当作這個 URL 的落点。但每多一跳,就多一次請求、多一次等待,也多一個可能出错的环节。一條三跳的鏈路,只要中間任何一环超时或返回異常,這個 URL 在這一轮抓取里基本就白跑了。
一跳重定向:正常且推荐
最常见的场景是 http 跳 https、裸域跳 www、舊 URL 換新地址。這類一跳的 301 是标准做法,蜘蛛處理起来没有负担:跟過去,把新地址入库,舊地址慢慢登出。真正需要留意的是,站内連結和 Sitemap 里應该直接寫终点地址,而不是繼續寫那個要跳轉的舊地址。否則蜘蛛每轮都要多走一步,抓取容量就這么一点点被消耗掉。
多跳鏈條是怎么長出来的
鏈條很少是一次设計出来的,多半是几次改版叠加的结果。比如最早是 http 版本,後来上了 HTTPS,再後来统一到 www,最後又調整了域名或目錄结构。没人回头清理,于是一條 URL 要经過三四個 301 才能到终点。
還有一種情况是鏈條里混進了 302。302 表達的是“临时”,蜘蛛通常不會用它替換掉原来的 URL,也就是说舊地址會繼續留在队列里,下一轮再来一遍。如果這個“临时”已经存在了两年,那它對蜘蛛和用戶来说其實都已经是永久的了。
几種容易出問题的鏈路
- 循环跳轉:A 跳 B,B 跳 A,或者更長的环。蜘蛛跟几次之後會放弃,這個 URL 基本不會被收錄。
- 跳到 404:舊地址還在被外鏈引用,301 指過去却是個死頁面,等于把蜘蛛送進了死胡同。
- 跳轉终点带 noindex:蜘蛛跟到了頁面,却被告知不要索引,這一趟同样白走。
- 跳到一個還會再跳的地址:常见于 CDN、负载均衡、多地区自動跳轉。用戶看到的是一瞬間,蜘蛛看到的是一串請求。
- 用脚本或 meta refresh 做的跳轉:首轮 HTML 抓取时不一定被识別,容易和渲染阶段产生不一致。
跳轉與抓取容量的關系
抓取容量是有限的,蜘蛛每次来訪能處理的 URL 數量大致固定。站内如果有大量地址要走两三跳才到终点,等于同样的内容多占了几倍的抓取次數。數量不多时感受不到,一旦是几十萬級的舊 URL 堆积,影响就會体現在新頁面的發現速度上。
检查重定向鏈的几個動作
- 挑一批重要 URL(首頁、栏目頁、Sitemap 里的地址),用命令行工具或抓取工具看完整過程,记錄跳數和每跳的狀態碼。
- 把跳轉超過两跳的整理成清單,能合並的就合並成一次直達。
- 確認每個 301 的终点返回 200,並且這個终点本身短期内不會再改。
- 回头查一遍 Sitemap 和内鏈,看有没有直接指向跳轉 URL 的。
- 翻服務器日誌,找那些反复出現、狀態碼是 301 或 302 的請求,它們往往就是鏈條的源头。
處理原則
站内連結與 Sitemap 只寫终点地址;301 用一次就够,不要串成鏈;临时跳轉不要拿来当長期方案;跳轉的终点必须是可索引的 200 頁面。
重定向鏈不复杂,只是容易被忽略。定期把站内重要 URL 的跳轉路径過一遍,通常比事後從日誌里捞異常要省事得多。