网站迁移的 301 重定向怎么做?从 URL 映射到批量验收
网站迁移时如何选择 301 或 308、建立一对一 URL 映射、配置 Nginx/Apache 规则,并批量检查状态码、Location、最终 200 与 canonical?本文给出可执行验收方法。
作者:NeoGress AI
给每个需要迁移的旧地址确定去向
网站迁移的 301/308 不是把所有旧地址跳到首页,而是让每个有价值旧 URL 指向内容等价的新URL,并用服务器端永久重定向直达最终页面。上线前应把映射表变成可测试清单;上线后同时验收状态码、Location、最终 200、canonical 和新站内链。
网站迁移为什么优先使用 301 或 308?
因为它们表达资源已经永久移动 。 Google 把服务器端永久重定向视为强迁移信号,并用它帮助判断新的规范 URL;302、303、307 更适合临时切换,不应长期代替明确的永久迁移。
301、308 与临时重定向的分工
| 状态码 | 语义 | 典型用途 | 迁移注意 |
|---|---|---|---|
| 301 | 永久移动 | 普通公开页面、栏目、域名迁移 | 广泛兼容,常用于 GET 页面 |
| 308 | 永久移动 | 需要明确保留请求方法的永久迁移 | 确认服务器与应用链支持 |
| 302 / 307 | 临时移动 | 维护、短期活动、临时故障 | 不应冒充永久迁移 |
| 404 / 410 | 无可用替代 | 内容删除且无等价目标 | 比跳无关首页更清楚 |
Google 的重定向官方文档说明,服务器端重定向最容易被正确解释;301 与 308 都属于永久重定向。HTTP 的状态码语义可参考 IETF RFC 9110。永久重定向不是排名保证。
什么时候不要使用永久重定向?
如果只是短期维护、库存暂时不可用或 A/B 测试,永久信号可能与真实业务意图冲突。先明确以后是否还会恢复旧 URL;会恢复时使用临时方案,不会恢复且有等价新页面时才使用永久重定向。
网站迁移的 URL 映射表应该怎么建?
映射表必须能直接交给技术配置和测试,而不是只写产品页跳产品页 。每一行都要有精确旧 URL、目标 URL、处置理由、期望状态和验收结果。
先按内容关系决定目标,而不是先写规则
| 旧页面状态 | 目标选择 | 正确动作 | 错误做法 |
|---|---|---|---|
| 有完全等价新页面 | 对应新页面 | 一对一永久重定向 | 跳首页或上级栏目 |
| 多个旧页确实合并 | 完整合并页 | 多对一永久重定向并保留核心信息 | 其余无解释 404 |
| 内容改名但意图相同 | 同意图页 | 永久重定向并更新内链 | 视为全新主题 |
| 内容已删且无替代 | 无 | 404 或 410 | 跳无关页面 |
| 只是临时下线 | 说明页或原 URL | 临时重定向或合适状态 | 用 301 锁死临时变化 |
映射字段要支持配置、测试和回滚
| 字段 | 用途 | 示例 |
|---|---|---|
| old_url | 精确匹配来源 | https://old.example.com/service-a |
| new_url | 最终目标 | https://www.example.com/services/a |
| expected_code | 明确永久或临时 | 301 |
| reason | 记录判断 | 同一服务页路径调整 |
| owner | 业务与技术负责人 | SEO / 后端 / 运维 |
| qa_status | 预发与生产验收 | 待测 / 通过 / 失败 |
| rollback_rule | 恢复方式 | 恢复上一版配置并复测 |
别漏掉参数、尾斜杠、大小写和多语言版本
同一路径可能存在带参数与不带参数、带尾斜杠与不带尾斜杠、大小写不同、HTTP/HTTPS、www/非 www、多语言目录等变体。先决定规范形式,再用规则收敛到唯一目标。多语言站还要同步更新 hreflang,避免某语言旧 URL 跳到另一语言首页。
如果还没有完整旧 URL 基线,应先完成上一篇网站改版 SEO 迁移清单。
Nginx 和 Apache 的 301 规则怎么写?
优先使用精确规则处理高价值页面,再谨慎使用批量模式。下面是可读示例,不是可直接复制到任意生产环境的万能配置;上线前必须由熟悉当前服务器、代理层和应用路由的人审查。
Nginx:精确路径使用 return
location = /old-service {
return 301 https://www.example.com/new-service;
}Nginx 官方文档说明, return 指令可以返回 301、302、303、307、308 并指定目标 URL。精确location 适合少量关键页面;模式规则要额外检查捕获组、参数和规则顺序。
Apache:简单迁移可用 Redirect permanent
Redirect permanent "/old-service" "https://www.example.com/new-service"Apache HTTP Server 的 URL Redirection 文档给出 Redirect permanent 的路径迁移方式;更复杂的匹配可使用 RedirectMatch 或 mod_rewrite。配置文件位置、虚拟主机层级和代理架构会影响实际结果。
批量规则上线前先做冲突检查
- 精确规则与通配规则谁先执行;是否出现高价值路径被通配规则抢先匹配。
- 目标 URL 是否又被另一条规则重定向,形成链或循环。
- 是否错误保留、删除或重复拼接查询参数。
- 协议、主机名、端口、尾斜杠和大小写是否统一。
- CDN、负载均衡、Nginx/Apache 和应用层是否重复做同一跳转。
重定向上线后如何批量验收?
至少做两层检查:第一层看旧 URL 的状态与 Location,第二层跟随跳转,确认最终 URL、最终 200和页面 canonical。只看浏览器自动打开新页面,会隐藏重定向链和中间错误。
单条 URL 先检查响应头与最终落点
curl -sS -I https://old.example.com/old-service
curl -sS -I -L --max-redirs 5 \
-o /dev/null \
-w 'final=%{url_effective} code=%{http_code}\n' \
https://old.example.com/old-service预期第一条看到 301 或 308 以及正确 Location;第二条应直达目标并返回 200。命令只用于自有或获授权站点;不得把客户内网、Token、Cookie 或未公开域名放入截图和待审稿。
批量验收表至少记录六项
| 验收项 | 通过标准 | 失败例子 |
|---|---|---|
| 旧 URL 状态 | 301 或 308 | 200、302、404、5xx |
| Location | 等价新 URL | 首页、错误语言、测试域 |
| 跳转次数 | 一跳直达 | 多跳链或循环 |
| 最终状态 | 200 | 404、软404、5xx |
| 最终 canonical | 自指最终正式 URL | 旧页、其他页、测试域 |
| 站内链接 | 直接指新 URL | 依赖 301 |
先抽样再全量,不能只测首页
预发环境先抽样核心页面、深层路径、参数页、多语言页和静态资源;生产切换后立即重跑完整映射表。若 URL 数量很大,至少保证所有高流量、高转化、外链多和 sitemap 中的重要 URL 全量验收。
网站迁移 301 最常见的错误怎么排查?
优先看“现象—判断—动作” ,不要一看到流量下降就增加更多规则。
用症状定位规则问题
| 现象 | 判断 | 动作 |
|---|---|---|
| 旧页全跳首页 | 无关兜底规则 | 恢复等价映射;无替代返回404/410 |
| 连续两三跳 | 旧规范地址或多层重复配置 | 直接指最终 URL |
| 循环 | 规则相互覆盖 | 检查主机、协议和尾斜杠收敛 |
| 旧页返回302 | 临时规则误用或上游覆盖 | 确认永久性后改301/308 |
| 目标404/5xx | 目标未发布或新站故障 | 先恢复目标 |
| 新页 canonical 指旧页 | 页面信号冲突 | 自指新 URL,复查 sitemap 与 hreflang |
Google 的迁移指南建议避免重定向链、直接跳到最终目标,并提示把大量旧 URL 跳到无关首页可能成为软 404。对于永久迁移,Google 建议尽可能长期保留,通常至少一年。来源: Google 站点迁移实施说明。
301 上线后还要同步更新哪些页面信号?
重定向只是迁移链的一部分。新页面必须在 canonical、内链、hreflang、sitemap、结构化数据和分享链接中统一使用新 URL,避免搜索引擎同时收到已经迁移和旧页仍是规范页的冲突信号。
页面、站点与外部入口要一起收敛
- 新页面 canonical 自指新 URL。
- 导航、正文、面包屑、分页与相关文章直接链接新 URL。
- 多语言页面的 hreflang 全部替换为新 URL 并保持互相返回。
- 新 sitemap 只包含最终可索引的新 URL。
- 广告、邮件、社交资料与可控制的外链更新到新 URL。
- 分析工具和转化目标使用新的页面路径,并保留迁移日期标注。
参考资料
把方法落到官网
把文章结论接回企业官网增长
继续完善核心页面、专题内容、搜索入口与转化动作,让单篇内容成为官网长期增长结构的一部分。