WordPress换主机换域名完整迁移指南

WordPress换主机换域名完整迁移指南

WordPress 换主机 / 换域名完整迁移指南:不丢数据、不掉收录

适用场景:换云服务器、换主机商、换域名,或「换主机顺便换域名」。
目标:文件与数据库完整迁走;图片与内链不裂;换域名时用 301 把权重与旧流量接住。
依据:对齐 WordPress Codex / 开发者文档中的 Moving WordPress、Changing The Site URL,以及 Better Search Replace 插件官方推荐流程;并结合宝塔面板常见操作路径。


迁移前先分清:你属于哪一种

类型要做什么难度
A. 只换主机,域名不变搬文件 + 搬数据库 + 改wp-config数据库信息;DNS 指到新 IP
B. 只换域名,主机不变改站点 URL + 全库安全替换旧域 + SSL + 旧域 301
C. 主机和域名一起换A + B 全做

三种情况第一步都一样:完整备份。没有可回退备份,不要开始迁移。


迁移总流程(建议按表执行)

阶段做什么完成标准
1. 备份旧站文件 + 数据库各一份,并下载到本地本地能打开.sql/ 压缩包
2. 新环境就绪新主机建站目录、PHP、数据库、(如需)域名解析与 SSL新环境可访问空目录或占位页
3. 导入数据上传文件、导入数据库、改wp-config.php不再报「建立数据库连接出错」
4. 修正 URL仅换域名时:覆盖 siteurl/home + 序列化安全替换前后台用新域可登录,图片不指向旧域
5. 伪静态与缓存保存固定链接、清缓存、核 SSL文章页不再大面积 404
6. SEO 收尾旧域 301、Search Console、外链与统计代码旧 URL 访问跳到对应新 URL

第 1 阶段:备份旧站(不可跳过)

1.1 备份什么

  1. 网站根目录全部文件(含wp-content/uploads,图片都在这里)。
  2. 整库 SQL(不要只导出某几张表)。
  3. 记下当前信息,后面核对用:
记录项示例
旧域名https://www.old.com
表前缀wp_(也可能是自定义前缀)
PHP 版本如 8.1
是否 HTTPS是 / 否
固定链接结构如「文章名」

1.2 宝塔上怎么备

  • 文件:网站目录打包下载,或「备份」功能生成文件备份。
  • 数据库:数据库 → 导出 / 备份,下载.sql到本地。

备份包请同时留在本地。只放在同一台即将弃用的服务器上,不算安全备份。


第 2 阶段:准备新主机环境

  1. 安装与旧站接近的 PHP 版本(优先与旧站一致,减少兼容意外)。
  2. 创建网站站点(宝塔:网站 → 添加站点)。
  3. 创建空数据库,记下:库名、用户名、密码、主机地址(多为localhost)。
  4. 若已确定新域名:先把 DNS A 记录指到新服务器 IP;国内主机注意备案要求。
  5. 为新域名申请并开启 SSL(Let’s Encrypt 即可),全站按https://规划。

只换主机、域名不变时:可先把 DNS TTL 调低,切解析窗口更短;切完后再测。


第 3 阶段:搬家文件与数据库

3.1 上传 WordPress 文件

将旧站文件解压/上传到新站点根目录,保持结构完整,至少确认存在:

  • wp-admin/
  • wp-includes/
  • wp-content/
  • wp-config.php
  • index.php

3.2 导入数据库

在新主机 phpMyAdmin 或宝塔「导入」中,把旧站.sql导入到新建的空库。
导入失败常见原因:文件过大——可调大 PHPupload_max_filesize/post_max_size,或用命令行导入。

3.3 修改wp-config.php(几乎必做)

打开新站wp-config.php,把数据库信息改成新库的:

define('DB_NAME','新数据库名');define('DB_USER','新数据库用户');define('DB_PASSWORD','新数据库密码');define('DB_HOST','localhost');

同时核对:

$table_prefix='wp_';

必须与导入库里的真实表前缀一致。前缀写错,会表现为连不上表或后台异常,而不是「偶发小问题」。

