站点改版、域名調整、目錄结构調整之後,很容易留下层层嵌套的跳轉:舊地址跳到中間地址,中間地址再跳到現在的地址。對用戶来说只是多等一下,對抓取端来说,每一次跳轉都要單獨發起一次請求,而索引最终只會保留其中一個地址。
多跳重定向為什么會影响收錄
每次跳轉都是一次完整的請求往返。抓取预算有限时,跳轉鏈越長,能被有效抓取的頁面就越少。更麻烦的是地址不统一:外鏈指向舊地址,内鏈指向中間地址,canonical 又指向第三個地址,索引就难以判断该把哪個 URL 当作規范地址,收錄狀態和展示地址都容易波動。
這里要区分两件事:抓取端能顺着跳轉走到终点,不代表索引會立刻把终点当作規范地址。收敛需要時間,也需要各處信号保持一致。
常见的長鏈形態
- http 跳到 https,再跳到带 www 的版本,最後還补一個尾斜杠,四跳起步。
- 舊分類目錄 /old-cat/ 跳到 /cat/,/cat/ 又跳到 /new-cat/,中間层長期挂着跳轉。
- 頁面里的 canonical 寫的是中間地址,而不是最终返回 200 的那個 URL。
- 站点地图、面包屑、正文内鏈各自使用不同版本的地址。
- 歷史遗留的 302 临时跳轉一直没改成 301,索引可能繼續保留舊地址。
按顺序核對
- 用日誌或爬虫工具拉一遍站内 URL,记錄每個地址的跳轉次數與最终落地地址。
- 把跳轉超過一跳的地址列出来,标注来源是内鏈、外鏈還是站点地图。
- 检查内鏈:導航、面包屑、正文連結、站点地图统一指向最终地址,不再经由中間层。
- 检查各類声明信息:canonical、hreflang、移動版與桌面版声明,都寫最终地址。
- 合並跳轉鏈,把 A→B→C 直接改成 A→C,只保留必要的一跳。
- 確認废弃路径返回 301,而不是 200 空白頁、meta refresh 或 JS 跳轉。
- 改完後复驗,隔一段時間看索引中舊地址的數量是否下降。
狀態碼與跳轉方式別混用
301 表示永久,适合迁移後不再使用的舊地址;302、307 属于临时,長期挂着會让抓取端不确定是否该更新索引。meta refresh 和 JavaScript 跳轉對抓取端来说,不如 HTTP 狀態碼明确,能改成服務端跳轉的就改。
改内鏈比事後补跳轉更省事
改版时如果一次性把内鏈換成新地址,跳轉鏈根本不會出現。反過来,先上线新结构、再靠跳轉兜底,後續就要花時間逐條清理。两種做法的成本差別很大,越早统一越轻松。
可以观察的收敛信号
- 日誌中 301 命中次數占全部請求的比例是否下降。
- 索引里舊地址、中間地址的數量是否逐步减少。
- 爬虫發現的层級是否變浅,跳轉鏈是否變短。
- 站点地图中的地址與索引中的地址是否趋于一致。
跳轉是用来指路的,不是用来長期存放舊地址的仓库。鏈越長,信号越弱。
需要說明的是,把跳轉鏈理清楚只是减少干扰,並不保證頁面一定被收錄或排名提升。是否收錄、以哪個地址收錄,仍由搜尋引擎自行判断。