做入口頁时,有人為了让連結看起来更“干净”,會把入口頁上的地址寫成自己的跳轉脚本,或者干脆让入口頁的某些 URL 通過 301、302 轉到目标URL。于是問题就来了:搜尋蜘蛛抓到入口頁之後,會不會沿着這個跳轉繼續走到目标URL?要回答這個問题,得先把跳轉的類型分清。
HTTP 跳轉和頁面内跳轉不是一回事
服務端返回 301、302、307、308 這類狀態碼並带上 Location 响應头,属于 HTTP 层的跳轉;而 meta refresh、JavaScript 里的 location.href,属于頁面内容层的跳轉。两者在搜尋蜘蛛眼里處理方式不同,這里只讨论前者。另外,“入口頁上放一條 a 标簽指向跳轉地址”和“入口頁本身返回 301”,也是两種不同情况,前者是連結,後者是跳轉。
301 和 302,蜘蛛的處理差別
- 301(永久跳轉):搜尋引擎一般會把它理解為地址永久變更,愿意把原 URL 的抓取與索引信号往新地址上迁移,蜘蛛通常會跟進。
- 302(临时跳轉):表示临时狀態,搜尋引擎預設保留原 URL,蜘蛛一般也會跟過去看看,但不會把目标URL当成原地址的替代,索引仍可能停留在原 URL 上。
- 307 / 308:307 類似 302,308 類似 301,同样属于服務端跳轉。
需要說明的是,這種信号迁移的“传递率”並不是百分之百,跳轉鏈越長、中間环节越复杂,损耗就越明顯。
跳轉能不能帮蜘蛛“發現”目标URL
從 URL 發現的角度看,只要蜘蛛抓取了带跳轉的地址,並跟進了 Location 指向的 URL,目标URL就會進入待抓取队列,所以這條路径在原理上是通的。但實际效果會受几件事影响:
- 多消耗一次抓取:跳轉本身要占一次請求,入口頁获得的抓取机會有一部分被跳轉動作吃掉了。
- 跳轉鏈長度:A 跳 B、B 跳 C,鏈條越長,蜘蛛中途停止跟進的可能性越高。
- 目标URL自身狀態:目标URL 被 robots.txt 禁止抓取、返回 4xx 或 5xx、或者自身带 noindex,跳轉再正常也没有用。
- 跳轉是否稳定:跳轉时有时無,或者按訪問来源返回不同结果,會让蜘蛛的判断變得犹豫。
几種容易被忽略的错誤做法
- 把長期有效的地址變更寫成 302,導致新舊地址長期並存、信号分散。
- 跳轉鏈套三四层,中間還夹着參數跳轉或短鏈服務。
- 入口頁上放了大量跳轉地址,每條都要走一次跳轉,抓取效率被摊薄。
- 跳轉目标上带 session id、時間戳之類的參數,造成同一個目标URL出現多個地址形態。
相對稳妥的處理方式
如果只是想让蜘蛛發現目标URL,能在入口頁直接给一條普通 a 标簽連結的,就優先直接给,不必绕跳轉。跳轉更适合用在域名统一、HTTP 迁移到 HTTPS、老地址替換這類确實需要改地址的场景。
跳轉只是让蜘蛛多走一步,它解决的是“地址寫到哪儿”的問题,不解决“目标URL值不值得抓、能不能被索引”的問题,也不构成任何收錄或排名上的承诺。
要判断跳轉到底有没有起作用,最直接的办法還是看服務器日誌:入口頁被抓取之後,紧接着有没有出現目标URL的抓取记錄。如果入口頁抓取频繁、目标URL却始终不出現,那問题多半不在跳轉形式,而在入口頁本身的质量,或者目标URL那邊存在抓取限制。