301是永久跳转,302是临时跳转,两者最核心的差别在于搜索引擎会不会把原网址的权重和排名交给新网址——301会,302基本不会。所以除了短期维护页、活动页和分流场景,其他情况一律用301。很多人配跳转时随手写了302,页面也能正常打开,看起来没毛病。等到一两个月后发现新域名收录迟迟上不去、关键词排名一路往下掉,回头排查才发现是状态码写错了。这个坑在网站换域名的时候尤其常见,而且代价不小。
301跳转和302跳转的本质区别:一个叫搬家,一个叫出门
状态码说的是两件完全不同的事
301 的全称是 Moved Permanently,永久重定向。它对搜索引擎的表达是:这个网址以后不会再用了,请把新网址当成它的正式替身。302 的全称是 Found,临时重定向,表达的是:这个网址还在,只是暂时把你带到别处,将来还会回来。
另外还有 307 和 308,可以理解成 302 和 301 的“严格版”,区别在于是否允许改变请求方法。做普通网页跳转基本用不上,知道有这么回事就够了。
搜索引擎的处理逻辑完全不同
面对301,搜索引擎会把新URL当成原URL的继承者,把外链、权重、历史表现这些“家底”逐步迁移过去,同时把旧URL从索引里逐步清退。面对302,搜索引擎会认为旧URL仍然是正主,新URL只是临时落脚点,索引里保留的依旧是旧地址,权重也不会转移。
这里有个容易误解的地方:302 不等于完全没影响。如果某个302存在了很长时间,搜索引擎可能会重新判断你的真实意图,但这属于被动纠偏,不是你可以主动依赖的机制。把希望寄托在“时间久了它自己会转”上,风险太高。
浏览器缓存行为差得很远
301 会被浏览器默认长期缓存。这带来一个很实际的麻烦:一旦配置错了,用户本地缓存很难清掉,你改了服务器配置,老访客还在往错误地址跳。302 一般不缓存或缓存极短,改起来轻松。这也是测试阶段建议先用302、确认无误再切301的原因。
301跳转和302跳转哪个更利于SEO?答案取决于你的真实意图
把这两个状态码放到SEO语境里对比,本质上是问:你是想让新地址彻底接班,还是只想临时顶一下?
权重走向不一样
301 会把原页面积累的权重传递到目标页面,这是行业共识认为的标准做法。302 则会让权重继续留在原URL上,新URL拿不到什么好处。域名跳转对网站权重的影响,几乎全部由这一个状态码决定。这也是为什么换域名时,业内专家指出最关键的一步不是提交改版规则,而是先把跳转类型配对。
收录替换速度不一样
301 之下,搜索引擎会启动“旧换新”的流程,逐步用新URL替换搜索结果里的旧URL。302 之下这个流程压根不会启动,你看到的永远是旧地址。
这些场景确实该用302
- 网站改版期间的临时维护页、公告页
- 限时活动页面临时重定向到活动入口
- 按地域或语言做临时分流,后续可能调整
- 页面A/B测试,两个版本轮换展示
- 新跳转规则上线前的测试验证阶段
只要你的意图是“这个地址以后不再作为主地址使用”,就该是301,没有中间地带。
网站换域名怎么做301跳转?三种常见配置方式
下面给的是可直接抄的配置,改掉域名就能用。前提是旧域名和新域名都已经能正常解析到同一台服务器。
Nginx:整站跳转最干净的写法
在旧域名的 server 块里加一条 return 即可,注意保留 $request_uri,否则所有内页都会被跳到首页。
server {
listen 80;
server_name old.com www.old.com;
return 301 http://www.new.com$request_uri;
}
如果只是某个目录搬迁,用 rewrite 做前缀匹配更合适。配完记得 nginx -t 测试语法,再 reload 生效。
Apache:.htaccess 里的规则
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.old.com$
RewriteRule ^(.*)$ http://www.new.com/$1 [R=301,L]
单页面之间的跳转可以用更简单的 Redirect 指令:
Redirect 301 /old-page.html http://www.new.com/new-page.html
程序层跳转:PHP 要显式声明状态码
PHP 里写 header(“Location: …”) 时,默认发出去的是302。要变成301必须显式指定:
header("Location: http://www.new.com/new-page.html", true, 301);
exit;
漏掉第三个参数是高频错误,很多人配完以为做了301,其实一直是302在跑。
JS 跳转和 meta refresh 为什么不推荐
这两者都属于客户端跳转,返回给搜索引擎的响应码是200,既不算301也不算302。搜索引擎能识别,但传递权重的能力很弱,用户端还会出现闪一下白屏。做长期迁移时不要用。
301跳转多久生效?别指望今天配明天就换完
没有固定时间。快的话几天,慢的可能要数周甚至更久,取决于几个变量:
- 站点规模:几百个页面和几十万个页面,抓取一遍的时间差着量级
- 抓取频次:平时蜘蛛来得勤的站,发现变化更快
- 外链分布:旧URL的外链越多,搜索引擎重新评估的周期越长
- 是否主动提交:在百度搜索资源平台使用站点改版工具提交规则,能明显缩短周期
这段时间里排名波动是正常的,别急着反复改配置。频繁变更跳转规则会让搜索引擎难以判断你的最终意图,反而拖慢整体进度。
怎么验证301跳转是否生效
curl 命令最直接
在终端执行:
curl -I http://old.com
看返回的第一行。出现 HTTP/1.1 301 Moved Permanently 说明状态码对了,再看 Location 头指向的地址是否正确、有没有多出或少掉路径。想跟踪整条跳转链,加 -L 参数看最终落地页。
浏览器与站长平台交叉验证
打开浏览器开发者工具的 Network 面板,勾选保留日志后访问旧地址,看第一条请求的 Status 是不是301。这个方法的优势是能看到浏览器缓存有没有干扰。再配合百度搜索资源平台的抓取诊断功能,确认蜘蛛拿到的响应码和你本地看到的一致。
配跳转最容易踩的几个坑
- 循环跳转:A跳B、B又跳A,用户看到的是“重定向次数过多”。多半是带www和不带www的规则写反了。
- 链式跳转:旧域名跳中间域名再跳新域名。每多一跳就多一次损耗,应该直接一步到位。
- 只跳首页不跳内页:首页配了规则,内页全部404。整站迁移必须用带 $request_uri 或用正则捕获路径的写法。
- 大小写和斜杠不统一:/Page.html 和 /page.html 被当成两个地址,跳转规则没覆盖到就会漏。
- 跳转后忘了更新站内链接和 sitemap:跳转是给外部入口用的,站内还指着一堆旧地址,等于自己给自己制造跳转链。
关于域名301跳转和302跳转的常见问题
301跳转配错了,能改回302吗?
能改,但已经被浏览器缓存的301不会立刻失效。老访客本地仍然会按旧规则跳转,需要等缓存过期或者用户手动清缓存。所以上线前用302测试、确认无误再切301,是更稳妥的流程。
302长期不改,会不会自动变成301?
不会。搜索引擎可能会在长期观察到稳定信号后重新判断,但这是被动的推测,不是可控机制,也不保证发生。指望它自动转换,风险远大于收益。
换域名时,旧域名的内页必须一条条配301吗?
不需要。整站结构不变的情况下,用捕获请求路径的通配规则一次性覆盖即可。只有当新旧站点的URL结构完全不同时,才需要按栏目或按页面建立映射表,逐条配置对应关系。