蜘蛛池的入口頁经常承担一個中間角色:把蜘蛛從舊域名、舊路径或者已经不用的一批 URL,引到目前真正想让它抓取的目标頁。這個過程中,重定向是最常用的手段,但也是最容易被忽略的环节。重定向方式選得不合适,蜘蛛可能在鏈上反复绕行,消耗抓取预算,最後没走到目标頁。
先分清几種跳轉在抓取流程中的差异
服務端重定向和客戶端跳轉,對蜘蛛来说不是一回事。
- 301 永久重定向:告诉蜘蛛原地址已经永久迁移到新地址。搜尋引擎會逐步把原 URL 的抓取和信号轉移到目标 URL,但需要時間,不是配置完立刻生效。
- 302 / 307 临时重定向:表示迁移是临时的。蜘蛛通常仍會繼續抓原 URL,不會把原 URL 從索引中移除,目标 URL 也不一定被当作正式地址。
- meta refresh:寫在 HTML 里的客戶端跳轉。蜘蛛能解析一部分,但把它当弱信号,延迟大于 0 秒时基本不會被跟随。
- JavaScript 跳轉:依赖渲染能力。對不执行 JS 的抓取程序来说,頁面里没有可跟随的連結,等于死路。
301 适合什么场景
域名更換、http 轉 https、URL 结构調整,這些長期變更适合用 301。使用时注意几点:目标頁必须能正常返回 200,不要 301 到一個本身又被重定向的地址,形成跳轉鏈;不要把所有舊 URL 都 301 到同一個首頁,這種做法容易被判断為软 404 或低质聚合;跳轉目标和原頁面主题保持對應關系,一一對應最稳妥。
302 什么时候更合适
临时活動、短期分流、正在測試的入口頁,可以用 302。它的好處是原 URL 保持有效,蜘蛛不會立刻放弃原地址。但不要把 302 当作長期方案:如果几個月都不改回 301,蜘蛛對原 URL 和目标 URL 的判断會變得模糊,抓取分配也可能不稳定。
meta refresh 與 JS 跳轉的邊界
如果确實只能用客戶端跳轉,把延迟设為 0 秒,並在頁面上放一個可点击的普通連結作為兜底。這样即使抓取程序不执行跳轉,也能顺着連結往下走。延迟设為 3 秒、5 秒的做法,對蜘蛛基本無效。JS 跳轉同理,建议同时保留 noscript 或静態連結,否則部分抓取請求會停在目前頁。
重定向鏈自查清單
- 每條入口 URL 到目标頁之間,跳轉不超過一跳。
- 最终目标 URL 返回 200,且未被 robots 屏蔽、未带 noindex。
- 没有把大量不相關舊 URL 集中跳向同一個目标頁。
- 301 與 302 的使用和變更意图一致,临时跳轉没有長期挂着。
- 用命令行工具或日誌確認實际返回的狀態碼,而不是只看配置文件。
- 跳轉目标頁本身有可抓取的内容和正常的内鏈,不是空頁。
- 改完重定向後,观察一段時間日誌,確認蜘蛛能走到目标頁。
從日誌驗證重定向是否被跟随
重定向配置完成後,可以在服務器日誌里看三件事:蜘蛛是否還在反复請求 301 的源 URL;目标 URL 是否開始出現蜘蛛訪問记錄;目标 URL 的抓取频次是否比之前有變化。如果源 URL 一直被抓、目标 URL 始终没有訪問,說明重定向没有被有效跟随,需要检查狀態碼、跳轉鏈和頁面可訪問性。
重定向是通道,不是目的地。入口頁做得再多,蜘蛛顺着通道走不到可抓取的目标頁,前面的工作也很难發挥作用。