搜尋抓取

重定向鏈與蜘蛛抓取:每多一跳,抓取成本就多一层

蜘蛛遇到重定向會跟随,但每多一跳就多一次請求等待,抓取效率會打折扣。本文拆解301、302、307、308在抓取中的差別,梳理http到https、www、末尾斜杠、CDN規則等常见重定向鏈来源,並给出排查與收敛方法,帮站点把跳轉控制在合理范围内。

搜尋抓取

重定向鏈與蜘蛛抓取:每多一跳,抓取成本就多一层

蜘蛛抓取一個 URL 时,如果服務器返回 301 或 302,它會顺着 Location 繼續請求下一個地址。這個過程對用戶几乎無感,對蜘蛛却意味着多一次往返。單次跳轉通常可以接受,但当成串的重定向出現时,抓取效率會明顯被消耗。

重定向本身不是错,错在鏈太長

網站迁移、协议切換、域名统一,都离不開重定向。問题不在于“有没有跳轉”,而在于“要跳几次”。蜘蛛每跟一次跳轉,就要重新建立請求、等待响應,日誌里也會多出一條记錄。如果内鏈和 Sitemap 里寫的還是舊地址,蜘蛛每次訪問都要走完整條鏈,長期下来就是持續浪費。

一次重定向,蜘蛛要付出什么

  • 多一次 HTTP 請求的等待時間,尤其在响應較慢时叠加明顯;
  • 抓取队列里的 URL 狀態會變化,舊地址可能被反复抓取;
  • 跳轉鏈中間环节如果返回错誤,蜘蛛可能直接放弃;
  • 带參數的跳轉還可能被当成新 URL,增加重复抓取。

301、302、307、308 在抓取中的差別

301 表示永久移動,蜘蛛通常會逐步把索引指向新地址,舊地址的抓取频次會下降。302 表示临时移動,蜘蛛可能繼續抓舊地址,因為它不确定跳轉是否長期有效。307 和 308 會保持原請求方法,主要用于非 GET 场景,普通頁面里不多见。選擇哪種狀態碼,要和實际的迁移意图一致,不要長期用 302 替代 301。

鏈式重定向常见的几種来源

  • http 跳 https,同时 www 又跳非 www,叠成两跳;
  • 末尾斜杠規則不统一,/page 跳 /page/,再跳一次到最终地址;
  • 舊域名整体迁移後,内鏈没有同步更新;
  • CMS 插件、CDN、负载均衡各自加了一條跳轉規則;
  • 移動端适配或語言切換时,用跳轉代替直接輸出正确頁面。

怎么排查重定向鏈

  1. 用命令行工具逐层查看响應头里的 Location,確認到底跳了几次;
  2. 在浏览器開發者工具的 Network 面板里看請求鏈路;
  3. 翻服務器日誌,找同一個 URL 出現多條 301/302 记錄的情况;
  4. 检查 Sitemap 和主要内鏈,確認寫的是最终地址而不是中間地址;
  5. 確認跳轉终点返回 200,而不是又一個跳轉或错誤頁。

把重定向控制在合理范围

多數情况下,一跳到位是可以做到的。把 http 到 https、www 到非 www、末尾斜杠這些規則合並成一次跳轉,内鏈和 Sitemap 直接使用最终 URL,舊地址只保留必要的 301。不要让重定向鏈形成循环,也不要用重定向去掩盖本该返回 404 的頁面。

重定向是桥,不是路。桥太多,蜘蛛也會绕累。

抓取效率是一点点积累出来的。减少每一跳的等待,把入口直接指向最终地址,蜘蛛才能把時間花在真正的内容頁上。