本文目录导读:

在PHP项目中,选择301还是302跳转,核心取决于这次跳转是否是永久性的。
以下是具体的判断标准和场景指南:
核心区别一句话总结
- 301(永久重定向):告诉浏览器和搜索引擎:“这个页面彻底搬家了,以后都别来这了,去新地址。”
- 302(临时重定向):告诉浏览器和搜索引擎:“这次先去看那个页面,但原来的地址还是有效的,下次还可能回来。”
如何选择?(按场景分类)
SEO与URL规范(最常见场景)
- 网站更换域名:
old-domain.com迁移到new-domain.com。- 选择:301,把旧域名的权重和排名传递给新域名。
- 修改URL结构:例如文章URL从
article.php?id=123改为article/123.html。- 选择:301,告诉搜索引擎旧的URL已作废,请收录新的。
- 强制使用www或非www:例如将所有
example.com跳转到www.example.com。- 选择:301,这是标准做法,避免搜索引擎视为两个网站。
- 强制使用HTTPS(
http://->https://)。- 选择:301,彻底告诉浏览器和搜索引擎,以后只走HTTPS。
用户登录与后台操作
- 用户未登录,跳转到登录页面:
/dashboard->/login。- 选择:302,因为这个跳转是临时的,登录成功后,用户应该能正常访问 /dashboard。
- 表单提交成功后跳转:
/submit-order->/order-success/123。- 选择:302(或直接用
header('Location: ...')默认就是302),这是防止表单重复提交的PRG(Post/Redirect/Get)模式,是临时的流程跳转。
- 选择:302(或直接用
促销、维护与A/B测试
- 网站维护:当进行系统升级时,所有页面跳转到
maintenance.html。- 选择:302,告诉搜索引擎:“我只是暂时去度假了,请别把我从索引中删除。”
- 限时促销活动:首页跳转到
promo-christmas.html。- 选择:302,促销结束后,首页应该恢复。
- A/B测试:50%的用户被分流到新设计的页面
/home-v2。- 选择:302,因为你还在测试,最终版本还没确定。
错误页面与重定向链
- 删除过期的文章或产品:当旧页面内容已永久消失,且有一个很好的替代页面时。
- 选择:301,注意:如果这个页面彻底没有替代品,应该返回 410 Gone,而不是跳转到首页(软404对SEO不好)。
- 临时移动内容:例如某篇文章因政策需要暂时下架,并跳转到政策说明页。
- 选择:302,等文章能上架了,再取消跳转。
PHP代码实现
<?php
// 301 永久重定向
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://www.example.com/new-page/");
exit();
// 302 临时重定向 (PHP默认就是302)
header("Location: https://www.example.com/temp-page/");
exit();
// 或者明确指定302
header("HTTP/1.1 302 Found");
header("Location: https://www.example.com/temp-page/");
exit();
?>
常见错误与后果
| 场景 | 错误做法 | 后果 |
|---|---|---|
| 网站永久换域名 | 使用 302 | 旧域名权重不转移,SEO清零,用户被重定向但谷歌保留旧域名为首页 |
| 用户未登录 | 使用 301 | 搜索引擎会把登录页当成首页(或用户页面),导致真正的首页/IP被从索引中移除 |
| 维护期间 | 使用 301 | 搜索引擎认为你的网站彻底搬家了,维护结束后,你的搜索排名可能永久消失 |
| 删除文章 | 使用 302 跳转到首页 | 搜索引擎认为是临时现象,会持续访问旧链接,导致大量404软错误 |
最佳实践速查表
| 你的意图 | 应使用的状态码 |
|---|---|
| 永久搬家(换域名、改URL) | 301 |
| 临时招待(维护、测试、促销) | 302 |
| 用户未登录踢去登录 | 302 |
| 强制HTTPS | 301 |
| 合并网站 / 内容合并 | 301 |
| 任何不确定的情况 | 默认用302(更安全) |
一句话决策原则:
- 如果确信永远不会再用这个旧URL,用 301。
- 如果未来可能还会恢复,或者是用户状态/流程相关的跳转,用 302。
在商业项目中,如果涉及到搜索引擎流量,请务必谨慎使用301,因为一旦设置错误,恢复排名的代价可能比预期大得多。