蜘蛛每跟一次跳轉,都要多花一次請求
当一個 URL 返回 301 或 302,蜘蛛不會立刻把它当成最终頁面。它會先记錄跳轉目标,再發起一次新的請求。跳轉一次還好,如果一條鏈上有三次、五次跳轉,蜘蛛就要连續走完這几步,才能看到真正的頁面内容。這個過程會占用抓取预算,也會拉長單次抓取的時間。
更麻烦的是,跳轉鏈往往不是刻意设計的,而是在域名迁移、协议升級、目錄结构調整中慢慢堆积出来的。蜘蛛每次回訪都要重新走一遍,损耗是持續發生的。
几種重定向類型,蜘蛛的理解不一样
- 301 永久重定向:表示舊地址永久換到新地址,蜘蛛通常會把信号和後續抓取逐步轉移到目标 URL。
- 302 / 307 临时重定向:表示临时跳轉,蜘蛛可能仍會保留原 URL 的抓取,不一定會立刻替換。
- 308 永久重定向:和 301 類似,但明确要求保持請求方法,蜘蛛一般按永久跳轉處理。
如果只是為了把用戶從 http 带到 https,或者從舊域名带到新域名,應该用 301 或 308,而不是 302。用错類型,蜘蛛可能長期在两個地址之間反复確認,落地頁的抓取稳定性會受影响。
跳轉鏈通常從哪里来
常见的堆积点有几類:
- http 到 https 的协议跳轉,再加上 www 與非 www 的跳轉,容易形成两跳。
- 舊域名整体迁移到新域名,但内鏈和 Sitemap 里還保留舊地址。
- URL 改版後,舊目錄 301 到新目錄,新目錄又 301 到带參數的最终地址。
- CDN 或负载均衡层配置了額外跳轉,源站也有一层跳轉。
- 登入、地区選擇、語言切換等中間頁,用跳轉把蜘蛛带向預設頁。
這些跳轉單獨看都有理由,叠在一起就會拉長路径。蜘蛛從入口到落地頁的每一步都要重新解析、重新請求,服務器也要多响應几次。
落地頁的取舍:尽量让内鏈直接指向终点
最直接的做法,是让站内連結和 Sitemap 里的 URL 都指向最终地址。比如 https 已经全站可用,内鏈就不要再用 http;确定使用 www 域名後,非 www 地址只保留跳轉,不再出現在導航和文章正文里。這样蜘蛛從内鏈進入时,一次請求就能到達落地頁。
跳轉可以用,但最好不要让蜘蛛连續跟两次以上。一跳到達最终 URL,是更省抓取预算的结构。
Sitemap 里提交的也應该是最终 URL,而不是會跳轉的舊地址。如果 Sitemap 里混入大量跳轉地址,蜘蛛會先抓這些地址,再跟着跳到目标,額外消耗抓取次數。對于已经確認不再使用的舊 URL,可以用 301 指向最相關的目标頁,而不是统一跳到首頁或某個不相關的頁面。
检查跳轉鏈的几個入手点
- 用命令行或抓取工具查看單條 URL 的响應狀態和 Location 头,確認跳轉次數。
- 從服務器日誌里篩選 3xx 狀態碼,看看哪些地址在被蜘蛛频繁請求。
- 抽查内鏈和 Sitemap 中的 URL,確認它們是否直接返回 200。
- 检查 CDN、反向代理和源站配置,避免同一层重复設定跳轉。
- 對于跳轉鏈,優先合並成一次 301,再確認目标頁可正常訪問。
服務器稳定性與跳轉後的响應
跳轉本身不复杂,但跳轉後的落地頁必须稳定。如果蜘蛛跟完跳轉,落地頁返回 5xx 或超时,這次抓取就白跑了,還可能影响後續回訪节奏。带宽和连接數紧張时,跳轉請求也會占用一部分並發。把跳轉鏈缩短,等于减少了蜘蛛和服務器之間的往返次數,對两邊都更轻。
另外,跳轉响應不宜過慢。有些站点在跳轉前做复杂判断、查資料库或等待外部接口,蜘蛛拿到的只是一個慢响應。更合理的做法是让跳轉层尽量轻,把内容判断放到落地頁之後。
小结
重定向不是不能用,但要控制長度和類型。内鏈和 Sitemap 尽量指向最终 URL,舊地址用一次 301 指向最相關的目标,避免多层跳轉和跳轉环。蜘蛛每次少走一步,落地頁被發現和抓取的机會就更稳定一些。