权重传递完整Nginx配置修复收录流失问题
网站换了域名、调整了 URL 结构,或者从 HTTP 切到 HTTPS 之后,如果旧链接没有正确做 301 跳转,搜索引擎会把旧地址当作失效链接,收录和权重都会明显下滑。
本文用完整可复制的 Nginx 配置,带你把 301 权重传递做到位,修复收录流失问题,零基础也能照着操作。
先判断你是否真的需要 301 权重传递
出现这几种情况,搜索引擎就需要靠 301 来通知"旧地址已永久迁移到新地址":
- 更换域名,老域名需要跳转到新域名。
- 全站启用 HTTPS,HTTP 请求要强制跳转到 HTTPS。
- 修改了栏目路径,比如
/post/123改成/article/123。 - 清理重复页面,把多个相似 URL 统一到唯一地址。
如果旧地址返回 200 但内容已经删掉,或者返回 404,权重都没法传递。
只有 301 才能告诉搜索引擎:权重请转移到新地址。
Nginx 301 配置的三种完整写法
首先找到站点配置文件,常见路径是 /usr/local/nginx/conf/vhost/你的域名.conf 或 /etc/nginx/sites-available/你的域名.conf。
修改前建议先备份。
1. 整站域名跳转(换域名场景)
server {
listen 80;
server_name old-domain.com www.old-domain.com;
return 301 https://www.new-domain.com$request_uri;
}
$request_uri 会保留原始路径和查询参数,比如 old-domain.com/page? 会完整跳到
id=1new-domain.com/page?,权重传递不掉链子。
id=1
2. HTTP 强制跳转 HTTPS
server {
listen 80;
server_name www.example.com example.com;
return 301 https://www.example.com$request_uri;
}
注意这里必须写在监听 80 的 server 块里,不要写进 443 的配置中。
3. 指定路径跳转到新路径
location ^~ /old/ {
rewrite ^/old/(.*)$ /new/$1 permanent;
}
permanent 就是返回 301。
如果只是单个页面,可以直接写 return 301 /new-page;。
配置完成后,执行 nginx -t 检查语法,没问题再运行 nginx -s reload 让配置生效。
配置 301 时最容易踩的坑
- 用 302 代替 301。302 是临时跳转,不传递权重,搜索引擎还会继续抓旧地址,收录流失问题根本解决不了。
- 跳转到首页而不是对应页面。旧文章跳首页会让用户和搜索引擎都糊涂,尽量用
$request_uri或正则把每个旧 URL 映射到相同内容的新 URL。 - 出现重定向循环。比如新旧域名又互相跳转,或者 HTTPS 和 HTTP 配置互相覆盖,浏览器会报"重定向次数过多"。检查所有
server块,确保每个地址只跳一次。 - 配置文件里残留旧规则。旧站点下过 301,新配置又加了不同跳转字段,语法检查可能通过,但实际跳转是旧规则生效。改完用
nginx -T查看最终生效的完整配置。
另外,使用了 CDN 或云防火墙时,需要让 CDN 层先放行 301 状态码,否则源站返回 301 可能被 CDN 吞掉。
验证 301 是否真正生效
配置 reload 后,在服务器或本地终端执行:
curl -I http://old-domain.com/old/page
如果配置正确,返回内容里应该看到:
HTTP/1.1 301 Moved Permanently
Location: https://new-domain.com/new/page
Location 地址必须是你想要跳转的最终地址,不能带第二层跳转。
再用 curl -L 跟随跳转,确认最终页面能打开且返回 200。
对于批量页面,可以写个循环检查,或者用站长工具的"抓取诊断"功能看抓取返回是否 301。
搜索引擎重新抓取需要时间,通常在几天到几周内会陆续更新收录,期间不要反复改动 301 规则。
如果你正在处理 301 权重传递完整 Nginx 配置修复收录流失问题,建议先按本文方法完成一条路径的测试,确认跳转无误后再批量应用。
遇到异常时从重定向循环和 Location 地址两个方向排查,一般都能快速定位问题。