URL 会变化。页面会改名,产品会停产,网站会迁移到 HTTPS,品牌会更换域名。每当 URL 变化时,重定向都会把访客和搜索引擎从旧地址带到新地址,并把旧页面的排名和链接一并带过去。
把重定向弄错,是损失搜索流量最快的方式之一。而把它做对,主要靠的是规划。
主要的重定向类型
| 状态码 | 名称 | 适用情况 |
|---|---|---|
| 301 | 永久移动(Moved Permanently) | 页面已永久迁移。最常见的 SEO 重定向。 |
| 308 | 永久重定向(Permanent Redirect) | 与 301 相同,但请求方法(如 POST)不能改变。 |
| 302 | 已找到(Found,临时) | 迁移是临时的,原 URL 还会回来。 |
| 307 | 临时重定向(Temporary Redirect) | 与 302 相同,但保留请求方法。 |
对 SEO 来说,关键的区别是永久与临时。使用永久重定向时,搜索引擎会在索引中用新 URL 替换旧 URL。使用临时重定向时,它们通常会继续收录旧 URL,因为你说过它还会回来。
Google 表示 301 和 302 重定向都会传递 PageRank。但如果你对永久迁移使用 302,Google 可能会更长时间地显示旧 URL。永久的变化请使用永久重定向。
应避免的重定向
meta refresh 重定向(<meta http-equiv="refresh">)和 JavaScript 重定向可以工作,但速度更慢,对爬虫来说不够可靠,还会让按下返回按钮的用户感到困惑。尽可能使用服务器端重定向。
重定向链是指 URL A 重定向到 B,B 又重定向到 C。每一跳都会增加延迟,而且爬虫在几跳之后可能就不再继续跟踪。更新重定向,让每个旧 URL 都直接指向最终目的地。
重定向循环(A 重定向到 B,B 又重定向回 A)会让页面根本无法加载。
追踪重定向链的每一跳,查看状态码和耗时。
应该重定向到哪里
把每个旧 URL 重定向到最相关的对应新页面:
- 旧产品 → 替代产品;如果没有替代品,就重定向到它所属的分类
- 旧文章 → 该文章的更新版本,或最相关的文章
- 旧分类 → 新分类
避免把所有页面都重定向到首页。Google 往往会把指向首页的不相关重定向视为软 404,信号不会被传递,访客也会感到困惑。如果确实没有对应的页面,一个有帮助的 404 或 410 页面会更好。
如何设置重定向
Apache(.htaccess)
大多数 cPanel 共享主机使用 Apache。在网站根目录的 .htaccess 文件中添加规则:
Redirect 301 /old-page /new-page
Nginx
location = /old-page { return 301 /new-page; }
CMS 插件和设置
Redirection 等 WordPress 插件,以及 Yoast 和 Rank Math 中的重定向管理器,可以让你无需修改服务器文件就能添加重定向。Shopify、Wix、Squarespace 和 Webflow 都内置了重定向设置。
为 Apache .htaccess 和 Nginx 创建 301 重定向规则,包括 HTTPS 和 www。
网站迁移:分步计划
迁移(新域名、新 CMS、新 URL 结构或 HTTPS)会一次性改变许多 URL。要认真规划。
迁移之前
- 建立基准。 从 Search Console 和统计工具中记录当前的流量、排名和已收录页面。
- 抓取旧网站,导出每一个 URL,再加上站点地图中的 URL、统计工具中的着陆页和外链数据中的 URL。拥有外部链接的页面最重要。
- 制作重定向映射表:一个列出每个旧 URL 及其新目的地的表格。
- 保留有效的东西。 如果能保持 URL 不变,就保持不变。每个改变的 URL 都带有一定风险。
- 在用密码保护(而不仅仅是用 robots.txt 屏蔽)的测试环境中准备好新网站。
上线当天
- 在新网站上线的同一时刻让重定向生效。
- 移除所有测试环境的限制(密码、
Disallow: /、noindex)。 - 抽样测试旧 URL,尤其是高流量和外链多的 URL。
- 更新内部链接,让它们直接指向新 URL。
- 在 Search Console 中提交新的站点地图。如果更换了域名,请使用 Search Console 的地址更改工具。
一次检查最多 25 个网址的状态码、重定向和响应时间。
迁移之后
- 抓取新网站,查找失效链接、重定向链和缺失的页面。
- 每天在 Search Console 中监控抓取错误和收录变化。
- 关注 404 报告中被你遗漏的旧 URL,并为它们添加重定向。
- 保留重定向至少一年;对于拥有有价值外链的 URL,应永久保留。
最初几周出现一些排名波动是正常的。持续的下滑通常意味着缺少重定向、抓取被屏蔽,或者内容被删除或修改了。
从 HTTP 迁移到 HTTPS
迁移到 HTTPS 时,用 301 把每个 HTTP URL 重定向到对应的 HTTPS URL,把内部链接和 canonical 标签更新为 HTTPS,并在一切正常后添加 HSTS 标头。检查是否存在混合内容,即仍通过 HTTP 加载的图片或脚本。
带 www 与不带 www
选择一个版本,把另一个版本重定向过来,让搜索引擎只看到一个网站。对于 SEO 来说选哪个都无所谓,重要的是保持一致。
制作重定向映射表
重定向映射表是迁移中最重要的一份文档。一个简单的表格就足够了:
| 旧 URL | 新 URL | 类型 | 优先级 | 备注 |
|---|---|---|---|---|
| /services/seo-audit.php | /services/seo-audit | 301 | 高 | 45 个引荐域名 |
| /blog/2019/05/title-tags | /blog/title-tags | 301 | 高 | 自然搜索的主要着陆页 |
| /products/discontinued-x | /category/x-alternatives | 301 | 中 | 没有直接的替代品 |
| /old-promo | – | 410 | 低 | 已过期的活动,没有链接 |
如何填写:
- 从抓取结果、站点地图、统计工具(过去一年的着陆页)、Search Console(热门页面)和外链报告中收集每一个旧 URL。
- 把它们与新 URL 对应起来。当 URL 模式发生系统性变化时(例如去掉
.php),一条基于模式的规则就能一次覆盖数千个 URL。 - 按流量和链接排定优先级,先测试最有价值的 URL。
- 检查重定向链:如果某个旧 URL 已经重定向到别处,就让它直接指向最终的新 URL。
基于模式的重定向
当 URL 以一致的方式变化时,一条规则就能代替数千条单独的重定向。例如,在 Apache 上从每个 URL 中去掉 .php:
RewriteEngine On
RewriteCond %{THE_REQUEST} \s/([^.]+)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L]
或者把博客从 /blog/2019/05/post-name 迁移到 /blog/post-name:
RewriteRule ^blog/\d{4}/\d{2}/(.+)$ /blog/$1 [R=301,L]
在测试环境中仔细测试模式规则,一个小错误就可能重定向不该迁移的页面。
上线后的监控
迁移后的几周里,密切关注:
- Search Console 和服务器日志中的 404 错误:每一个都可能是你遗漏的 URL
- “网页索引编制”报告中新 URL 的收录情况
- 与基准相比,主要着陆页的流量
- 最重要查询的排名
在搜索引擎重新抓取并处理重定向的几周内,预计会有一些波动。大型网站可能需要几个月才能完全稳定下来。
日常变更中的重定向习惯
不只是迁移时重定向才重要。养成以下习惯:
- 每当你修改 URL 别名,或删除一个有合理替代页面的页面时,添加 301
- 添加重定向后更新内部链接,让网站直接链接到最终 URL
- 每年检查一次重定向列表,消除重定向链,并修复那些指向后来又迁移过的页面的重定向
要点总结
- 永久迁移使用永久重定向(301 或 308),只有真正临时的变化才使用临时重定向。
- 把每个旧 URL 重定向到最相关的对应新页面,而不是首页。
- 避免重定向链和循环;让每个旧 URL 都直接指向最终目的地。
- 根据抓取、统计和外链数据制作的完整重定向映射表,是任何迁移的核心。
- 在新网站上线的同一时刻启用重定向,之后密切监控 404。
- 保留重定向至少一年;对于拥有有价值外链的 URL,应永久保留。
常见问题
重定向应该保留多久?
Google 建议至少保留一年。对于有外链或书签的 URL,永久保留最安全,而且成本几乎可以忽略不计。
重定向会拖慢我的网站吗?
一次服务器端重定向只会增加很小的延迟。多次重定向组成的链会累积起来,所以要直接指向最终 URL。
使用 301 会损失排名吗?
正确映射的 301 重定向通常能保留排名,不过在搜索引擎处理变化的期间可能会出现暂时的波动。
对于已删除的页面,应该用 410 而不是 404 吗?
两者都会告诉搜索引擎页面已经不存在。410 表示它是被有意删除的,可能会稍快一些从索引中移除。对于没有替代品的页面,两者都可以。
检测你自己的网站
免费运行 55+ 项检查,每个问题都有修复方法。