站点改版、換域名、調整目錄结构时,最容易留下痕迹的地方就是重定向。對蜘蛛来说,每一次跳轉都是一次額外的請求:抓到入口 URL、拿到 3xx 狀態碼、再去訪問新地址、最後才拿到内容。跳轉本身不是問题,問题在于鏈路是否清晰、层數是否可控、终点是不是它真正想要的那個頁面。
一次跳轉到底多花了什么
蜘蛛訪問 A,得到 301 到 B。它對 A 的這次抓取基本没有产生内容價值,還要把 B 重新排進队列再抓一次。如果 B 又跳到 C,成本繼續叠加。鏈路越長,單位時間内真正被解析的頁面就越少,抓取額度被消耗在空轉上。所以判断标准可以很朴素:能让蜘蛛一步到位的,就不要让它走三步。
不同重定向方式,蜘蛛的反應不一样
301 / 308:永久迁移
這類跳轉表達的是“原地址以後不再使用”。蜘蛛通常會把權重與索引信号轉移到目标地址,並在後續抓取中直接使用新地址。用于域名更換、目錄調整、URL 規范化是合适的。但要注意终点應当稳定,不要今天跳 A、明天跳 B,否則新地址迟迟收敛不下来。
302 / 307:临时跳轉
临时跳轉意味着原地址還會回来。如果長期用 302 做永久迁移,蜘蛛可能反复回来抓原地址,形成“抓取—跳轉—再抓取”的循环,新舊地址都不容易稳定。常见情况是活動頁、登入頁挂着 302,活動結束之後忘了改回静態地址。
meta refresh 與脚本跳轉
HTML 里的 meta refresh 和 JavaScript 跳轉,需要蜘蛛先渲染頁面才能识別,鏈路更不可控,中途出错的概率也更高。能用服務端 301/302 解决的,尽量不要交给前端處理。
跳轉鏈路上最容易出問题的三種情况
- 鏈路太長:A→B→C→D 层层轉,任何一环超时都會让整條路径作废。
- 跳轉循环:A→B→A 這種互指,蜘蛛會在里面反复消耗,日誌中表現為同一批 URL 高频出現却始终拿不到 200。
- 终点错位:舊詳情頁 301 到分類首頁,或者跳到 404、跳到需要登入的頁面。蜘蛛拿到了 200,但拿到的不是原来那個内容。
動手排查的顺序
- 從訪問日誌里筛出狀態碼為 3xx 的 URL,按出現频次排序,先處理量大的那批。
- 對每個 URL 手動跟随跳轉,记錄跳轉层數、每一跳的狀態碼和最终落地地址。
- 把层數超過两跳、终点與来源主题無關、或终点本身是 404/5xx 的單獨列出来。
- 检查 Sitemap、内鏈和外部連結里是否還在使用舊地址,避免蜘蛛持續被引向跳轉入口。
- 修正後保持观察一段時間,看日誌中這批 URL 的抓取是否逐渐轉向新地址。
和内鏈、Sitemap 的配合
重定向是补救手段,不是常規路径。站内連結、Sitemap、面包屑里應当直接寫新地址,让蜘蛛第一次就走對。如果内鏈還指着舊地址,即便做了 301,蜘蛛每次仍要多走一步;量大了,這部分损耗會相当明顯。另外,Sitemap 中尽量只放最终可訪問的 URL,不要把跳轉地址也寫進去。
服務器层面的连带影响
跳轉鏈路會放大服務器的不稳定。原本一次請求能完成的事變成两次三次,任何一次连接超时、TLS 握手失敗或响應過慢,都會让整條路径失效。批量迁移时,建议把跳轉規則寫得尽量扁平,並確認跳轉目标所在的服務能承受叠加後的請求量。
判断重定向是否健康,可以問自己一句:如果我是蜘蛛,從入口到内容要几次請求,中途有没有可能拿不到東西。
重定向本身不會带来收錄,也不會因為寫得規范就提升排名。它更像是把路修直——让蜘蛛用更少的成本走到该去的地方,剩下的仍然取决于内容质量與站点的長期稳定。