重定向是域名统一、协议切換、栏目改版时的常規手段,本身没有問题。真正麻烦的是“鏈”:一個地址先 301 到 A,A 再 302 到 B,B 又补一次尾斜杠修正才落到 C。對用戶来说只是多等一會,對搜尋蜘蛛来说,這是三次獨立的 HTTP 請求、三次抓取配額、三次超时或中断的机會,而它最後只拿到一份内容。
為什么跳數會變成抓取成本
抓取配額不是無限资源,它取决于站点整体响應速度、服務器承载能力和歷史抓取表現。鏈式重定向带来的額外消耗,主要体現在三個方面:
- 請求次數成倍增加。每跳一次就是一個完整請求,包含 DNS、TLS 和响應头,蜘蛛要重复走一遍。
- 失敗概率叠加。鏈上任何一环超时或返回 5xx,整條路径就断了,URL 可能被标记為抓取異常。
- URL 身份變模糊。中間地址如果被別處引用,蜘蛛會同时记住多個版本,落地頁之外的地址也可能被当成獨立 URL 處理。
所以“一次跳轉就落地”和“三次跳轉才落地”,消耗差別是實打實的。
多跳鏈常见的几個来源
- 协议與域名层层收口。http 先跳到 https,https 的裸域再跳到 www,最後才到真正的落地頁。
- 迁移时没有做一一映射。舊栏目整体跳到新栏目首頁,再由栏目首頁跳到詳情,形成两跳。
- CDN 與源站各配了一层規則。邊缘节点跳一次,回源後源站又跳一次,蜘蛛看到的就是两跳。
- 參數清理用了 302。带參數的 URL 先 302 到去參版本,去參版本又因大小寫或尾斜杠再修正一次。
- 用 JS 跳轉或 meta refresh 代替 301。蜘蛛需要先拿到頁面内容再解析,成本比服務端跳轉更高,而且不一定會跟随。
用三步把跳數核出来
- 命令行走一遍。用支持跟随跳轉的命令請求几個代表性 URL,把每一跳的狀態碼和 Location 打印出来,數清一共几次。重点抽查:首頁、栏目頁、被外鏈最多的詳情頁、带參數的列表頁。
- 在抓取日誌里找连續請求。同一個蜘蛛 IP、同一時間段内,针對同一来源路径出現多次請求,且目标地址逐次變化,通常就是一條跳轉鏈。把這類路径整理成清單。
- 對照配置抽查。拿清單去核對 CDN 規則、源站伪静態、反向代理和框架路由,確認每一跳由哪一层产生。很多时候多跳不是设計出来的,而是几层配置各自加了一跳。
把多跳收敛成一次落地
- 跳轉目标一律寫最终 URL,不要先跳到中間頁再跳一次。
- 同一個来源只保留一條規則,邊缘层和源站层不要重复配置。
- Sitemap 里只放落地 URL,不放會跳轉的中間地址。
- 站内連結直接指向最终地址,避免自己制造新的入口跳轉。
- 能用服務端 301 的,就不要用 JS 或 meta refresh 代替。
- 批量修改前先導出跳轉規則表,逐條标注“来源—目标—跳數”,改完再重新數一遍。
改完之後观察什么
改完不必急着下结论,先看現象:同一路径在抓取日誌里是否還有连續多次請求,重定向類的抓取異常是否下降,原本卡在中間地址的 URL 是否開始出現對落地頁的抓取。
把跳數控制在一次,不只是省一次請求,更是让蜘蛛记錄的唯一地址更清晰。中間地址被清掉,後續的 URL 發現、去重和内容保鲜都會顺一些。
小结
重定向不必全部消灭,需要消灭的是“鏈”。把每一跳確認清楚,让蜘蛛一次請求就拿到最终内容,抓取配額才能用在真正需要更新和發現的 URL 上。