重定向在蜘蛛池里的角色
入口頁的作用是给蜘蛛一個可抓取的落点,重定向則是把這個落点接到目标頁。两者並不冲突,但顺序和方式不同,结果差別很大。不少池子的問题不是蜘蛛不来,而是来了之後被一串跳轉送走,抓取预算花在中間环节,目标頁反而没拿到几次有效訪問。
301、302、307 的差別
- 301 永久重定向:适合入口頁确定退役、目标頁長期承接的情况。蜘蛛會逐步把原 URL 替換成新 URL,传递的信号相對明确。但入口頁如果本来承担着被發現的任務,301 之後它就不再是入口了。
- 302 / 307 临时重定向:适合短期活動、临时维護或測試。蜘蛛一般會保留原 URL 的索引,但传递的信号弱,長期挂着 302 容易让蜘蛛反复回訪原地址,浪費抓取次數。307 會保留請求方法,對普通 GET 抓取来说和 302 差別不大。
- meta refresh 與 JS 跳轉:渲染能力不同的蜘蛛處理结果不一致,即使能执行,也會多消耗一次渲染资源。作為兜底可以,作為主路径不建议。
重定向鏈的代價
A 到 B 再到 C 這種多跳,每一跳都要重新發起請求、重新解析和重新排队。蜘蛛的抓取预算有限,鏈越長,能真正到達目标頁的次數越少。更麻烦的是,中間某一跳返回 404 或超时,整條鏈就断了,而日誌里往往只留下第一跳的记錄。
建议把重定向控制在一次以内,入口頁直接指向最终目标頁,不用中轉頁做統計或跳板。
入口頁该不该重定向
如果入口頁本身能返回 200、有可讀内容、有指向目标頁的内鏈,通常比强制跳轉更稳。蜘蛛可以正常抓取入口頁,再顺着連結進入目标頁,路径清晰,後續也便于調整。
需要重定向的场景主要有几類:
- 入口頁确定不再使用,目标頁長期替代;
- 域名更換或路径重构;
- 临时活動結束,把訪問归到常青頁。
反過来,如果只是想“把蜘蛛快速送到目标頁”,用重定向替代内鏈,短期看省事,長期容易让入口頁失去被抓取的價值。
几個常见誤区
- 全池 302 到同一個目标頁:蜘蛛看到的入口頁都是空壳,重复度高,目标頁也可能被判定為異常集中。
- 重定向目标本身還带跳轉:目标頁又做了 301,鏈條被拉得更長。
- 用 JS 跳轉但頁面無内容:不执行 JS 的蜘蛛只看到空白頁,可能直接放弃。
- 重定向目标不可達:入口頁返回 302,目标頁 404,等于把蜘蛛引到死路。
怎么检查和調整
從訪問日誌里看入口頁的狀態碼分布,重点看 301、302 的比例,以及跳轉後目标頁的响應情况。如果發現大量重定向,但目标頁抓取次數没有上升,先检查鏈長和目标頁是否可達。用不带 JS 的抓取方式回放一次,確認最基本路径能不能走通。
調整时優先做减法:能合並的跳轉合並,能改成内鏈的改成内鏈,保留一條最短路径,让蜘蛛每次来訪都尽量落在有内容、可繼續前進的頁面上。