站点換域名、切 HTTPS、统一 www 时,301 是最常见的處理方式。但很多人只關注“有没有跳轉”,忽略了“跳了几次”。對用戶来说,多跳只是地址栏闪一下;對蜘蛛来说,每一跳都是一次完整的請求,時間和机會都在路上被花掉。
一次抓取,可能跟着一串 Location
蜘蛛請求一條 URL,服務器返回 301 並带上 Location 头,蜘蛛需要重新發起請求;如果新地址又返回 301,就繼續跟。若中間換了域名,還要重新做 DNS 解析和连接建立。最终拿到頁面内容之前,蜘蛛已经付出了若干次往返。
這條鏈路在浏览器里往往一闪而過,但在抓取日誌里會留下清晰的痕迹:同一路径下出現连續的 301、302 记錄,最後才是一條 200。
每多一跳,成本加在哪里
- 抓取時間:蜘蛛按主机分配抓取资源,多跳意味着同样的時間只能覆盖更少的頁面。
- 半路放弃:鏈路過長,或中間某一跳响應慢、超时,蜘蛛可能在到達终点前結束這次抓取。
- 循环風險:A 跳 B、B 又跳回 A,蜘蛛绕几圈後會放弃,這條 URL 等于没有被抓到。
- 日誌噪音:大量 301 记錄占據抓取日誌,分析頁面覆盖情况时容易被掩盖。
- 規則冲突:服務器配置與 CMS 插件同时生效时,跳轉结果可能随訪問方式變化,难以复現。
多跳通常是怎么攒出来的
- 把 http 到 https、非 www 到 www 拆成两條規則,一條 URL 先跳一次,再跳一次。
- 域名迁移时走了過渡域名,舊域名指到過渡域名,過渡域名再指到新域名。
- 尾斜杠、大小寫、參數清理各自做跳轉,同一條 URL 连走三次。
- 頁面内鏈和 Sitemap 里仍寫着舊地址,蜘蛛每次都是從舊地址被引上跳轉鏈。
- 临时跳轉長期未改,302 與 301 混用,鏈路越接越長。
自查:先看清楚鏈條有多長
用命令行查看跳轉鏈是一個直接的办法,例如用 curl 带 -I 和 -L,观察每一次响應里 Location 指向哪里;也可以打開浏览器開發者工具的 Network 面板,查看该請求经過的每一跳。重点抽查首頁、栏目頁和主要入口頁。
日誌侧可以篩選狀態碼為 301、302 的记錄,按 URL 聚合請求次數,找出跳轉次數明顯偏多或反复出現的路径。注意同时看請求方法和响應時間,慢的那一跳往往就是問题所在。
收敛:让蜘蛛一跳到位
- 規則尽量寫成直接指向最终 URL,避免舊地址先跳中間地址。
- Sitemap、内鏈、canonical 统一使用最终地址,减少蜘蛛被引到舊地址的机會。
- 域名迁移期間保留跳轉是必要的,但舊域名應直接指向新域名,而不是经過過渡站。
- 定期检查是否存在循环跳轉,以及该用 301 的地方是否誤用了 302。
- 服務器配置或插件調整後,抽查几條代表 URL,確認跳轉结果與预期一致。
重定向本身不是問题,鏈條太長才是。蜘蛛的抓取時間是有限的,每一跳都要花在等待响應上,留给讀取内容的份額就少了。
一個简單的判断标准
如果一條 URL 到達最终頁面需要超過一跳,就值得检查。尤其是首頁、频道頁和重点内容頁,它們被訪問的频率高,跳轉成本會被反复放大。把路径缩短到一跳,對蜘蛛和訪客都是更直接的方式。
抓取路径越短,蜘蛛就越容易把有限的時間用在真正的内容上,URL 發現和覆盖也更容易保持稳定。