入口頁指向目标頁,中間常常要经過一次跳轉。跳轉方式不同,蜘蛛拿到的信号也不同:有的會把信号带到目标頁,有的只是把蜘蛛临时挪個地方,還有的需要等蜘蛛执行脚本才動。這篇文章把常见的几種跳轉方式放在一起對比,說明各自的适用场景和容易踩的坑。
蜘蛛是怎么處理跳轉的
蜘蛛解析到一個跳轉信号後,通常會做三件事:判断這個跳轉是永久還是临时、决定要不要繼續請求目标 URL、决定把原本属于跳轉頁的信号算给谁。整個過程里,跳轉頁本身往往不會進入索引,它更像一個中轉站。
所以判断跳轉方式是否合适,标准不是“人点開能不能到”,而是“蜘蛛能不能稳定地走完這一步,並知道该把什么算到目标頁头上”。
四種常见跳轉方式的差別
301 永久重定向
- 由服務端在响應头里返回,蜘蛛不需要执行任何脚本。
- 信号传递最明确,是入口頁長期迁移到目标頁时的常規選擇。
- 如果目标頁以後還會變,不建议用 301 把關系寫死。
302 / 307 临时重定向
- 适合短期調整,比如活動頁、灰度切換。
- 蜘蛛通常仍會訪問目标頁,但不會把跳轉頁和目标頁長期绑定。
- 長期用 302 做入口頁跳轉,容易让蜘蛛反复回来確認,抓取效率不高。
JavaScript 跳轉
- 依赖蜘蛛执行 JS,不同搜尋引擎的执行能力和时机差別較大。
- 如果跳轉逻辑藏在打包後的脚本里,或者需要等接口返回,蜘蛛可能根本走不到目标頁。
- 能用服務端解决,就不要只靠 JS。
meta refresh
- 寫在 HTML 的 head 里,蜘蛛能看到,但優先級低于服務端响應头。
- 延迟時間不要设得太長,否則蜘蛛可能先判定這一頁是低质内容頁再离開。
- 頁面正文過于單薄时,容易被当成纯中轉頁處理。
選擇顺序
- 能用服務端响應头,就優先用响應头,301 或 302 按關系的持久程度来定。
- 服務端不方便改動时,再考虑 meta refresh,並保證源頁面有基本的正文内容。
- JS 跳轉只作為最後手段,並且要保證不执行脚本时,用戶和蜘蛛也能看到指向目标頁的普通連結。
容易被忽略的几個细节
- 跳轉鏈長度:A 跳 B、B 跳 C、C 再跳 D,每多一跳就多一次不确定性,最好控制在一次以内。
- 目标頁的返回碼:跳轉頁返回 200 而目标頁返回 404,蜘蛛會認為這次跳轉是失敗的。
- 跳轉頁的 robots 設定:如果跳轉頁被禁止抓取,蜘蛛可能看不到跳轉指令,後續自然走不下去。
- 跳轉頁的内容量:整頁只有一句“正在跳轉”的頁面,長期看很难被当成有價值的中轉站。
- 跳轉是否稳定:同一 URL 今天跳 A、明天跳 B,蜘蛛會降低對该入口的信任。
什么情况下不建议跳轉
如果入口頁和目标頁本来就是两個獨立内容,硬用跳轉把它們绑在一起,效果往往不如各寫各的。跳轉适合“同一内容換了地址”的情形,不适合“两個不同内容硬要合並”的情形。
跳轉只是把蜘蛛從 A 带到 B,它不能替目标頁承担内容质量。入口頁做得再顺,目标頁承接不住,抓取的意义也有限。
上线前的自检
- 用真實的响應头或頁面源碼確認跳轉方式,而不是只看浏览器表現。
- 確認跳轉只有一跳,且目标頁返回 200。
- 確認跳轉頁没有被 robots 或登入墙挡住。
- 關掉 JS 後,检查頁面上是否還有可点击的普通連結。
- 观察一段時間内蜘蛛對入口頁和目标頁的訪問日誌,看跳轉是否真的被执行。
跳轉方式本身没有绝對優劣,關键是让蜘蛛每次走這條路的时候,结果都是可预期的。