🎀 🌸

HTTP 到 HTTPS 全站迁移:不丢权重的 8 个步骤

HTTP 到 HTTPS 全站迁移:不丢权重的 8 个步骤

先讲一个容易被忽略的事实: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.html301,且保留路径
证书有效期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 除了收录,还带来两件实际收益:

  1. HTTP/2 和 HTTP/3 需要 HTTPS。这两个协议的多路复用特性对首屏加载速度有实质帮助,直接影响 Core Web Vitals。
  2. 部分浏览器特性需要安全上下文。地理位置、剪贴板、部分 Service Worker 能力在 http 下直接不可用。

常见问题

只用 301 跳转,不改数据库里的 http 地址可以吗?

功能上能用,但不推荐。每张图片、每个内链都会多一次重定向,拖慢页面加载;页面源码里的地址不一致也可能让搜索引擎反复抓取旧地址。改数据库是更彻底的做法。

开了 HSTS,证书过期了怎么办?

浏览器会因为证书无效而直接拦截,且无法点击「继续访问」——这正是 HSTS 的设计目的。所以必须配置证书到期自动续期提醒,这是运维层面的必做项。

迁移会影响多久的排名?

小幅波动是正常的,通常在 2–4 周内恢复并回到原有水平。如果超过一个月仍明显下滑,优先检查 301 是否生效、canonical 是否更新、sitemap 是否提交了 https 版本。

图片[1]-HTTP 到 HTTPS 全站迁移:不丢权重的 8 个步骤-极客资源
© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容