做站的人大多知道 301 是相对安全的跳转,于是给它很大的自由度:换域名、调目录、加尾斜杠、清理参数,全都交给重定向处理。单看一条链接没什么问题,但当这些跳转叠在一起,搜索蜘蛛顺着一条链接往下走时,可能要连跳三四次才能落到最终页面。对 URL 发现来说,这段接力是有成本的。
重定向链是怎么长出来的
绝大多数长链不是有意设计的,而是几次改动叠加的结果。比如站点从 http 迁到 https,又从带 www 迁到不带 www,两条规则各自加一次跳转;再加上目录调整和结尾斜杠规范化,一条老链接就可能要走四跳。
- http 到 https 一跳
- 域名或 www 形式规范化一跳
- 目录或 URL 结构调整一跳
- 结尾斜杠、大小写、参数清理一到两跳
单独看每一条都合理,叠起来就变成了一条链路。问题在于,蜘蛛看到的是整条链,而不是某一条规则。
为什么多跳对 URL 发现不友好
蜘蛛请求一个地址时,要等上一跳返回响应,才能继续下一跳。每一跳都意味着一次请求往返,链条越长,拿到最终内容的时间越久。这不只是慢的问题:
- 链条中任意一环超时或返回 5xx,这一轮抓取就中断,最终页面的内容不会被读到。
- 抓取额度花在了中间跳转上,真正需要抓取的页面排位被往后推。
- 持续多跳的地址更容易在调度里被降频,新链接的发现节奏也会跟着受影响。
另外,如果链条里混着 302 或 meta refresh,信号会更模糊。最终地址能否被当作正式版本延续下去,取决于这条链是否稳定、是否长期指向同一个目标。
几种常见的链中问题
跳转的目标本身还是跳转
A 跳到 B、B 再跳到 C,是最常见的形态。问题出在 B 自己也是重定向。把 A 直接指向 C,成本立刻下降,这种改法通常只是配置层面的小调整。
跳转的终点已经下线
旧链接跳到新目录,但新目录里对应的页面已经被删。这种链不会在起点报错,却在终点断掉,从日志上看只表现为一次失败的访问。定期抽查重定向目标的状态码,比只看起点返回 301 更有效。
规则写反造成循环
配置出错时会出现 A→B→A 这类循环,蜘蛛连续走几轮后会放弃这条路径。这类问题一般来自批量规则,上线前在测试环境验证一遍就能避免。
把链压短的做法
- 合并规则:同一域名下能一步到位就一步到位,不要把 http→https 和 www 规范化拆成两段。
- 站内链接直接写最终地址,不依赖跳转;导航、正文内链和 Sitemap 里都应该是终点 URL。
- 定期导出全站链接,检查是否还有入口指向重定向的中间地址。
- 改版时按优先级分批切换,老链接保留一段时间后集中改成直连。
- 重定向目标页面若已下线,及时把规则改指到新的替代页,或直接返回 410,不要让链悬空。
怎么检查链路是否过长
用命令行工具批量请求站内地址,记录返回链的跳数、耗时和最终状态码,是最直接的办法;也可以结合抓取日志,观察蜘蛛在某个地址上停留了多少次请求。重点看两类地址:长期做外链的落地页,以及导航和模板里反复出现的链接。它们被走得最多,每多一跳,浪费就成倍放大。
重定向是纠错工具,不是常态路由。能用一条直链说清楚的事,尽量不要留给跳转链去完成。
URL 发现比拼的从来不是谁提交得多,而是谁把路修得更短、更稳。把重定向链控制在一跳以内,蜘蛛到达新页面的速度和成功率都会更可控,抓取额度也更容易用在真正需要更新的页面上。