訪客点開一個两年前的舊連結,地址栏闪了三下才落到頁面上;蜘蛛顺着外鏈爬進来,也要跟着跳三次才拿到正文。單看每一次跳轉都不算错,合在一起就是不必要的開销。重定向本身是好東西,問题在于規則一层层叠加之後,没有人再回头整理。
跳轉鏈是怎么一点点攒出来的
- 域名改造分批做:先上 HTTPS 加一條規則,再统一带 www 加一條,http 到 https、去 www 到带 www 各寫各的,鏈自然就長了。
- 栏目反复改版:舊目錄 301 到新目錄,新目錄後来又被合並,中間那一跳没人回头删。
- 服務器和程序各寫一半:Nginx 配置里有一條,CMS 的跳轉插件里還有一條,两條規則互相叠加。
- 临时跳轉長期化:当初用 302 试水,地址後来定下来了,302 却一直没換成 301,鏈就一直留着。
- 内鏈直接抄舊地址:編輯從收藏夹或舊文档里複製連結,站内連結本身就指向會跳轉的地址。
為什么值得花時間清理
每一次跳轉都是一次額外的請求和一次額外的响應,在移動網絡下体感尤其明顯。對蜘蛛来说,跳轉鏈會消耗有限的抓取预算:同一個终点地址,因為前面挂了三四跳,被訪問的成本成倍增加,某些情况下還會影响抓取频率的判断。對你自己来说,日誌里的狀態碼會變得难讀,排查問题时得顺着鏈一层层猜。
需要說明的是,必要的跳轉不能删。域名迁移、HTTPS 切換、頁面永久換址,這些场景本来就该用 301 把舊地址指向新地址。要清理的是同一目标上堆起来的重复跳轉,不是把所有跳轉都砍掉。
怎么自查:從抽样開始
- 先去訪問日誌里挑样本:按訪問量排序,取前几十個返回 301 / 302 的地址,再挑几個外鏈带来的引荐来源。
- 用 curl -IL 或者浏览器開發者工具的網絡面板,把完整跳轉鏈看一遍,记下每一步的狀態碼和 Location 头。
- 確認中間有没有混進 302。临时跳轉不會被浏览器長期记住,鏈會一直存在,混在里面很容易被忽略。
- 看终点是否返回 200。有的鏈最後落到一個已下线的頁面,蜘蛛跟到底只拿到一個软 404。
- 检查有没有 A 跳到 B、B 又跳回 A 的循环,這種鏈通常會让抓取直接卡住。
- 顺手核對站内連結、導航和站点地图,看有多少指向的是會跳轉的舊地址,而不是终点地址。
把鏈压成一條直達規則
- 能合並的規則就合並:让舊地址一次性指向最终地址,中間那些中轉站删掉。
- 確認是永久換址的,把 302 改成 301;還在測試期的跳轉,最好別让蜘蛛大量爬到。
- 站内連結、導航、站点地图、RSS 一律寫终点地址,减少頁面上自带的跳轉。
- 跳轉規則集中放在一處管理,寫清楚生效顺序和注释,避免两份配置互相覆盖。
- 改完抽样复测一遍,尤其看老地址是否仍然能到達终点,別把可用連結改成死鏈。
改完之後看什么
接下来一两周,留意日誌里舊地址的出現次數是不是在下降,以及 200 的比例有没有變化。如果發現某個老地址開始返回 404,多半是規則寫漏或寫错,补上就行。真正要避免的,是打開配置一看,同一條舊地址下面挂着三四條規則,谁也不敢删。
跳轉是為了让舊地址繼續有用,不是為了把訪客和蜘蛛送上一段接力赛。規則越简單,後面越好维護。