改版、换域名、合并栏目、把 http 迁到 https,这些动作几乎都会留下一批跳转规则。规则配上之后,很多人就不再回头看,直到某天发现旧地址跳了三四个来回才落到目标页,或者干脆跳进一个 404。蜘蛛顺着链接爬过来,一路都是跳跃,真正能拿到的信息却很少。
跳转链为什么会拖慢抓取
每一次跳转,对抓取工具来说都是一次新的请求。地址 A 返回 301 指向 B,B 又 301 到 C,C 才是真正的页面,那么抓这一段内容至少要发三次请求。链条越长,消耗的抓取预算越多,留给其他页面的机会就越少。更麻烦的是两种情况:
- 跳转环:A 跳 B,B 又跳回 A,请求在两个地址之间来回,永远到不了终点。
- 断头跳转:跳转目标本身就返回 404 或 410,等于把旧地址引到一个空房间。
这两种情况在浏览器里表现得很明显,页面打不开或者一直转圈,但平时很少有人用旧地址访问,所以问题可以潜伏很久。
最常见的几类跳转问题
- 同一批旧地址被多层规则叠加处理,形成三跳以上的长链。
- 临时跳转(302、307)用在长期迁移上。临时跳转本意是短暂调整,长期挂着容易让人一直按旧地址理解。
- 协议与域名之间互相跳:http 跳 https,然后又跳到 www 版,www 版再跳回不带 www 的版本。
- 路径跳转丢层级或丢参数,比如把文章页一律跳到栏目首页,用户再也找不到原文。
- 跳转目标换了内容,旧地址讲 A 主题,新地址却是 B 主题,两者毫无关系。
自查步骤
- 整理清单。把外链来源、搜索后台里的旧地址、服务器日志中出现过 301/302 的路径汇总成一张表。
- 逐条检测。用 curl 的 -I 参数或在线工具请求旧地址,记录返回的状态码和 Location 头,把跳转链完整记下来。
- 合并长链。三跳以上的,直接改成从最初地址一跳到达最终地址,中间的过渡规则删掉。
- 排查环。遇到互相指的地址,手动确认哪个才是现在的正式版本,只保留一条单向规则。
- 验证终点。确认最终地址返回 200,页面内容与旧地址主题相关,正文能正常看到。
容易忽略的细节
跳转类型要选对
永久迁移用 301 或 308,临时调整用 302 或 307。区别除了方法语义和缓存行为,更重要的是别把临时跳转当成永久方案一直挂着。改版上线时定的跳转,三个月后应该回头确认一次,而不是放着不管。
协议跳转与站点配置叠加
服务器层、CDN 层、应用层如果都写了跳转规则,很容易叠出一条长链。检查时可以分层查看,确认只有一层负责把 http 转到 https,其余层不要再做同样的动作。
内链和站点地图要一起更新
跳转只是兜底手段,真正该做的是把站内链接、导航、站点地图里的地址换成新版本。如果站内还在大量指向旧地址,等于让蜘蛛每次都先撞一次跳转才到目的地。
把巡检变成常规动作
- 改版前先导出旧 URL 与新 URL 的对照表,作为后续核对的依据。
- 每次结构调整后,抽一批旧地址实际请求一次,而不是只看规则文件。
- 关注日志里 301、302 的数量变化,突然升高往往说明有新规则生效或旧规则冲突。
- 保留一份跳转规则清单,注明添加时间和原因,方便以后清理。
跳转的作用是把用户和蜘蛛送到仍然有效的页面,而不是把旧地址永久保存下来。规则越少、链条越短,维护起来越轻松。