在蜘蛛池入口頁的搭建里,跳轉是一種很常见的做法:入口頁本身不放正文,而是用 301、302、JavaScript 或 meta refresh 把訪問者(包括搜尋蜘蛛)带到目标 URL。但不同跳轉方式對搜尋蜘蛛的影响差別很大,直接影响它能不能較稳定地發現目标 URL。
先分清两件事:抓取和传递
搜尋蜘蛛處理跳轉时,通常會同时做两件事:一是顺着跳轉繼續請求下一個地址,二是判断這個跳轉是不是永久的,從而决定原地址如何被看待。對入口頁来说,我們主要關心第一件事——目标 URL 會不會被跟到;第二件事會影响入口頁自身的表現,但不等于目标 URL 就一定被抓取或收錄。
301 和 302:临时跳轉更容易被反复確認
301 表示永久跳轉,搜尋蜘蛛一般會較快地把原地址替換成新地址,之後較少重复訪問原地址。這對目标 URL 的發現是好事,但副作用是入口頁本身會逐渐失去被频繁抓取的理由。
302、303、307 表示临时跳轉,搜尋蜘蛛會更谨慎:它可能繼續訪問原地址,也可能不把原地址的信号轉移過去。如果你希望入口頁長期充当發現頁,临时跳轉未必是最差的選擇;如果你希望它尽快把抓取引向目标 URL,301 通常更干脆。
需要注意的是,無论哪種跳轉,都應该是服務器端返回的标准狀態碼跳轉,而不是在頁面里用脚本拼接一段跳轉代碼。
JavaScript 跳轉和 meta refresh
JavaScript 跳轉(location.href、location.replace 等)和 meta refresh 都属于頁面内跳轉。搜尋蜘蛛對它們的處理不如 HTTP 狀態碼跳轉稳定:
- 需要先渲染頁面或解析 HTML 才能拿到跳轉地址,抓取成本更高。
- 部分抓取场景下可能只记錄到入口頁,跳轉目标不一定当次就被跟随。
- meta refresh 若設定成 0 秒,行為接近跳轉;若設定几秒,搜尋蜘蛛通常不會等待。
- 跳轉地址如果由脚本動態生成,還可能受渲染失敗、资源加载失敗影响。
所以,如果目标 URL 的發現是刚需,優先用服務器端跳轉;頁面内跳轉更适合作為补充,而不是唯一路径。
跳轉鏈越長,丢失的概率越高
入口頁 A 跳到 B、B 再跳到目标 URL,這種鏈路並不少见。每多一层,就多一次請求、多一次失敗的可能。常见問题包括:中間层两個地址互相跳轉形成循环、中間层被 robots.txt 拦截、中間层响應超时。建议把跳轉控制在两跳以内,並且在日誌里確認每一跳都被抓取過。
几個容易被忽略的细节
- 跳轉目标是否可抓取。目标 URL 如果被 robots.txt 禁止、需要登入、或返回 4xx、5xx,跳過去也没有意义。
- 跳轉响應里不要夹带 noindex。在跳轉响應上加 X-Robots-Tag 的 noindex 指令,可能影响後續處理。
- 去掉多余的中間頁。有些入口頁先跳到一個統計地址再跳目标,統計地址一旦响應慢,整條鏈就被拖住。
- 留意协议和域名一致性。http 跳 https、不带 www 跳带 www,都會多一跳,要確認最终地址是唯一的。
- 用日誌驗證,而不是靠猜。看入口頁訪問日誌里目标 URL 的請求记錄,比看跳轉代碼更可靠。
和 sitemap、URL 提交配合时注意什么
如果入口頁用跳轉指向目标 URL,同时又把目标 URL 放進 sitemap 或手動提交,這是合理的冗余做法,两者不冲突。真正需要避免的是:入口頁跳到的地址和 sitemap 里的地址不一致,比如一個带參數、一個不带,導致搜尋蜘蛛把同一批内容当成两组 URL 反复處理。
怎么選擇
如果入口頁的目的是把搜尋蜘蛛引到目标 URL,建议:服務器端 301 或 302 直接指向目标,不做頁面内跳轉;跳轉鏈保持一跳;目标 URL 保持可公開抓取;同时用日誌观察目标 URL 是否真的出現了抓取记錄。發現量稳定之前,不要频繁更換跳轉方式,否則很难判断是哪一步起了作用。
跳轉只是把搜尋蜘蛛带到门口,能不能進待抓取队列、什么时候被抓,還取决于目标 URL 自身的可訪問性、站点整体质量和抓取配額,跳轉方式本身並不保證结果。