把一個舊地址指向新地址,本身是很正常的操作。麻烦在于舊地址 A 跳到 B,B 又跳到 C,C 才是真正的落地頁。用戶和蜘蛛每走一步都要發一次請求、等一次响應,手机網絡下的体感尤其明顯。重定向鏈不是一次配置失誤,多數时候是几次改版叠加出来的结果。
跳轉本身没错,错的是叠成一條鏈
一次跳轉的成本不只是多一個請求。跨域跳轉還會多一次解析和握手,鏈路一長,等待時間就從几十毫秒變成几百毫秒。對訪客来说是多点一次;對蜘蛛来说,是同样的抓取预算被分给了中間地址。
判断标准可以很简單:一條舊地址如果需要跟随两次以上才能到最终頁面,就值得單獨拎出来處理。
常见的几種跳轉形態
鏈式跳轉
改版分几次做的时候最容易出現。第一版把 /old 指到 /new,第二版又把 /new 指到 /final,两批規則都没清理,鏈條就越接越長。表面上看每條規則都對,合在一起就是一條弯路。
把 302 当 301 用
有些後台或插件預設给 302。临时跳轉反复出現,搜尋引擎會更谨慎地處理地址迁移。确定是永久變更的,尽量一次用 301;确實是临时活動頁,再用 302,並且记得到期後收掉。
循环和断头
A 跳 B、B 又跳回 A,浏览器會直接报错。另一種情况是跳到 404,或者跳到已经下线的域名。這两種在日誌里通常表現為一段 3xx 之後紧跟着 4xx,属于明确要修的故障。
协议、域名、尾斜杠叠加
http 跳 https 是一跳,不带 www 跳带 www 又是一跳,末尾缺斜杠再跳一次。規則分開寫在不同的配置里时,一個地址可能要走三跳才落地。可以先把這几類規則合並成一次判断,让請求直接到達最终地址。
怎么把跳轉鏈查出来
- 用 curl 的 -I 或 -L 參數看响應头里的 Location,连續跟随几次,完整鏈條就出来了。
- 浏览器開發者工具的網絡面板,勾選保留日誌,逐條看 3xx 請求指向哪里。
- 服務器日誌里按狀態碼筛出 3xx,統計哪些来源路径出現频率最高,優先處理高频的。
- 拿舊站点地图和新站点地图做比對,找出没有直接映射到最终地址的那批 URL。
- 抽查站内連結,尤其是導航、面包屑和正文里的老連結,看是否還指向中間地址。
修复的顺序比一次改完更重要
- 先修循环和断头,這两類是明确故障,處理成本低、影响直接。
- 再把鏈式跳轉压平,让每條舊地址一步直達最终地址。
- 然後统一协议、域名和尾斜杠規則,减少規則之間的叠加跳轉。
- 最後回头改站内連結,让内部入口直接用最终地址,而不是绕一层跳轉過去。
- 保留一份跳轉映射表,後續改版前先查表,避免重复添加和前後矛盾。
長期维護的几個习惯
- 跳轉規則集中管理,不要散落在多處配置里各寫一段。
- 每次改版前先導出舊 URL 清單,上线後對照检查一遍。
- 定期抽查日誌中的 3xx 占比,看有没有新的鏈條悄悄長出来。
- 内鏈尽量指向最终地址,跳轉主要留给外部歷史連結。
重定向是過渡工具,不是長期结构。把地址收敛到唯一入口,訪客少等几次,蜘蛛也能把更多時間花在真正的内容上,而不是反复確認哪條路径才算數。