很多人在搭蜘蛛池时,把精力放在域名、IP 和入口頁内容上,跳轉方式却随手一選,结果蜘蛛来了、入口頁也抓了,但目标頁始终没有動静。跳轉方式决定了蜘蛛能不能顺着入口頁走到目标頁,也决定了這條路走得顺不顺。
蜘蛛面對跳轉时的基本行為
搜尋引擎蜘蛛抓到入口頁的 HTML 後,會先解析頁面里的可抓取連結。對 HTTP 狀態碼跳轉(301、302、307 等),多數蜘蛛會直接跟随,但處理跳轉鏈时有层數限制。對 JavaScript 跳轉,則取决于蜘蛛是否渲染 JS 以及渲染队列的宽裕程度,不同搜尋引擎、不同抓取阶段的差异比較大。而 meta refresh 属于 HTML 层跳轉,兼容性相對稳定,但延时設定會影响蜘蛛的等待行為。
換句话说,跳轉方式不是能用就行,它直接關系到蜘蛛能否稳定地把入口頁和目标頁串起来。
常见的几種跳轉方式
直接連結
最朴素的方式,在入口頁正文或導航里放一個指向目标頁的普通連結。蜘蛛解析 HTML 时就能拿到目标 URL,不需要額外渲染,也不存在跳轉鏈過長的問题。缺点是入口頁和目标頁之間是推荐關系而非跳轉關系,用戶看到的是入口頁本身。
301 與 302
301 表示永久跳轉,302 表示临时跳轉。蜘蛛對两者的處理略有差別,但通常都會跟随。需要注意的是,如果入口頁本身希望被收錄,用 301 把它永久指向目标頁,入口頁可能逐渐被目标頁替代。批量使用时還要留意跳轉鏈不能套太多层,否則蜘蛛可能在中間某一层停下。
JavaScript 跳轉
通過脚本或前端路由完成的跳轉,對不执行 JS 的蜘蛛等于不存在。即便蜘蛛能渲染 JS,渲染队列通常也比普通抓取更慢、更稀缺。用這種方式时,最好同时提供一個 HTML 层的普通連結作為兜底。
meta refresh
寫在 head 里的 HTML 跳轉,把延时设為 0 时蜘蛛一般會立即跟随,比 JS 跳轉更稳。但它仍属于可用却不该作為唯一手段的方式,部分抓取场景會忽略它。
選跳轉方式时可以看這几個维度
- 目标頁是否需要被索引:需要的话,優先用蜘蛛容易解析的方式,减少對 JS 的依赖。
- 入口頁是否需要保留:入口頁還想自己收錄,就不要用 301 把它彻底交出去。
- 蜘蛛的执行能力:面向不同搜尋引擎时,JS 跳轉的覆盖情况不一样,別把全部入口頁压在一種方式上。
- 跳轉鏈長度:入口頁到中轉頁再到目标頁這種多跳结构,尽量压缩到一跳。
几個常见誤区
- 所有入口頁套同一套跳轉模板,狀態碼、延时、目标地址格式全都一致,批量生成後痕迹明顯。
- 用 302 做長期跳轉,把临时当成永久用,蜘蛛可能反复回来確認。
- 跳轉到被 robots 屏蔽或返回 404 的頁面,蜘蛛跟過去之後直接失敗。
- 入口頁既放跳轉,又放 canonical 指向目标頁,两種信号互相干扰。
一些使用建议
- 入口頁到目标頁優先用普通連結或 meta refresh,把 JS 跳轉当成补充而不是主力。
- 一個入口頁尽量只對應一跳,不要為了顯得自然額外加中轉层。
- 跳轉目标保持可達,定期抽查狀態碼,避免跳到失效頁面。
- 不同批次的入口頁可以混合使用跳轉方式,但同一批次内保持相對一致,便于排查問题。
- 结合訪問日誌观察,看蜘蛛是否真的走完了入口頁到目标頁的路径,而不是只抓了入口頁就走。
跳轉方式本身不會带来收錄,它只是把蜘蛛從入口頁带到目标頁的一條通道。通道通不通,比通道好不好看重要得多。