先讲一个容易被忽略的事实:HTTPS 和 HTTP 是两个不同的来源(origin)。
如果两个地址都能返回 200、互不跳转,搜索引擎会分别抓取、分别建索引,你所有页面的权重就被一分为二。更糟的是,搜索引擎在决定给用户看哪个版本时会自己猜,猜的结果未必是你想要的。
自检:你的站点是否处于这种状态
curl -sI http://blog.nvcb.cn/ | head -1
curl -sI https://blog.nvcb.cn/ | head -1
健康的输出应该是:
HTTP/1.1 301 Moved Permanently ← http 版本 301 到 https
Location: https://blog.nvcb.cn/
HTTP/1.1 200 OK ← https 版本正常返回
不健康的输出是两个都返回 200。这时无论你的 DNS 解析和证书配得多好,收录都会受影响。
完整迁移的 8 个步骤
第 1 步:确认证书有效覆盖主域名
echo | openssl s_client -connect blog.nvcb.cn:443 -servername blog.nvcb.cn 2>/dev/null \
| openssl x509 -noout -dates -subject -ext subjectAltName
要确认三件事:证书未过期、subjectAltName 覆盖了带 www 和不带 www 两个版本、证书链完整(部分老旧安卓设备对中间证书很敏感)。
第 2 步:先让 https 站点完全可用,再跳转
顺序不能颠倒。正确流程是:https 能正常打开且无报错 → 再开启跳转。如果先跳转后修问题,用户和搜索引擎都会撞上打不开的页面。
需要在 https 下逐一确认:样式表加载正常、图片全部显示、表单能提交、AJAX 请求不报跨域错误。
第 3 步:配置 301 而非 302
这是最容易被写错的一行。301 是永久重定向,302 是临时重定向。用 302 的话,搜索引擎会认为你只是临时切走,不把权重从旧地址转移到新地址,旧地址会一直保留在索引里。
Nginx 的标准配置:
# 主域名跳转:带 www → 不带 www(或反过来,二选一)
server {
listen 80;
listen 443 ssl http2;
server_name www.blog.nvcb.cn;
ssl_certificate /etc/ssl/blog.crt;
ssl_certificate_key /etc/ssl/blog.key;
return 301 https://blog.nvcb.cn$request_uri;
}
# HTTP → HTTPS
server {
listen 80;
server_name blog.nvcb.cn;
return 301 https://blog.nvcb.cn$request_uri;
}
# 正式站点
server {
listen 443 ssl http2;
server_name blog.nvcb.cn;
root /var/www/blog;
ssl_certificate /etc/ssl/blog.crt;
ssl_certificate_key /etc/ssl/blog.key;
# ... 其他配置
}
关键点:一个域名只保留一个规范形式。下面这四者只应有一个返回 200,其余三个全部 301 过去:
http://blog.nvcb.cn/ → 301
http://www.blog.nvcb.cn/ → 301
https://www.blog.nvcb.cn/ → 301
https://blog.nvcb.cn/ → 200 ← 唯一的正版
第 4 步:搜出所有硬编码的 http 链接
数据库里存着的旧 http:// 地址不会因为你加了跳转就自动改变。它们仍会跳转到 https,但每次都多一次往返,而且在页面源码里留下不一致的地址。
WordPress 环境下的批量替换(执行前务必先备份数据库):
# 先看有多少处
wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_content LIKE '%http://blog.nvcb.cn%';"
# 确认无误后替换
wp search-replace 'http://blog.nvcb.cn' 'https://blog.nvcb.cn' --all-tables --precise --dry-run
wp search-replace 'http://blog.nvcb.cn' 'https://blog.nvcb.cn' --all-tables --precise
一定要带 --dry-run 先跑一遍,看清楚会被改动多少行。--precise 避免序列化数据被破坏,这一点对存了主题设置、小工具配置的表尤其重要。
第 5 步:处理混合内容(Mixed Content)
页面本身是 https,但里面还引用着 http 的图片、脚本或样式。浏览器会在地址栏显示「不安全」,部分资源会被直接拦截。
排查方法:打开一篇文章,按下 F12 打开控制台,搜索 Mixed Content 或 http:// 的警告,会列出每一个被拦截的资源地址。
# 命令行批量扫描整站页面的 http 资源
curl -s https://blog.nvcb.cn/183.html \
| grep -oE '(src|href)="http://[^"]+"' \
| sort -u
常见来源有三处:
- 文章正文里手写的旧图片地址(用步骤 4 的替换解决);
- 第三方脚本或图标库仍在使用 http(改成 https 或者换源);
- 站点设置里配置的资源域名写的是 http(去后台改)。
另外要改 wp-config.php 和数据库里的 siteurl / home:
define('WP_HOME', 'https://blog.nvcb.cn');
define('WP_SITEURL', 'https://blog.nvcb.cn');
顺手可以在 wp-config.php 加上强制后台走 https:
define('FORCE_SSL_ADMIN', true);
第 6 步:开启 HSTS
HSTS 告诉浏览器「这个域名以后一律用 https,别再尝试 http」。这能省掉第一次访问的重定向往返,也是消除混合内容风险的第一道防线。
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
务必先确认全站 https 稳定运行再用。max-age 一旦被浏览器记住,在过期前访问者无法回退到 http。建议先用小值(如 max-age=300)验证一周,再改成一年。
第 7 步:更新 sitemap 和所有站外资产
迁移不只是改服务器,还要改「别人指向你的地址」:
- sitemap 里的地址(WordPress 会自动跟随 siteurl 变化);
- robots.txt 里 Sitemap 声明用的是绝对地址;
- RSS 订阅地址、分享链接;
- 各大搜索引擎站长平台里重新提交 https 版本的站点地图;
- 外部平台(公众号、知乎、论坛签名)里留的旧链接——能改的改,改不了的就靠 301 兜住。
第 8 步:迁移后验收
| 检查项 | 命令 / 方法 | 期望结果 |
|---|---|---|
| http 首页 | curl -sI http://域名/ | 301,Location 指向 https |
| https 首页 | curl -sI https://域名/ | 200 |
| http 内页 | curl -sI http://域名/183.html | 301,且保留路径 |
| 证书有效期 | openssl s_client | 未过期,SAN 覆盖两个版本 |
| 混合内容 | F12 控制台 | 无 Mixed Content 警告 |
| canonical | 查看源码 | 全部是 https 绝对地址 |
| sitemap | 打开 /wp-sitemap.xml | 所有 URL 均为 https |
| GSC 资源 | Search Console | 已添加 https 资源并验证通过 |
验收通过后,观察 GSC 的索引报告 2–4 周。正常表现是:https 有效页面数持续上升,http 版本缓慢下降至归零。
两个附带的好处
HTTPS 除了收录,还带来两件实际收益:
- HTTP/2 和 HTTP/3 需要 HTTPS。这两个协议的多路复用特性对首屏加载速度有实质帮助,直接影响 Core Web Vitals。
- 部分浏览器特性需要安全上下文。地理位置、剪贴板、部分 Service Worker 能力在 http 下直接不可用。
常见问题
只用 301 跳转,不改数据库里的 http 地址可以吗?
功能上能用,但不推荐。每张图片、每个内链都会多一次重定向,拖慢页面加载;页面源码里的地址不一致也可能让搜索引擎反复抓取旧地址。改数据库是更彻底的做法。
开了 HSTS,证书过期了怎么办?
浏览器会因为证书无效而直接拦截,且无法点击「继续访问」——这正是 HSTS 的设计目的。所以必须配置证书到期自动续期提醒,这是运维层面的必做项。
迁移会影响多久的排名?
小幅波动是正常的,通常在 2–4 周内恢复并回到原有水平。如果超过一个月仍明显下滑,优先检查 301 是否生效、canonical 是否更新、sitemap 是否提交了 https 版本。
![图片[1]-HTTP 到 HTTPS 全站迁移:不丢权重的 8 个步骤-极客资源](http://blog.nvcb.cn/wp-content/uploads/2026/09/6ca9d98a-c310-433d-bc31-f2d007b7dba6-1024x683.png)
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们第一时间更新。











暂无评论内容