为什么重定向会影响 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 映射表,方便后续核对,也便于在改版或换域名时复用。