搜尋抓取

重定向鏈與抓取路径:多跳跳轉怎样消耗 URL 發現机會

蜘蛛在抓取 URL 时如果遇到 301/302 跳轉鏈,每一跳都要重新排队請求,最终頁面被發現的時間被推迟。跳轉层級越多,抓取预算消耗越大。本文整理常见跳轉来源、對 URL 發現的影响,以及把跳轉鏈缩短到一跳的检查方法。

搜尋抓取

重定向鏈與抓取路径:多跳跳轉怎样消耗 URL 發現机會

蜘蛛發現一個 URL 後,並不是每次都直接打開頁面内容。如果這個地址返回 301 或 302,蜘蛛會先讀取响應头里的 Location,把新地址放進待抓队列,之後再来一次請求。這個過程每多一跳,就多消耗一次抓取机會,最终頁面的首次訪問時間也會往後推。

蜘蛛遇到重定向时,抓取過程發生了什么

以 A 到 B 到 C 的跳轉鏈為例,蜘蛛請求 A,拿到 301 指向 B;它需要重新安排對 B 的請求;B 又返回 301 指向 C,于是還要再安排一次對 C 的請求。對蜘蛛来说,A 和 B 都没有可索引的内容,真正的内容在 C。這两次中間請求占用了抓取预算,却没有带来新的頁面内容。

如果跳轉是由 JavaScript 或 meta refresh 触發的,蜘蛛的處理會更保守。它可能不會像處理 HTTP 跳轉那样立即跟随,尤其当脚本依赖用戶点击或前端路由时,抓取路径可能直接停在中轉頁。

多跳跳轉通常從哪里来

  • 协议跳轉:http 跳 https,如果服務器配置层层叠加,可能先跳到另一個 http 地址,再跳到 https。
  • 域名跳轉:带 www 與不带 www 之間来回跳,或者舊域名先跳新域名,新域名又跳另一個規范域名。
  • 路径格式跳轉:末尾斜杠、大小寫、重复斜杠、URL 參數清理,各自产生一次跳轉。
  • 内鏈和 Sitemap 仍指向舊地址:頁面已经迁移,但導航、面包屑、文章正文里的連結没有更新。
  • CDN 或反向代理額外加了一层跳轉,和源站配置叠加成多跳。

這些来源單獨看似乎只是一個小問题,叠加起来就會让一個 URL 的抓取路径變長。

跳轉鏈怎样影响 URL 發現

蜘蛛在頁面里發現連結後,會评估是否值得跟進。如果某個入口的連結需要经過多次跳轉才能到達有效内容,它分给這條路径的抓取资源會變少。對站点来说,表現就是新頁面被發現的間隔變長,日誌里同一目标地址出現多條 301 记錄,而最终頁面迟迟没有抓取记錄。

更常见的情况是抓取预算被中間地址占據。蜘蛛每次来訪都先訪問舊地址,被跳轉後可能中断,或者只抓取了跳轉鏈的前半段。最终頁面的内容更新、内鏈传递和後續 URL 發現都會受到影响。

重定向不是错誤,但跳轉鏈越長,蜘蛛在這條路径上的有效抓取比例越低。

把跳轉路径缩短到一跳

  1. 在服務器或 CDN 层做一次性跳轉,让舊地址直接指向最终地址,不要 A 到 B、B 到 C 层层轉發。
  2. 更新站内所有連結,包括導航、面包屑、正文連結、分頁、Sitemap 和 RSS,让它們直接使用最终 URL。
  3. 對已经迁移的舊地址,保留一個 301 到最终地址即可。不要再让舊地址跳到另一個舊地址。
  4. 检查反向代理、负载均衡和 CMS 插件是否自動添加了跳轉規則,避免和源站規則重复。
  5. 用命令行或抓取工具检查响應头,確認從入口到最终内容只有一跳。重点检查首頁、栏目頁和近期改版的频道。

临时跳轉和永久跳轉的分工

301 表示永久迁移,适合域名更換、协议切換和路径重构。302 表示临时跳轉,蜘蛛可能繼續保留原地址並反复請求。如果是短期活動頁或临时维護,用 302 可以理解;但如果跳轉狀態持續几個月,最好改成 301,並同步更新内鏈。

307 和 308 會保留請求方法,内容頁一般不需要用到。多數场景下,把 301 用對、把跳轉鏈控制在一跳以内,比研究狀態碼细节更有實际意义。

日常巡检可以看什么

在抓取日誌里篩選 301 和 302 狀態,观察同一個目标地址是否被多次跳轉到達。再看服務器訪問日誌,如果舊地址的請求量長期高于最终地址,說明内鏈還没有彻底更新。定期检查跳轉鏈,尤其是在換域名、換协议、改 URL 结构之後,能避免 URL 發現被不必要的中間請求拖慢。