发布时间:2026-09-27 05:00 更新时间:2026-09-27 05:00 阅读量:0
做站点迁移或者改版的时候,很多人只关心"跳过去能不能打开",至于用的是301还是302、是不是同一批规则里混着写,往往没留意。过一两个月发现收录变少、目标页排名不稳,回头查日志才发现:一部分老链接走的是301,另一部分是302,甚至同一个页面今天301明天302。搜索引擎面对这种信号,只能把它当成两个不同的地址来处理,权重自然就被拆开了。
这篇把301和302的本质差别、常见误用场景、Nginx与WordPress里怎么写,以及改完之后怎么清缓存、怎么用命令验证,一次讲清楚。目标是让你改完跳转后能自己确认"信号统一了",而不是等搜索引擎慢慢给反馈。
301 是永久重定向,语义是"这个地址以后就搬到新地址了,别再来找老的"。搜索引擎收到301后,通常会把老URL积累的链接权重、收录信号逐步转移到新URL,并把老URL从索引里替换掉。302 是临时重定向,语义是"暂时换个地方,老地址还会回来"。它对搜索引擎的提示是:老URL才是正主,新URL只是临时替身,所以权重和排名一般仍然挂在老URL上,新URL很难被当成正式入口积累权重。
真正麻烦的是混用。比如改版时把列表页写成301、详情页写成302;或者 CDN 层配了301,源站 Nginx 又配了302,两层叠加;再或者 WordPress 插件负责一部分跳转,服务器配置负责另一部分。结果是同一批老链接对外释放的信号不一致,搜索引擎抓取时会看到跳转链、跳转类型反复变化,处理策略就会保守:既不敢把权重完全转移,也不愿意把新地址当正式页面收录。表现出来就是新页迟迟不进索引、老页排名掉、站点整体抓取频次下降。
还有一种隐蔽情况是跳转链太长。老域名301到临时域名,临时域名302到正式域名,正式域名再301到带www的地址。链条一长,每次跳转都可能损失一部分传递效果,抓取预算也被浪费在中间节点上。判断标准很简单:从旧地址到最终地址,理想状态是一次301直达,超过两次就该整理规则了。
选型的原则是问自己一句话:这个旧地址以后还会不会作为入口存在?
该用301的场景:域名更换、http 换 https、裸域统一到 www(或反过来)、URL 结构改版且老地址永久废弃、栏目合并。这些都是一次性、不会回头的变更,用301把信号完整交出去。
该用302的场景:A/B 测试、临时维护页、按地域或登录状态临时分流、活动页短期指向。这些跳转未来会撤销,用302可以避免搜索引擎把临时地址收录成正主。
需要特别注意302的坑:如果临时跳转一挂就是几个月,搜索引擎可能自行判断为永久性变更,开始把新地址当正式页面处理,等你哪天把302撤掉,排名和收录又会抖一次。所以临时跳转要设期限,到期清理,别让它长期留在配置里。
Nginx 里的写法差异只在一个关键字:
# 永久跳转,http 统一到 https 并带 www
server {
listen 80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
临时跳转,活动期间把 /old-activity 指到新活动页
location = /old-activity {
return 302 https://www.example.com/new-activity;
}
单页面永久跳转,注意保留查询参数
location = /old-page.html {
return 301 https://www.example.com/new-page.html$is_args$args;
}
这里有两个容易踩的细节。一是丢参数:只写目标地址不带 $is_args$args,带 UTM 或分页参数的旧链接跳过去后参数全没了,统计和分页都会出错。二是server_name 与证书不匹配:跳转目标如果是 https,证书必须覆盖目标域名,否则浏览器会先报证书错误,跳转根本走不到。具体证书覆盖范围以你实际申请的证书 SAN 列表为准。
WordPress 站点还要注意插件与服务器规则打架。有些 SEO 插件自带重定向模块,服务器配置里也写了同样的规则,两层都生效时可能出现"301 套 302"。排查方法是先临时停用插件重定向模块,只保留一层,观察跳转链是否变短。
跳转规则改完不生效,九成是缓存问题。按从外到内的顺序清,别跳步:
先刷 CDN 边缘缓存,把相关 URL 或整个目录提交刷新;再清源站反向代理缓存(如果配了 proxy_cache,需要清缓存目录或按 key 清理);然后清 WordPress 侧的对象缓存与页面缓存插件;最后在浏览器无痕窗口验证,避免本地缓存干扰。浏览器强刷只能解决本地那层,前面三层不动的话,你看到的仍然是旧行为。
验证跳转类型和链条,用 curl 最直接:
# -I 只看响应头,-L 跟随跳转,-o /dev/null 丢弃正文
curl -sIL -o /dev/null -w '%{http_code} %{redirect_url}\n' https://example.com/old-page.html
只看第一跳的状态码和 Location
curl -sI https://example.com/old-page.html | head -n 5
打印完整跳转链上每一跳的状态码
curl -sIL -o /dev/null -w '%{url_effective} -> %{http_code}\n' https://example.com/old-page.html
看输出时关注三点:第一跳是不是 301(而不是 302 或 307);Location 指向的最终地址是不是你预期的那个;跳转次数是不是只有一次。如果输出里出现 301 接 302 再接 301,就说明多层规则在打架,需要回到配置里合并。
批量检查可以用脚本遍历 sitemap 或日志里的老 URL,把状态码和跳转目标导成表格,重点看有没有 302 混在里面、有没有跳转成 404 的死链。搜索引擎方面,可以在搜索资源平台提交改版规则或更新 sitemap,并在抓取诊断工具里看实际抓到的状态码,这和 curl 的结果应当一致;如果两边不一致,通常是 CDN 或爬虫 UA 命中了不同的 server 块,检查是不是按 UA 做了分流。
最后提醒一句:跳转规则变更后别急着反复改。搜索引擎重新抓取和评估需要时间,短时间内的数据波动属于正常现象,频繁调整反而会让它更保守。把规则一次性理清、验证跳转链统一,剩下的交给时间就好。
| 📑 | 📅 |
|---|---|
| WordPress后台被暴力撞库告警:登录限速与日志加固 | 2026-09-26 |
| 域名下PC站与m站SEO冲突:canonical、自适应与UA跳转取舍 | 2026-09-26 |
| 宝塔面板升级后网站打不开:PHP扩展、Nginx配置与面板服务逐项回滚排查 | 2026-09-26 |
| WordPress中文名附件变乱码或404:编码链路排查 | 2026-09-26 |
| CDN与源站双重缓存导致改版不生效:三层缓存刷新顺序 | 2026-09-26 |
| 宝塔面板部署 WordPress 后固定链接 404:伪静态规则加载顺序与 try_files 排查 | 2026-09-27 |
| HTTPS混合内容批量修复:控制台与curl定位http资源 | 2026-09-27 |
| MySQL被OOM Kill排查:swap、buffer pool与监控取舍 | 2026-09-27 |
| Nginx resolver 域名解析缓存:反代上游换 IP 后仍走旧地址的排查 | 2026-09-27 |
| 宝塔面板日志被CDN节点IP填满:log_format与real_ip联动调整 | 2026-09-27 |