做站点运维时,重定向几乎是最省事的工具:換域名、合並栏目、下线舊頁面,一條 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 或脚本;能一步到位的規范化,就不要拆成两條規則。
把跳轉成本压下来的做法
- 内鏈、Sitemap、canonical 一律直接寫最终地址,不要让蜘蛛先踩一次跳轉。
- 合並同類規則:协议、主机名、尾斜杠的處理尽量在同一层一次完成。
- 定期清理規則库,删掉指向已下线地址的舊跳轉。
- 在訪問日誌里筛出狀態碼為 3xx 的 URL,按出現次數排序,從高频那几條開始改。
- 改版上线前用脚本沿鏈路走一遍,確認没有超過两跳的路径,也没有閉环。
小结
重定向本身不是問题,問题是它被当成長期方案留在鏈路里。把跳轉控制在必要的一跳,让内鏈直连最终 URL,站点省下的是抓取額度,蜘蛛省下的是重复往返。