访客点开一个两年前的旧链接,地址栏闪了三下才落到页面上;蜘蛛顺着外链爬进来,也要跟着跳三次才拿到正文。单看每一次跳转都不算错,合在一起就是不必要的开销。重定向本身是好东西,问题在于规则一层层叠加之后,没有人再回头整理。
跳转链是怎么一点点攒出来的
- 域名改造分批做:先上 HTTPS 加一条规则,再统一带 www 加一条,http 到 https、去 www 到带 www 各写各的,链自然就长了。
- 栏目反复改版:旧目录 301 到新目录,新目录后来又被合并,中间那一跳没人回头删。
- 服务器和程序各写一半:Nginx 配置里有一条,CMS 的跳转插件里还有一条,两条规则互相叠加。
- 临时跳转长期化:当初用 302 试水,地址后来定下来了,302 却一直没换成 301,链就一直留着。
- 内链直接抄旧地址:编辑从收藏夹或旧文档里复制链接,站内链接本身就指向会跳转的地址。
为什么值得花时间清理
每一次跳转都是一次额外的请求和一次额外的响应,在移动网络下体感尤其明显。对蜘蛛来说,跳转链会消耗有限的抓取预算:同一个终点地址,因为前面挂了三四跳,被访问的成本成倍增加,某些情况下还会影响抓取频率的判断。对你自己来说,日志里的状态码会变得难读,排查问题时得顺着链一层层猜。
需要说明的是,必要的跳转不能删。域名迁移、HTTPS 切换、页面永久换址,这些场景本来就该用 301 把旧地址指向新地址。要清理的是同一目标上堆起来的重复跳转,不是把所有跳转都砍掉。
怎么自查:从抽样开始
- 先去访问日志里挑样本:按访问量排序,取前几十个返回 301 / 302 的地址,再挑几个外链带来的引荐来源。
- 用 curl -IL 或者浏览器开发者工具的网络面板,把完整跳转链看一遍,记下每一步的状态码和 Location 头。
- 确认中间有没有混进 302。临时跳转不会被浏览器长期记住,链会一直存在,混在里面很容易被忽略。
- 看终点是否返回 200。有的链最后落到一个已下线的页面,蜘蛛跟到底只拿到一个软 404。
- 检查有没有 A 跳到 B、B 又跳回 A 的循环,这种链通常会让抓取直接卡住。
- 顺手核对站内链接、导航和站点地图,看有多少指向的是会跳转的旧地址,而不是终点地址。
把链压成一条直达规则
- 能合并的规则就合并:让旧地址一次性指向最终地址,中间那些中转站删掉。
- 确认是永久换址的,把 302 改成 301;还在测试期的跳转,最好别让蜘蛛大量爬到。
- 站内链接、导航、站点地图、RSS 一律写终点地址,减少页面上自带的跳转。
- 跳转规则集中放在一处管理,写清楚生效顺序和注释,避免两份配置互相覆盖。
- 改完抽样复测一遍,尤其看老地址是否仍然能到达终点,别把可用链接改成死链。
改完之后看什么
接下来一两周,留意日志里旧地址的出现次数是不是在下降,以及 200 的比例有没有变化。如果发现某个老地址开始返回 404,多半是规则写漏或写错,补上就行。真正要避免的,是打开配置一看,同一条旧地址下面挂着三四条规则,谁也不敢删。
跳转是为了让旧地址继续有用,不是为了把访客和蜘蛛送上一段接力赛。规则越简单,后面越好维护。