搜尋抓取

搜尋蜘蛛抓取:重定向鏈過長與狀態碼混用带来的抓取损耗

重定向是站点运维的常規操作,但跳轉鏈過長、301 與 302 混用會让蜘蛛為同一個頁面付出多次請求成本,也會稀释待抓 URL 列表。本文梳理常见的跳轉問题形態,给出一套跳轉鏈体检與修正顺序,並說明内鏈、Sitemap、hreflang 统一指向最终地址對 URL 發現的實际帮助。

搜尋抓取

搜尋蜘蛛抓取:重定向鏈過長與狀態碼混用带来的抓取损耗

重定向在站点运维里几乎是必需品:換域名、改路径、统一协议都要用到它。但對搜尋蜘蛛来说,每一次跳轉都是一次額外的請求。一條連結如果连續跳三次,蜘蛛為拿到同一個頁面就要付出四次连接成本,而這些成本會從整体的抓取額度里扣掉。

重定向為什么會被算進抓取成本

蜘蛛拿到一個 URL 後先發請求,讀到 3xx 狀態碼和 Location 头,再對新地址重新發起一次請求。這個過程通常没有缓存可言,除非跳轉结果本身带了足够强的缓存头。所以跳轉鏈越長,單位時間内能被處理的 URL 數量就越少,新頁面被發現的节奏也會被拖慢。

更麻烦的是類型混用。301 表示永久,302/307 表示临时,蜘蛛對二者的處理方式不同:長期用 302 承担迁移职责,舊地址可能一直留在待抓列表里,新地址的信号积累也會慢一些。

常见的几種問题形態

  • 协议與主机叠加跳轉:http 跳 https,再跳 www,再跳结尾斜杠,一條内鏈要经過三到四跳。
  • 跳轉類型来回切換:CDN 或網關配了 301,應用层又返回 302,蜘蛛前後看到的狀態碼不一致。
  • 跳轉到 404 或空頁面:舊路径跳到已下线的地址,等于白跑一趟。
  • 循环跳轉:A 跳 B、B 跳 A,通常是尾斜杠規則和伪静態規則互相打架造成的。
  • 跳轉目标本身還會再跳:内鏈、Sitemap、canonical 各處寫的地址不统一,各自指向不同的中間节点。

先做一次跳轉鏈体检

  1. curl -I -L 或類似工具,抽 50 到 100 個内鏈 URL,记錄每一跳的狀態碼和 Location。
  2. 翻抓取日誌,統計 3xx 响應占全部抓取請求的比例,比例偏高說明跳轉被反复触發。
  3. 對比 Sitemap、canonical、hreflang 與頁面内鏈里寫的地址,看是否都指向最终 URL。
  4. 單獨检查尾斜杠、大小寫、http/https 几類規則,確認它們没有互相触發。

修正顺序建议

  1. 先确定一個唯一的最终地址格式,协议、主机、路径寫法一次性定下来。
  2. 把所有内部引用改成最终地址,让内鏈、Sitemap、canonical 直接指向它,不再经過中間跳轉。
  3. 舊地址保留一條 301 直達最终地址,不要串成鏈條。歷史上留下的多級跳轉可以合並成一步。
  4. 確認跳轉目标返回 200,且内容與舊頁面意图一致;頁面确實下线的,改用 410 而不是统一跳首頁。
  5. 循环跳轉優先處理,這類問题會让蜘蛛在同一组 URL 上反复消耗。

跳轉治理與 URL 發現的關系

URL 發現的入口主要有三條:Sitemap、站内連結、外部連結。三者如果都寫最终地址,蜘蛛第一次請求就能拿到内容,不需要額外一跳。反過来,如果站内連結大量指向中間地址,蜘蛛會把這些中間地址当作獨立 URL 记錄,待抓列表被稀释,真正的内容頁反而排到後面。

多語言站点還要留意 hreflang 的指向,它應该寫最终 URL,寫成跳轉前的地址會让蜘蛛多做一轮校驗。

重定向治理没有一劳永逸的做法。站点每次調整路径、协议或 CDN 規則之後,都值得重新抽一次跳轉鏈。重点不是消灭重定向,而是让必要的跳轉保持單步、直達、目标明确。