搜尋抓取

重定向鏈與蜘蛛抓取:一條連結跳几次才算绕路

站内重定向不一定是問题,但一條連結跳三四次就會持續消耗抓取成本。本文讲蜘蛛跟随 301、302 的大致過程,常见的几類重定向鏈路,以及怎么按日誌、鏈路追踪、内部連結的顺序把跳轉收敛到一跳到位。

搜尋抓取

重定向鏈與蜘蛛抓取:一條連結跳几次才算绕路

站内出現重定向本身很正常,改版、換域名、统一 www、上 HTTPS 都會用到。問题往往出在“一條連結要跳好几次”:蜘蛛每跟一次跳轉都要重新發一次請求,鏈路越長,花在路上的成本越高,真正要抓的内容反而被推後。

蜘蛛跟重定向的大致過程

蜘蛛請求一個 URL,如果拿到 301、302、307、308 這類狀態碼,會讀取 Location 头,再對新地址發起請求。多數爬虫對跳轉次數有上限,常见做法是跟到几跳之後停止,並把這條鏈路标记為可疑;具体上限各家不同,也不會公開。可以确定的是:跳得越多,被中途放弃、或只能抓到中間頁面的概率越大。

另一個容易忽略的点是,蜘蛛记住的往往是鏈路的起点。站内還在大量鏈向舊地址,等于持續把蜘蛛送到一條绕路的入口上,抓取预算就被重复消耗。

常见的几種鏈路形態

  • 协议與域名叠加:http 跳 https,再跳 www,最後补一個结尾斜杠,一條連結跳三次。
  • 移動站與主站互跳:m 站没有做好對應關系,蜘蛛在两端来回跳。
  • 改版遗留:舊栏目整体 301 到新栏目,新栏目内部又做了一次 301。
  • 短鏈與跳轉服務:站内用了自建短鏈,蜘蛛先走一次短鏈域名。
  • 前端跳轉:用 JS 或 meta refresh 做跳轉,蜘蛛拿到的是一個空壳加一段脚本。

什么时候值得動手修

不是所有重定向都要清掉。一次性的、指向明确最终地址的 301,保留没有問题。需要處理的是這几類:鏈路長度超過一跳、中間跳是 302 却長期存在、同一批連結指向多個不同终点、以及大面积内部連結還指向舊地址。

排查顺序可以這样走

  1. 先看抓取日誌里 3xx 的比例和涉及哪些目錄,判断是零散問题還是成片問题。
  2. 挑几個样本連結,完整跟一遍,记錄每一跳的狀態碼和终点。
  3. 找出每一跳的来源:是服務器配置、程序設定,還是頁面里的内部連結寫错了。
  4. 把中間跳去掉,让起点直接 301 到终点,一跳到位的鏈路最省事
  5. 统一入口規范:http/https、是否带 www、结尾斜杠,三件事只保留一種寫法。
  6. 回头改内部連結和 Sitemap,让它們直接寫最终地址,不再走舊地址。

站外連結和短鏈

站外来的連結跳几次,自己能改的有限,但至少可以保證落地頁不再二次跳轉。自建短鏈如果只用于活動推廣,建议在活動結束後让短鏈直接 301 到内容頁,而不是层层套娃。

重定向不會凭空带来什么好處,它的作用只是告诉蜘蛛“這個地址換地方了”。把一個地址准确地指到另一個地址,任務就完成了,剩下的跳轉都是額外成本。

一個简單的自查习惯

每次調整域名、协议、目錄结构之後,抽十分钟跟一遍典型連結:從首頁到栏目頁再到内容頁,看每一跳是否必要。鏈路越短、终点越稳定,蜘蛛把時間花在内容上的比例就越高,這比事後反复提交新地址更省力。