先区分两種跳轉
很多人在排查 URL 發現問题时,會把两件事混在一起:一種是頁面 HTML 里寫了連結或 meta refresh,另一種是服務器直接返回 301、302、307、308 這類狀態碼。前者需要搜尋蜘蛛先把頁面 HTML 抓下来、解析出連結;後者是請求發出後,服務器在 HTTP 层就把地址換掉了,搜尋蜘蛛還没拿到任何 HTML。
這两條路径對目标 URL 的發現影响不一样。meta refresh 需要頁面被解析,服務器跳轉則主要取决于搜尋蜘蛛愿不愿意繼續跟下一跳。
搜尋蜘蛛遇到 3xx 的基本逻辑
当搜尋蜘蛛請求入口頁,服務器返回 301 或 302,响應头里带着 Location,搜尋蜘蛛通常會把這次跳轉理解為该 URL 的新地址,然後對 Location 指向的 URL 再發起一次請求。這個過程可以重复,但不會無限重复。
- 301 一般被理解為永久跳轉,搜尋蜘蛛更倾向于把原 URL 的信号归到目标 URL;
- 302、307 属于临时跳轉,處理上更保守,原 URL 可能仍會被反复抓取;
- 每一跳都會消耗抓取资源,跳數越多,留给真正内容頁的抓取预算就越少。
多跳跳轉:搜尋蜘蛛會跟到第几跳
搜尋引擎没有公開最多跟几跳的硬性數字,但實践里,短鏈(一到两跳)基本都能跟到终点;跳數一多,比如五跳以上,不同引擎、不同站点的表現會明顯分化:有的繼續跟,有的停在某一跳,有的干脆放弃整條鏈。
更麻烦的是,跳轉鏈中間任何一跳出問题,後面就断了。常见情况包括:
- 中間某一跳返回 404 或 410,整條鏈断在這里;
- 中間某一跳返回 5xx,搜尋蜘蛛可能過段時間重试,也可能降低對该路径的抓取频率;
- 跳轉鏈里混入登入頁、驗證頁、地区選擇頁,最终落点不是你想让搜尋蜘蛛看到的内容;
- 跳轉鏈形成环,A 跳到 B、B 又跳回 A,搜尋蜘蛛跟几圈後會放弃。
跨域跳轉要單獨看
如果入口頁 302 到另一個域名下的目标 URL,搜尋蜘蛛會跨域跟過去,但這不等于两個域名之間有什么信任传递。跨域跳轉只解决能不能發現這個 URL,不解决這個 URL 會不會被收錄。而且在批量入口頁同时跳向同一個目标域名时,這種模式更容易被当成異常。
跳轉後,浏览器和搜尋蜘蛛看到的不完全一样
用戶訪問时,浏览器會跟着跳,地址栏最终停在目标 URL。搜尋蜘蛛這邊,它记錄的是原 URL 跳轉到目标 URL 這個事實;目标 URL 是否被当成獨立 URL 處理,取决于跳轉類型以及该 URL 自身的返回狀態。
關键点在于:如果目标 URL 自己返回 noindex、被 robots.txt 屏蔽,或者返回 404,那么跳轉只是把它暴露出来,並不會让它進入索引。
用 301/302 做 URL 發現,怎样更稳
- 已经确定不再使用的入口 URL,優先用 301;临时活動頁、临时落地頁用 302,別長期用临时跳轉代替永久跳轉。
- 把跳轉鏈控制在 1 到 2 跳,不要在中間叠加統計跳轉、地区跳轉、短鏈跳轉。
- 不要用跳轉完全代替頁面里的普通連結。如果入口頁本身能正常返回 200 並放連結,就让搜尋蜘蛛按普通連結發現目标 URL,鏈路更清晰。
- 跳轉目标必须是可抓取的 200 頁面,且没有被 robots.txt 或 noindex 拦住。
- 监控入口頁的狀態碼變化,尤其是批量入口頁共用同一套跳轉規則时,一個配置错誤會影响整批 URL。
跳轉能帮搜尋蜘蛛走到目标 URL,但走得到不等于收得下。發現和收錄是两件事。
排查清單
- 用 curl 或抓包工具逐跳查看 Location,確認總跳數;
- 检查最终落点 URL 的狀態碼、robots 規則和 noindex 标记;
- 對比服務器日誌,看搜尋蜘蛛是停在中間某一跳,還是跟到了终点;
- 確認是否存在循环跳轉、跨域跳轉比例過高、跳轉目标集中度過高的問题。
如果日誌里顯示搜尋蜘蛛對入口頁的請求很多,但對最终目标 URL 的請求很少,通常先排查三件事:跳轉鏈是不是太長、中間有没有失敗跳轉、目标 URL 本身是否可抓取。把這些排掉,再谈其他優化才有意义。