站点改版、域名迁移、URL 規則調整,都會产生重定向。重定向本身不是問题,問题是它被一层层叠加起来,形成一條很長的跳轉鏈。蜘蛛每跟一跳,都要重新發起請求、等待响應,抓取预算和時間就這样被消耗掉。
蜘蛛遇到重定向會怎么走
主流搜尋蜘蛛能识別 301、302、307、308 等狀態碼,並跟随 Location 指向的新地址。301 表示永久迁移,302 表示临时跳轉,307 和 308 則强調請求方法保持不變。對蜘蛛来说,它們都會产生一次額外的抓取動作。
如果 A 跳到 B,B 又跳到 C,C 才是最终頁面,那么蜘蛛實际要處理三次响應。跳數越多,放弃的概率越高。蜘蛛通常會在有限次跳轉後停止跟随,把该 URL 标记為抓取異常或重定向鏈過長。
多長的跳轉鏈算過長
没有统一的硬性數值,但经驗上,一跳能到终点是理想狀態,两跳已经需要留意,三跳以上就值得排查。鏈路過長时,蜘蛛可能只抓到中間頁,最终頁面反而迟迟不被發現;即使最终抓到了,传递的權重和更新信号也會被稀释。
- 舊域名 → 新域名 → 加 www → 換 https → 改路径,五跳叠加很常见。
- 列表頁 302 到登入頁,登入頁再 302 回列表頁,形成回环。
- CDN、负载均衡、反向代理各自加一條跳轉規則,运维和 SEO 互不知情。
跳轉鏈的每一跳都是一次獨立的請求。對蜘蛛而言,這不是用戶無感的体驗問题,而是實打實的抓取成本。
怎么排查跳轉鏈
可以用命令行工具查看完整跳轉過程,例如用 curl 的 -IL 參數跟随重定向並輸出响應头;也可以從服務器訪問日誌中,統計同一 IP 段或同一 User-Agent 在短時間内连續訪問的 URL 序列。重点看两件事:跳了几次,以及中間是否出現循环。
- 找出所有返回 3xx 的 URL,按 Location 指向画成鏈路图。
- 合並重复規則,把多跳改成直接 301 到最终 URL。
- 检查内鏈和 Sitemap,確認它們指向的是终点地址,而不是會跳轉的舊地址。
- 對長期使用的 302,评估是否應该改為 301,避免信号模糊。
容易忽略的几個细节
重定向响應的正文通常不會被索引,但仍會占用传輸時間。如果 3xx 頁面返回了很大的 HTML 内容,蜘蛛還要下载和解析,建议尽量保持响應体為空或极简。
Location 使用相對路径虽然可行,但绝對 URL 更不容易出错。带參數的重定向也要注意:如果每次都追加一個追踪參數,最终地址會不断變化,蜘蛛可能把同一頁面当成多個 URL。
另外要区分 HTTP 重定向與頁面内的跳轉。meta refresh 和 JavaScript 跳轉不是 HTTP 层重定向,蜘蛛的處理方式不同,依赖它們做迁移並不可靠。能配置 301 的场景,優先用 301。
把跳轉控制在可控范围
定期抽查重点 URL 的跳轉次數,把鏈路長度当作一項基础指标来维護。改版或迁移时,提前規划好目标地址,让舊地址一步到位;上线後再用日誌確認蜘蛛是否沿着预期路径走到了终点。鏈條越短,蜘蛛越省力,新頁面被發現的路径也越清晰。