改版、換域名、合並栏目、把 http 迁到 https,這些動作几乎都會留下一批跳轉規則。規則配上之後,很多人就不再回头看,直到某天發現舊地址跳了三四個来回才落到目标頁,或者干脆跳進一個 404。蜘蛛顺着連結爬過来,一路都是跳跃,真正能拿到的信息却很少。
跳轉鏈為什么會拖慢抓取
每一次跳轉,對抓取工具来说都是一次新的請求。地址 A 返回 301 指向 B,B 又 301 到 C,C 才是真正的頁面,那么抓這一段内容至少要發三次請求。鏈條越長,消耗的抓取预算越多,留给其他頁面的机會就越少。更麻烦的是两種情况:
- 跳轉环:A 跳 B,B 又跳回 A,請求在两個地址之間来回,永遠到不了终点。
- 断头跳轉:跳轉目标本身就返回 404 或 410,等于把舊地址引到一個空房間。
這两種情况在浏览器里表現得很明顯,頁面打不開或者一直轉圈,但平时很少有人用舊地址訪問,所以問题可以潜伏很久。
最常见的几類跳轉問题
- 同一批舊地址被多层規則叠加處理,形成三跳以上的長鏈。
- 临时跳轉(302、307)用在長期迁移上。临时跳轉本意是短暂調整,長期挂着容易让人一直按舊地址理解。
- 协议與域名之間互相跳:http 跳 https,然後又跳到 www 版,www 版再跳回不带 www 的版本。
- 路径跳轉丢层級或丢參數,比如把文章頁一律跳到栏目首頁,用戶再也找不到原文。
- 跳轉目标換了内容,舊地址讲 A 主题,新地址却是 B 主题,两者毫無關系。
自查步骤
- 整理清單。把外鏈来源、搜尋後台里的舊地址、服務器日誌中出現過 301/302 的路径匯總成一張表。
- 逐條檢測。用 curl 的 -I 參數或在线工具請求舊地址,记錄返回的狀態碼和 Location 头,把跳轉鏈完整记下来。
- 合並長鏈。三跳以上的,直接改成從最初地址一跳到達最终地址,中間的過渡規則删掉。
- 排查环。遇到互相指的地址,手動確認哪個才是現在的正式版本,只保留一條單向規則。
- 驗證终点。確認最终地址返回 200,頁面内容與舊地址主题相關,正文能正常看到。
容易忽略的细节
跳轉類型要選對
永久迁移用 301 或 308,临时調整用 302 或 307。区別除了方法语义和缓存行為,更重要的是別把临时跳轉当成永久方案一直挂着。改版上线时定的跳轉,三個月後應该回头確認一次,而不是放着不管。
协议跳轉與站点配置叠加
服務器层、CDN 层、應用层如果都寫了跳轉規則,很容易叠出一條長鏈。检查时可以分层查看,確認只有一层负责把 http 轉到 https,其余层不要再做同样的動作。
内鏈和站点地图要一起更新
跳轉只是兜底手段,真正该做的是把站内連結、導航、站点地图里的地址換成新版本。如果站内還在大量指向舊地址,等于让蜘蛛每次都先撞一次跳轉才到目的地。
把巡检變成常規動作
- 改版前先導出舊 URL 與新 URL 的對照表,作為後續核對的依據。
- 每次结构調整後,抽一批舊地址實际請求一次,而不是只看規則文件。
- 關注日誌里 301、302 的數量變化,突然升高往往說明有新規則生效或舊規則冲突。
- 保留一份跳轉規則清單,注明添加時間和原因,方便以後清理。
跳轉的作用是把用戶和蜘蛛送到仍然有效的頁面,而不是把舊地址永久儲存下来。規則越少、鏈條越短,维護起来越轻松。