搜尋抓取

重定向鏈與抓取成本:蜘蛛為一次跳轉多做了什么

重定向是运维常用手段,但對蜘蛛来说,每一次跳轉都意味着額外的一次請求和一次等待。本文拆解跳轉鏈如何消耗抓取額度、301/302 與脚本跳轉的處理差异,以及把跳轉压缩到一跳以内的排查做法。

搜尋抓取

重定向鏈與抓取成本:蜘蛛為一次跳轉多做了什么

做站点运维时,重定向几乎是最省事的工具:換域名、合並栏目、下线舊頁面,一條 301 就能把訪問接過去。但從蜘蛛的角度看,每一次跳轉都不是免費的——它意味着多一次請求、多一次等待、多一個需要记錄的中間地址。

一次跳轉,蜘蛛要多做哪些事

当蜘蛛請求 A 地址,收到的却是指向 B 的响應时,它需要:

  • 记錄 A 的狀態碼、响應头和目标地址;
  • 再發起一次到 B 的請求,重新经歷连接建立與首字节等待;
  • 把 A 與 B 關联起来,判断最终内容應该归属哪個 URL。

對單次抓取来说,這多出来的開销不大;但当站点里成千上萬個内鏈都指向跳轉地址时,抓取額度就被大量消耗在“中轉站”上,而不是真正的内容頁。

跳轉鏈多長算長

一跳:A → B,属于正常使用,基本可以接受。

两跳:A → B → C,通常說明中間层没清理干净,比如 CDN 或反向代理里残留的舊規則。

三跳及以上:鏈路越長,蜘蛛越难判断目标是否稳定;部分蜘蛛在连續跳轉超過自身阈值後會直接放弃這條鏈路。

一個直观的判断方式:在浏览器地址栏輸入地址,如果它變化两次以上才稳定下来,這條鏈路就偏長了。

哪些配置容易長出長跳轉鏈

协议與主机名規范化叠加

http://example.com → https://example.com → https://www.example.com,本来可以合並成一步直達,却因為两层配置各自處理,變成两跳。

尾斜杠與大小寫各管一层

服務器、CDN、應用框架分別加了“补斜杠”“轉小寫”的規則,規則叠加後就形成了两三跳。

舊域名、舊栏目、舊參數层层接力

第一次改版把 A 指向 B,第二次改版又把 B 指向 C,舊規則没删,鏈路就越接越長。

不同類型跳轉,蜘蛛的處理不太一样

  • 301 / 308:表示永久迁移,蜘蛛會逐步把索引與信号挪到目标地址,是最推荐的類型。
  • 302 / 307:临时跳轉,蜘蛛通常繼續保留原地址,不會立刻做替換。
  • meta refresh 與脚本跳轉:需要解析 HTML 或执行渲染才能發現,等于多花一份處理成本。

能用响應头解决的跳轉,尽量不要交给 HTML 或脚本;能一步到位的規范化,就不要拆成两條規則。

把跳轉成本压下来的做法

  1. 内鏈、Sitemap、canonical 一律直接寫最终地址,不要让蜘蛛先踩一次跳轉。
  2. 合並同類規則:协议、主机名、尾斜杠的處理尽量在同一层一次完成。
  3. 定期清理規則库,删掉指向已下线地址的舊跳轉。
  4. 在訪問日誌里筛出狀態碼為 3xx 的 URL,按出現次數排序,從高频那几條開始改。
  5. 改版上线前用脚本沿鏈路走一遍,確認没有超過两跳的路径,也没有閉环。

小结

重定向本身不是問题,問题是它被当成長期方案留在鏈路里。把跳轉控制在必要的一跳,让内鏈直连最终 URL,站点省下的是抓取額度,蜘蛛省下的是重复往返。