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 备份什么
- 网站根目录全部文件(含
wp-content/uploads,图片都在这里)。 - 整库 SQL(不要只导出某几张表)。
- 记下当前信息,后面核对用:
| 记录项 | 示例 |
|---|---|
| 旧域名 | https://www.old.com |
| 表前缀 | wp_(也可能是自定义前缀) |
| PHP 版本 | 如 8.1 |
| 是否 HTTPS | 是 / 否 |
| 固定链接结构 | 如「文章名」 |
1.2 宝塔上怎么备
- 文件:网站目录打包下载,或「备份」功能生成文件备份。
- 数据库:数据库 → 导出 / 备份,下载
.sql到本地。
备份包请同时留在本地。只放在同一台即将弃用的服务器上,不算安全备份。
第 2 阶段:准备新主机环境
- 安装与旧站接近的 PHP 版本(优先与旧站一致,减少兼容意外)。
- 创建网站站点(宝塔:网站 → 添加站点)。
- 创建空数据库,记下:库名、用户名、密码、主机地址(多为
localhost)。 - 若已确定新域名:先把 DNS A 记录指到新服务器 IP;国内主机注意备案要求。
- 为新域名申请并开启 SSL(Let’s Encrypt 即可),全站按
https://规划。
只换主机、域名不变时:可先把 DNS TTL 调低,切解析窗口更短;切完后再测。
第 3 阶段:搬家文件与数据库
3.1 上传 WordPress 文件
将旧站文件解压/上传到新站点根目录,保持结构完整,至少确认存在:
wp-admin/wp-includes/wp-content/wp-config.phpindex.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=siteurloption_name=home
把option_value改成新域名(含协议)。这只能解决「站点地址」本身,文章内容、图片 URL、小工具里的旧域仍在,所以还要做 4.4。
4.4 用 Better Search Replace 做全库替换(推荐)
插件官方推荐迁移换域流程大意如下(与官方 FAQ 一致):
- 备份当前新库。
- 确保已能用新域登录后台(可用 4.2 临时常量)。
- 安装并启用Better Search Replace。
- 进入「工具 → Better Search Replace」:
- 搜索:
https://www.old.com(按你真实旧地址填写,注意 http/https、是否 www) - 替换为:
https://www.new.com - 选择全部表
- 先勾选 Dry Run(试运行),确认匹配数量合理
- 取消试运行,正式执行
- 搜索:
- 若旧站同时存在
http://与https://、带 www 与不带 www,可能需要分次替换常见变体,每次仍先 Dry Run。 - 完成后删除
wp-config.php里临时的WP_HOME/WP_SITEURL。 - 到「设置 → 固定链接」点击保存一次,重新生成重写规则。
有 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.comhttps://new.comhttps://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 与收录收尾
- 在 Google Search Console(及你使用的其它站长平台)添加并验证新属性。
- 提交新站点地图(SEO 插件生成的 sitemap)。
- 若平台提供「更换域名」类工具,按官方流程使用。
- 抽查若干旧文章 URL,确认返回301且落在正确新 URL(可用浏览器开发者工具 Network,或线上 HTTP 状态检查工具)。
- 更新:统计代码、广告平台、支付、企业微信/公众号菜单、名片与邮件签名中的域名。
两种主流搬家方式怎么选
| 方式 | 适合谁 | 优点 | 注意 |
|---|---|---|---|
| 手动:打包文件 + 导出 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 当成必做项,而不是可选优化。