為什么重定向會影响 URL 發現
重定向是常见的 URL 迁移手段,本身並不是错誤。但每次跳轉都是一次獨立的請求:蜘蛛需要請求初始地址,讀取响應头里的 Location,再發起下一次請求,直到落到最终返回 200 的頁面。如果鏈路有三四跳,或者中途出現循环、跨域、协议切換,抓取节奏會被拖慢,部分中間地址還可能被当成獨立入口记錄,導致同一内容出現多個被抓取地址。
先確認跳轉鏈的真實長度
排查的第一步不是改配置,而是先看清現有鏈路。可以用命令行工具或浏览器開發者工具观察完整跳轉過程。
- 使用 curl -I -L 观察每一跳的狀態碼和 Location 头。
- 记錄從初始 URL 到最终 URL 的层數,站内入口一般建议控制在一跳以内。
- 检查是否存在 http 到 https、带 www 到不带 www、带斜杠到不带斜杠的连环跳轉。
- 区分 301、302、307、308,临时跳轉可能让蜘蛛反复回訪中間地址,不利于入口收敛。
检查最终地址是否唯一且稳定
重定向的终点應该是一個固定、可直接訪問的 URL,而不是因设备、地区或登入態變化的動態地址。终点不稳定时,蜘蛛每次拿到的目标可能不同,URL 發現就會分散。
- 用不同 UA 和不同线路請求同一入口,對比最终地址是否一致。
- 確認最终地址返回 200,而不是再次跳轉或返回软 404 頁面。
- 检查 canonical 指向是否與重定向终点一致,避免两套信号互相拉扯。
- 若终点依赖 Cookie 或會话,考虑為蜘蛛提供稳定的預設版本。
排查内鏈與 Sitemap 的寫法
很多跳轉损耗来自站内引用。内鏈、導航、分頁、RSS 和 Sitemap 里如果寫的是舊地址或中間地址,蜘蛛每次都要多走一跳。
- 全站抽取内鏈,篩選出會返回 301 或 302 的連結。
- 優先把導航、面包屑、栏目頁模板中的舊連結替換為最终地址。
- Sitemap 中只保留最终 URL,不要提交跳轉地址。
- 检查是否存在鏈式重定向,例如 A 到 B 再到 C,應尽量改為 A 直接到 C。
服務器與邊缘层的跳轉配置
跳轉可能發生在源站、CDN、负载均衡或 WAF 层。多层各自配置跳轉时,容易出現叠加,最终表現就是鏈路變長。
- 分別測試直连源站和经過 CDN 的响應,比較跳轉层數是否一致。
- 检查 CDN 規則、HTTPS 强制跳轉、尾斜杠規則是否重复配置。
- 確認 WAF 没有把蜘蛛請求重定向到驗證頁或拦截頁。
- 在日誌中观察 3xx 狀態碼占比及其對應 UA,定位跳轉集中的目錄。
观察與收敛
調整後不要期待立刻出現變化。可以在服務器日誌里按周對比 3xx 請求數量、中間地址的抓取次數以及最终地址的抓取占比,观察入口是否逐步收敛到最终 URL。
重定向鏈的治理目标不是消灭跳轉,而是让每個入口都能用最少的請求到達最终内容。鏈路越短,URL 發現和抓取节奏越可控。
如果站点規模較大,可以按目錄分批處理,先收敛高频被抓取的舊地址,再處理長尾入口。每次調整後保留一份 URL 映射表,方便後續核對,也便于在改版或換域名时复用。