网站改版、更换域名或调整链接结构后,旧地址积累的访问流量和搜索排名不应被白白浪费。301跳转正是连接新旧地址的桥梁,它能告诉浏览器和搜索引擎"该页面已永久搬到了新位置",让用户自动进入新页面,同时把旧链接的权重平稳过渡给新地址。很多站长在配置时踩过坑、走过弯路,这篇文章就系统梳理配置方法、容易出错的地方以及实际运维中的高频问题。
301状态码在HTTP协议里的含义是"永久移动"。当服务器收到对旧地址的请求时,会返回这个状态码并附带新的URL地址。对用户而言,浏览器会立刻跳转并记住新地址,此后直接访问新页面;对搜索引擎来说,这是一个明确的指示——把旧页面的收录和排名积累传递给新页面,实现权重的有效合并。
通常需要用到301跳转的情况包括:网站更换主域名、多个域名希望统一指向同一主站、清理重复或低质量内容、从HTTP升级到HTTPS、或是把冗长的动态参数链接改写成简洁的静态路径。这里要特别注意,301和302不可混用:如果页面只是临时下线、短时维护,应当使用302临时跳转。若误用301,搜索引擎会认为这是永久性迁移,权重转移后无法撤回,可能造成不可逆的损失。
Apache是最常见的服务器软件之一,多数情况下301规则写在站点根目录下的.htaccess文件里,修改保存后立即生效,无需重启服务。
只需要迁移个别页面时,在.htaccess中加一行就够:
Redirect 301 /old-page.html https://www.example.com/new-page.html
这个指令有几个容易出错的地方:旧路径不要带域名,从斜杠开始写;路径必须和服务器上的实际文件结构完全一致,包括大小写;每条规则占一行,不要挤在一起。建议先在次要页面上测试,确认无误再批量应用。
当涉及整个目录甚至整个站点的跳转时,RewriteRule更灵活。例如把旧域名下的所有请求转跳到新域名的相同路径:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC]
RewriteRule ^(.*)$ https://www.new-domain.com/$1 [R=301,L]
这套规则保持了路径结构,只替换域名主体。如果你对正则不熟悉,先从最简单的匹配场景下手,务必在测试环境里先跑一遍规则,避免影响正常页面的访问。
Nginx以高并发处理能力见长,它的配置语法和Apache差异明显,且修改后必须重载配置才会生效。
在站点对应的server块内,用rewrite指令实现单页重定向:
rewrite ^/old-page\.html$ https://www.example.com/new-page.html permanent;
行尾的permanent表示这是301永久跳转,如果写成redirect则为302。配置后执行nginx -t检查语法,再执行nginx -s reload让规则生效。
把旧域名所有请求转跳到新域名的写法如下:
server {
listen 80;
server_name old-domain.com;
return 301 https://www.new-domain.com$request_uri;
}
return指令比rewrite更简单直接,$request_uri会自动带上原始路径,适合这种整站域名替换的场景。注意确认server块内没有其他冲突的跳转规则,否则会优先匹配先出现的规则。
即使跳转规则写对了,在实际落地中还有不少隐藏的坑。
判断配置是否成功有一个简单方法:在命令行用curl -I 旧地址,查看返回是否包含301状态码和Location头信息。若两者都正确,则跳转链路已打通。
权重传递并非即时完成。搜索引擎需要重新抓取旧地址、识别301状态码、再进行索引合并,这个过程通常需要数天到数周。短期内排名出现波动属于正常现象,建议保持规则稳定,不要频繁修改跳转目标。
尽量避免。只有当多个旧页面内容高度相似或重复时,才可以合并指向一个对应页面。若把内容各异的页面全部指向首页,搜索引擎会认为存在大量低质量采集页,反而不利于网站整体评价。
会损失一小部分。传统观点认为301能传递绝大部分权重,但实际经验中通常有细微损耗。为降低损失,建议让新页面内容和结构尽量贴近旧页面,同时保持更新频率,让搜索引擎尽快完成重收录。
301跳转是网站改版、域名更换时的核心工具,正确的配置能保住旧地址的流量和搜索权重。掌握Apache和Nginx下的基本写法只是第一步,更重要的是理解301与302的区别、规避循环跳转和目标页404等陷阱。建议在实施前先梳理好新旧地址映射表,在测试环境验证规则,上线后持续观察日志和排名变化,确保整个迁移过程平稳过渡。