当网站更换域名、调整链接结构或合并重复页面时,301重定向是必不可少的工具。它能告诉搜索引擎旧地址已永久转移到新地址,从而将原页面的权重和排名传递过去,避免流量流失。以下从原理到实操,带你一步步完成设置。
301状态码代表永久移动,适合长期有效的地址变更。搜索引擎遇到301时会把旧页面的收录和权重合并到新URL上。如果你只是短期测试页面或做活动落地页,应该改用302临时重定向,否则搜索引擎会误以为你的内容发生了永久更换,影响原页面的正常收录。
判断是否需要使用301:在地址永久性变更、内容实质性迁移、多个URL指向同一内容这三种情况下使用。如果不是这种情况,建议先考虑其他方案。
这是性能最好的方式,几乎所有主流服务器都支持。你需要能访问服务器配置文件,修改后注意保存格式和生效方式。
在网站根目录找到.htaccess文件(若不存在则新建),写入以下规则:
Redirect 301 /old-page.html /new-page.html
整站迁移域名时,可以这样写:
Redirect 301 / http://new-domain.com/
保存文件时务必选择UTF-8无BOM编码,否则可能导致页面乱码或规则失效。修改后直接刷新网站测试,通常无需重启服务。
编辑Nginx配置文件中的server块,在合适位置添加重定向规则。单路径用rewrite指令:
rewrite ^/old-path$ /new-path permanent;
整域名迁移推荐用return指令,保留原请求参数:
return 301 http://new-domain.com$request_uri;
改完配置文件一定要执行nginx -t检查语法,再重载服务(如systemctl reload nginx),否则配置不会生效。
对于不熟悉代码操作的站长,用CMS自带功能或第三方插件更省心。以下以WordPress为例:
该插件自带日志记录和404监测功能,设置后发现用户访问异常可以及时查看来源。需要注意:插件设置过程中如果出现死循环(A跳到B,B又跳回A),赶紧检查目标URL是否填成了旧地址。Joomla和Drupal也有类似组件,配置逻辑一致,重点核对路径不要带多余斜杠。
当网站是自研程序或托管环境限制无法改服务器配置时,可以用代码在页面输出前发送响应头。
PHP写法如下:
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://new-domain.com/new-page");
exit();
ASP.NET可以直接调用Response.RedirectPermanent("新地址", true)方法。Python(Flask或Django)中则用redirect函数配合status=301参数。关键原则:代码必须放在所有HTML输出之前,否则会报错或重定向不成功。建议先在测试环境验证HTTP状态码是301再上线。
别以为设置完就万事大吉,花几分钟验证能避免后期权重流失。打开浏览器无痕模式,访问旧URL,观察地址栏是否自动变化并显示新地址。更严谨的方式是用检查HTTP响应工具,查看返回的状态码是否为301,目标Location是否正确。
如果旧页面数量多,可以用Screaming Frog等工具批量抓取,筛选状态码为301的链接清单。常见问题包括:重定向链过长(A跳B、B跳C、C跳D),应确保旧URL直接指向最终地址;404误配置成301,把失效页面错误地跳到无关页面,反而稀释权重。因此每一条规则都要对照真实页面确认。
正常情况下不会。搜索引擎会传递大部分权重到新页面,但传递比例并非100%,短期内排名可能波动,持续优化新页面的内容和外链可以恢复。不要频繁修改重定向目标,否则会影响搜索爬虫的信任度。
选择其中一个作为首选域名,在服务器层面把另一个统一301到首选域名。例如确定使用不带www的版本,就把www版本的所有请求永久跳转到主版本。这能避免权重被分散在两套URL上,是SEO的基础操作。
服务器层面改动立刻生效,刷新页面即可看到跳转。但搜索引擎重新抓取和处理需要时间,一般几天到几周不等。耐心等待,同时保持新页面正常可访问,不要在此期间下线新地址。
301重定向并不复杂,核心是明确永久移动的目的,再选择适合自己技术条件的实现方式。建议优先采用服务器配置或CMS插件,避免代码方式带来的维护成本。设置完成后逐一验证每条规则,确认状态码正确、跳转目标无循环、无多余跳转链。在更换域名或修改URL结构后持续观察搜索引擎的收录变化,及时调整策略,就能将流量和权重的损失降到最低。