頁面跳轉在站点运营里几乎是常態:http 換 https、換域名、加 www、补尾斜杠、移動端适配、活動頁临时改地址。對用戶来说只是地址變了一下,對搜尋蜘蛛来说,每一次跳轉都是一次額外的請求。跳轉本身不是問题,成鏈的跳轉才是。
蜘蛛看到跳轉时的基本動作
蜘蛛請求一個 URL,拿到 3xx 狀態碼和 Location 头之後,會按規則去請求新的地址。它不會因為一個跳轉就放弃,但每一跳都會占用一次抓取机會,也會拉長從入口到正文的時間。如果鏈路里出現循环、跳轉到 5xx,或者跳轉到 robots.txt 禁止的地址,這一轮抓取基本就白費了。
- 301:永久跳轉,蜘蛛一般會把原地址的信号传递到目标地址,並逐步用新地址替換索引里的舊地址。
- 302 / 307:临时跳轉,蜘蛛仍會跟過去抓取,但通常保留原 URL 作為規范地址;長期使用临时跳轉,會让地址狀態變得模糊。
- meta refresh 與 JS 跳轉:需要先拿到 HTML 再执行,蜘蛛可能先把它当成一個普通頁面,第二轮或渲染阶段才走到目标地址,鏈路更長也更不稳定。
跳轉鏈太長會带来什么
常见的一條鏈是:http://example.com 跳到 https://example.com,再跳到 https://www.example.com,再到 https://www.example.com/,最後到真正的首頁。五次請求才落地。對少量 URL 無所谓,当成千上萬個内鏈都這样走时,抓取预算就消耗在中間环节上了。
更麻烦的是鏈路中的不确定性:中間某一跳返回 302 到登入頁,跳轉目标被带上了 session 參數,或者中間域名的證书已经過期。蜘蛛不一定每次都能走完,日誌里就會出現同一批 URL 反复請求、却始终不進入目标頁面的情况。
排查跳轉問题时,先看日誌里同一個 URL 的請求次數和最终落点,而不是只確認它有没有被抓過。
按什么顺序梳理跳轉
- 用带跳轉跟随的工具,對首頁、栏目頁、詳情頁各取几個样本,记錄完整跳轉鏈和每一跳的狀態碼。
- 找出鏈路超過两跳的 URL,優先處理入口級頁面,例如首頁、主導航和 Sitemap 里的地址。
- 统一协议與主机名:确定一個規范版本,其他版本直接一次 301 過去,不要串行跳轉。
- 把 meta refresh 和 JS 跳轉尽量換成服務端 301,尤其是永久迁移的场景。
- 检查跳轉目标是否可抓取:不要跳到 robots.txt 禁止的路径、登入頁或 404。
- 確認尾斜杠策略一致,内鏈、Sitemap、canonical 里使用的寫法保持一致,不靠跳轉来补齐。
容易忽略的几處
- 移動端跳轉:用 JS 判断 UA 再跳 m 站,蜘蛛可能拿到桌面版内容,也可能拿到空白頁;自适應或服務端判断更稳。
- 营销參數:跳轉时把 utm、session 等參數一路带過去,容易生成大量蜘蛛不愿深抓的地址。
- HTTPS 證书:中間域證书错誤會让跳轉鏈断在某一跳,日誌里表現為连接失敗而不是 3xx。
- 循环跳轉:A 跳 B、B 跳 A,蜘蛛在几跳之後就會停止,這一批 URL 長期無法進入正文。
改完怎么驗證
調整完成後,用爬虫工具或日誌观察一段時間:同一 URL 的請求次數是否下降,目标頁面的抓取量是否上升,中間地址是否還频繁出現在抓取列表里。抓取量的變化通常滞後,不要指望改完当天就有明顯区別。也不要把跳轉鏈当成一次性就能解决的開關,站点改版、活動上线时都值得重新跑一遍检查。