改版最容易出的事故不是设计不好看,而是老链接一夜之间全变成 404。客户收藏的页面、已经收录的页面、别处文章里引用过的页面,改版后全部打不开。流量掉下去之后,恢复期往往比改版本身还长。
这篇只解决一件事:上线前把 URL 迁移做完,让每一条旧链接都知道自己该去哪。
一、先把旧链接捞全,别凭记忆
凭记忆能想起的通常只有十几页,而访问日志里往往躺着几百条。三份来源合并去重:
- 服务器或 CDN 的访问日志,导最近 90 天,按访问量降序,取前 500 条
- 旧站 sitemap.xml 里的全部地址
- 站长平台「已收录页面」导出
清单按访问量排序,访问量就是优先级。判断标准:如果清单只有几十条,说明漏了——真实的旧链接里一定混着带参数、带分页、带年份的变体。
二、分四类,每类只给一条规则
| 类型 | 怎么判断 | 处理方式 |
|---|---|---|
| 一一对应 | 新站有同样内容的页面 | 301 到新地址,一条对一条写清 |
| 多对一 | 旧站十个分页合并成一个新页面 | 全部 301 到新页面,不要留一个当正主 |
| 已下线 | 内容不再提供 | 301 到最相关的上级栏目,不要一律丢首页 |
| 带参数 | 分页、筛选、追踪参数 | 分页映射到新分页;纯追踪参数 301 到无参数地址 |
唯一可以直接 404 的,是本来就该消失的页面,而且它在 90 天日志里访问量接近 0。有访问量却给了 404,等于主动扔掉一个入口。
三、301 规则写在哪、怎么写
静态站写在 _redirects、vercel.json 或 nginx 的 rewrite 里;动态站在路由层维护一张「旧路径 → 新路径」的映射表。两条经验:
- 具体规则必须排在通配规则前面,否则会被通配吃掉
- 通配要克制。只有当新旧路径结构完全一致时才用 /old/* 到 /new/*,结构不一致会变成软 404,搜索引擎不认
- 如果连域名一起换,先做整域跳转,再做路径级跳转,顺序反过来会套娃
判断标准只有一条:curl -I 任意一条旧地址,返回码是 301,Location 指向最终页面,中间不出现连续两次以上跳转。
四、上线前的六项检查
- 访问量前 100 的旧链接逐条测试,全部 301,无 404、无 302
- 每条 301 的落点自身返回 200,不再二次跳转
- 新站 sitemap 只含新地址,旧地址一条都不出现
- 每个页面的 canonical 指向自己的新地址
- 旧站 robots.txt 不要整站 Disallow,挡住抓取,301 就传不过去
- 新站内链里不能还残留指向旧地址的链接
五、上线后 48 小时与 30 天
48 小时内看两件事:抽 20 条旧链接复测返回码;翻日志里 404 的前 20 名,凡是访问量不为 0 的,当天补一条 301。第 7 天重新提交一次站点地图。第 30 天对比改版前后同一批页面的自然搜索进入量,掉得最多的那批地址,先查落点内容是否对得上——内容错配比 301 本身更容易造成下滑。
合格的收尾标准:30 天后,清单前 100 的旧链接累计 404 次数为 0。
飞钉 AI 建站的后台带 SEO 巡检,会定期扫全站链接状态和页面基础项,改版换过路径后,死链会直接出现在巡检结果里;7×24 智能客服能接住访客提问,线索自动进 CRM,上线那几天不至于把来问的人漏掉。但这张迁移对照表还是得你先做,工具只负责发现问题,替不了你决定每条旧链接该去哪。