蜘蛛走重定向,和用戶点連結不是一回事
用戶在浏览器里遇到 301 跳轉,几乎没感觉;蜘蛛不一样,每一次跳轉對它来说都是一次新的請求。從 A 跳到 B,再跳到 C,才算拿到最终頁面。中間的這几跳都要占用抓取预算,也會拉長服務器日誌里的時間线。
搜尋引擎對跳轉鏈有跳數上限(常见说法是單條鏈最多跟若干跳),超過以後,後面的地址就不會繼續跟。也就是说,鏈子拖得太長,末端頁面就是“看得见、走不到”。
跳轉鏈通常從哪来
- 协议切換:http 到 https,老頁面、老外鏈還指着 http 地址。
- 域名层級:非 www 跳 www,或反過来,两個方向同时存在就可能成环。
- URL 規范化:大小寫、尾斜杠、index.html 之類的寫法差异,各自配了一條跳轉。
- 改版或換域名:舊目錄整体跳新目錄,新目錄又跳一次到更细的地址。
- 设备與語言判断:中間层脚本或服務端先判断,再跳到對應版本。
- CDN、WAF、负载均衡配置:不带 CDN 域名的請求被彈回主域名。
多一跳,代價在哪里
最直接的是抓取预算被摊薄。蜘蛛一次訪問本来可以拿回一個頁面的内容,現在變成了“跳一次、再跳一次、最後才拿到”。同样的時間窗口里,它能覆盖的 URL 數量就少了。
日誌里的典型表現是:同一批 URL 反复出現 3xx 狀態,却很少看到紧接着的 200;或者只有起点被记錄,终点頁面的抓取次數明顯偏低。
抓取预算不是無限的。跳轉本身不产出内容,它只是把预算花在“找路”上。
几個容易忽略的连带問题
- 跳轉過程中參數可能被丢掉,带參地址跳到最後變成無參地址。
- 鏈條里只要有一环返回 404、403 或 5xx,後面的地址就断在這里。
- 跳轉目标本身又是一個跳轉,缓存层各存一份,蜘蛛每次拿到的落点可能不同。
- 站内連結仍指向舊的跳轉地址,等于每次訪問都强制多走一跳。
怎么查、怎么收
先把鏈條画出来,再决定動哪一段。可以用下面的顺序排查:
- 日誌里筛出 3xx,統計哪些 URL 出現频率高、目标指向哪里。
- 用抓取工具或命令行請求批量跑一遍,看完整跳轉鏈有几跳、终点狀態碼是多少。
- 检查 Sitemap、canonical、内鏈和外鏈,確認它們寫的是起点還是终点。
收敛的思路通常不复杂:
- 規則合並,一步到位:http 直接跳到最终的 https 主域名,不要拆成两段。
- 入口统一:内鏈、Sitemap、canonical 一律寫最终地址,让蜘蛛在入口處就不需要跳。
- 舊路径保留但降權:跳轉仍然存在,用来接住老外鏈,但不要让站内連結繼續依赖它。
- 落点必须可抓取:跳到 404、登入頁或纯 JS 渲染的空壳頁,等于白跳一趟。
服務器稳定性也在其中。5xx 一多,跳轉鏈會在半路断掉,蜘蛛下次再来,未必還记得终点在哪。需要說明的是,跳轉鏈並不是越少越好,而是每一步都要有明确目的:该接住的老地址接住,该省掉的中間环节省掉。