重定向本身不是問题,問题往往出在“鏈”上:一次跳轉變两次,两次變四次,最後蜘蛛停在中間某個环节,或者干脆放弃。站点运营里,重定向治理属于那種平时不起眼、出問题时又很难一眼看出来的工作。
跳轉鏈是怎么一点点長出来的
大多數跳轉鏈不是有意设計的,而是歷次改動叠加的结果:
- 域名從 HTTP 換成 HTTPS,又在某個時間点換了带 www 的寫法;
- 栏目改版,舊栏目地址跳到新栏目,新栏目後来又拆成了两個;
- 内容合並,A 頁跳到 B 頁,B 頁又跳到 C 頁;
- 為了统一结尾斜杠,多寫了一條規則,和已有的規則串在一起。
每加一條規則看起来都很合理,但它們叠起来之後,同一個地址可能要经過三次以上跳轉才落到最终頁面。
蜘蛛遇到跳轉鏈會發生什么
從抓取角度看,每一次跳轉都是一次額外的請求。假设一個地址要跳四次才到终点,蜘蛛抓一個頁面就消耗了五次請求的額度。規模一大,抓取预算就被這些中間环节吃掉了。
几種常见情况值得留意:
- 鏈條過長:蜘蛛對跳轉次數有容忍上限,超出後可能停在中間,最终頁面反而没被訪問到。
- 临时跳轉当永久用:本该用 301 的地方寫成 302,信号传递和地址替換的语义都不一样,蜘蛛可能會反复回来確認,而舊地址迟迟不退场。
- 跳到失效頁面:鏈條末端是 404 或 5xx,等于把蜘蛛和訪客一起送進死胡同。
- 跳轉目标不對應:舊内容讲的是 A,跳過去却是首頁或無關栏目,用戶和蜘蛛都得不到答案。
自查清單:從入口到终点走一遍
自查不用很复杂,把關键入口逐個手動走一遍就能發現大部分問题。可以用浏览器的網絡面板查看每一跳的狀態碼和 Location,也可以借助命令行工具批量驗證。
- 站内連結直接指向最终地址,不要為了省事让導航、内鏈经過一层跳轉。
- HTTP 到 HTTPS 一次到位,不要先跳到 HTTP 的 www,再跳到 HTTPS 的 www。
- 主域名形態唯一,www 與非 www、大小寫、结尾斜杠都统一成一種寫法。
- 站点地图里只放最终 URL,別把跳轉中的地址寫進去,那等于让蜘蛛多跑一趟。
- 检查鏈長,一條鏈上出現两次以上跳轉就该合並規則。
- 核對跳轉目标,同主题内容跳到同主题頁面,栏目調整跳到對應栏目。
服務器與日誌层面的排查
服務器日誌里的 3xx 狀態碼是很好的线索,按訪問量排序,排在前面的跳轉地址通常就是最值得處理的。同时留意两点:一是跳轉規則是否寫在了最外层,導致所有請求都要過一遍;二是舊的跳轉規則在改版後是否還残留,和新規則相互干扰。
改版或域名迁移期間,建议把跳轉規則集中在少數几個位置维護,並在上线後批量驗證一批代表性 URL,而不是等蜘蛛把問题带回来。
跳轉不是越少越好,而是每一條都要有明确理由:要么把舊地址送到新地址,要么把用戶送到正确的頁面。多余的中間环节,越早删掉越好。
把重定向检查放進日常节奏
重定向治理不需要天天做,但每次改版、換域名、合並栏目之後都應该走一遍。比較實际的做法是:變更前先列出受影响的地址清單,變更後按清單逐個驗證,確認最终落点、狀態碼和跳轉次數都符合预期,再观察一段時間日誌里 3xx 的分布有没有異常上升。把這一步寫進改版流程,比事後回头补要省力得多。