导入并改好配置后,若仍提示Error establishing a database connection,逐项核对库名、用户、密码、主机,不要先怀疑主题。


第 4 阶段:换域名时的 URL 修正(最关键)

只换主机、域名完全不变:通常跳过全库替换;仍建议到「设置 → 常规」确认两个地址仍是正确域名。
换了域名:必须做 URL 修正,否则会出现:后台跳回旧域、菜单/图片仍加载旧域、混合内容警告等。

4.1 为什么不能用记事本或简单 SQL 全局替换

WordPress 大量选项与小工具数据以PHP 序列化存在数据库里。序列化字符串带有长度计数。
用普通「查找替换」或裸REPLACE()改 URL 后,长度对不上,轻则小工具丢失,重则整段配置损坏。

正确做法:使用会处理序列化的工具——推荐:

  • 插件:Better Search Replace(官方插件说明即为此场景设计)
  • 或服务器上有 WP-CLI 时:wp search-replace

4.2 先进得了后台:用wp-config.php临时覆盖

若新域打开后一直跳回旧域、无法登录,在wp-config.php靠前位置(<?php之后)临时加入:

define('WP_HOME','https://www.new.com');define('WP_SITEURL','https://www.new.com');

把示例换成你的新域名完整地址(含https://,是否带www与最终方案保持一致)。

这两行会覆盖数据库里的home/siteurl,用于应急进后台。进后台并完成全库替换后,应删除这两行,避免长期「配置与数据库双头管理」。

4.3 备选:直接改wp_options两行

在 phpMyAdmin 打开表wp_options(前缀以你的为准),找到:

  • option_name=siteurl
  • option_name=home

option_value改成新域名(含协议)。这只能解决「站点地址」本身,文章内容、图片 URL、小工具里的旧域仍在,所以还要做 4.4。

4.4 用 Better Search Replace 做全库替换(推荐)

插件官方推荐迁移换域流程大意如下(与官方 FAQ 一致):

  1. 备份当前新库。
  2. 确保已能用新域登录后台(可用 4.2 临时常量)。
  3. 安装并启用Better Search Replace
  4. 进入「工具 → Better Search Replace」:
    • 搜索:https://www.old.com(按你真实旧地址填写,注意 http/https、是否 www)
    • 替换为:https://www.new.com
    • 选择全部表
    • 先勾选 Dry Run(试运行),确认匹配数量合理
    • 取消试运行,正式执行
  5. 若旧站同时存在http://https://、带 www 与不带 www,可能需要分次替换常见变体,每次仍先 Dry Run。
  6. 完成后删除wp-config.php里临时的WP_HOME/WP_SITEURL
  7. 到「设置 → 固定链接」点击保存一次,重新生成重写规则。

有 WP-CLI 时等价思路:

wp search-replace'https://www.old.com''https://www.new.com'--all-tables --dry-run wp search-replace'https://www.old.com''https://www.new.com'--all-tables

(确认 dry-run 结果无误后再去掉--dry-run正式执行。)

4.5 协议与主机头必须统一

最终全站应统一为一种规范形式,例如全部使用:

https://www.new.com

避免库里同时残留:

  • http://www.new.com
  • https://new.com
  • https://www.old.com

混用会导致登录循环、资源混合内容(锁图标报警)、部分图片裂图。


第 5 阶段:伪静态、缓存、功能复测

5.1 重新保存固定链接

后台「设置 → 固定链接」→ 直接「保存更改」(即使规则看起来没变)。
这一步用于刷新 Apache.htaccess或提醒你去核对 Nginx 伪静态。

5.2 Nginx(宝塔)伪静态

站点 → 伪静态 → 选择 WordPress 规则并保存。规则缺失时,首页可能正常但文章全是 404。

5.3 清缓存

  • 页面缓存插件缓存
  • CDN 缓存(若有)
  • 浏览器缓存

否则你以为「没迁成功」,其实只是旧缓存。

5.4 功能复测清单

  • 首页、文章页、分类页可打开
  • /wp-admin/可登录,不再跳旧域
  • 特色图片与文章内图片正常
  • 菜单、小工具、页脚链接指向新域
  • 表单提交、邮件通知(如有)
  • 若有电商:下单、支付回调域名是否需在支付平台改白名单

第 6 阶段:换域名后的 SEO——用 301 接住旧收录

域名变了,搜索引擎仍可能短期带着旧 URL。要用301 永久重定向把旧地址指到新地址,尽量保留权重与书签流量。

6.1 旧域名还要留多久

建议:旧域名的解析与主机(或至少能承载跳转的服务)保留一段时间(常见实践是数月以上,视业务重要性而定),专门负责 301。旧域一停,搜索引擎只能看到失效,而不是「迁移」。

6.2 Nginx 整站 301 示例

旧域名对应的站点配置中(示例):

server { listen 80; listen 443 ssl; server_name www.old.com old.com; # SSL 证书配置按面板生成结果保留/填写 return 301 https://www.new.com$request_uri; }

含义:旧域任意路径跳到新域相同路径。若你换域时 URL 结构也变了,需要额外做一对一映射,不能只靠这一条。

6.3 Apache.htaccess示例

若旧站是 Apache,可在旧站根目录使用:

RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?old\.com$ [NC] RewriteRule ^(.*)$ https://www.new.com/$1 [R=301,L]

6.4 Search Console 与收录收尾

  1. 在 Google Search Console(及你使用的其它站长平台)添加并验证新属性
  2. 提交新站点地图(SEO 插件生成的 sitemap)。
  3. 若平台提供「更换域名」类工具,按官方流程使用。
  4. 抽查若干旧文章 URL,确认返回301且落在正确新 URL(可用浏览器开发者工具 Network,或线上 HTTP 状态检查工具)。
  5. 更新:统计代码、广告平台、支付、企业微信/公众号菜单、名片与邮件签名中的域名。

两种主流搬家方式怎么选

方式适合谁优点注意
手动:打包文件 + 导出 SQL + 搜索替换想可控、环境特殊过程透明,便于排错步骤多,URL 替换必须用序列化安全工具
迁移插件(如 All-in-One WP Migration、主机商迁移工具等)中小站、求快步骤少注意免费版体积限制;迁完仍要复查 URL、SSL、伪静态

无论用哪种,迁完后的验收清单不能省。插件不是免检金牌。


翻车对照表(迁完立刻能用)

现象最可能原因处理
建立数据库连接出错wp-config库信息错核对 DB_NAME / USER / PASSWORD / HOST
后台总跳到旧域名siteurl/home仍是旧域WP_HOME/WP_SITEURL应急,再全库替换
图片仍指向旧域或裂图内容里旧 URL 未替换干净Better Search Replace / WP-CLI 再跑变体
文章全 404,首页正常伪静态未配或固定链接未刷新保存固定链接 + 检查 Nginx/Apache 规则
登录死循环http/https 或 www 不一致统一协议与主机头,清 cookie 再登
样式丢失缓存或混合内容清缓存;确保资源已是 https 新域

可复制验收清单

  • 本地已有完整文件包 + SQL
  • 新库导入成功,wp-config与表前缀正确
  • 新域可进后台,且不再被迫跳旧域
  • 已用序列化安全工具完成旧域 → 新域替换(换域名时)
  • 已删除临时WP_HOME/WP_SITEURL(若曾添加)
  • 固定链接已重新保存,伪静态正确
  • SSL 正常,无大面积混合内容
  • 旧域 301 到新域(换域名时)
  • Search Console / 统计 / 支付等外部依赖已更新
  • 表单、登录、关键转化路径已人工点测

结语

WordPress 迁移真正难的不是「把文件拷过去」,而是URL 在数据库里的一致性,以及换域名后的301 与验收
按「备份 → 新环境 → 导入 →(换域则)安全替换 → 伪静态与复测 → SEO 收尾」推进,可以把「迁完站废了、收录断了」的风险压到最低。

若你是「只换主机不换域」,把精力放在数据库连接、PHP 版本与伪静态;若「换了域名」,把 Better Search Replace(或 WP-CLI)和旧域 301 当成必做项,而不是可选优化。