迁移 WordPress 站点:既不中断,也不掉排名

如何把 WordPress 站点从一家主机商搬到另一家,同时保住网址、SSL 和搜索排名。

概述

迁移 WordPress 站点常常令人心里发怵:怕中断、怕掉排名、怕数据损坏。只要方法得当,一次 WordPress 迁移完全可以做到访客和 Google 都察觉不到。

本指南讲两条路:插件法(快,1 GB 以下推荐)和手工法(可控性更强,适合大站)。文中还有前期准备(DNS 的 TTL、插件盘点)、迁移后的检查清单(SSL、跳转、向 Google 提交站点地图),以及那些会让您掉排名或直接把站点搞坏的坑(序列化字符串没处理好导致数据库迁坏、忘了改 wp-config、SSL 证书没续好)。

迁移之前:把地基打好

一次成功的 WordPress 迁移,从切换前 48 小时就开始了。三项准备工作能把风险压到很低:

  1. 把域名的 DNS TTL 调低到 300 秒(5 分钟),至少要在迁移前 48 小时做。常见的 TTL 是 3600 至 86400 秒,那样改动之后生效可能要拖上 24 小时。TTL 设为 300 秒,通常 30 分钟内就散布开了。到您的注册商那里改(OVH、Gandi、Cloudflare)。
  2. 迁移前把插件和主题盘一遍。删掉未启用的插件、被标注「与您的 PHP 版本不兼容」的插件,以及用不上的主题。一个跑了 5 年的 WordPress 站点,通常积攒了三到五成过时或重复的插件。迁移正是清理的好时机。
  3. 把关键项列出来:正在用的 PHP 版本(看 wp-admin/site-health.php)、数据库(大小,MySQL/MariaDB 版本)、必需的 PHP 扩展(imagick、curl、mbstring、gd)、定时任务、SSL 证书、自定义的 .htaccess 跳转规则。有了这些,才能把环境原样复刻出来。
  4. 维护模式可选:如果您能接受 15 分钟不可用,WP Maintenance Mode 插件会在切换期间显示一个等待页。电商站或访问量很大的站点,最好选择不停机的渐进式迁移。

方法一:用插件(推荐)

  1. 迁移前先做完整备份:UpdraftPlus、BackWPup 或 All-in-One WP Migration
  2. 在新主机上装一个空的 WordPress
  3. 通过插件还原备份
  4. 用新主机商给的临时 IP 或子域名测试站点
  5. 把域名的 DNS 切过去,指向新主机商(TTL 要短)
  6. DNS 生效之后,在新主机上重新签发 SSL 证书

方法二:手工迁移(大站、电商)

站点超过 1 GB,或者 WooCommerce 里有成千上万笔订单时,手工迁移更稳。步骤如下:

  1. 导出数据库:用 phpMyAdmin,或在 SSH 里执行 mysqldump -u utilisateur -p ma_base > db_backup.sql。大站请加上 --single-transaction --quick,免得把库锁住。
  2. 复制 WordPress 文件:用 FTP/SFTP 或 rsync:rsync -avz -e ssh ./wp-content/ utilisateur@nouveau-serveur:/var/www/html/wp-content/。增量的 rsync 能明显缩短传输时间。
  3. 在新主机上建好新数据库(cPanel/Plesk → MySQL Databases),然后导入:mysql -u utilisateur -p ma_base_nouvelle < db_backup.sql。
  4. 改好 wp-config.php,填上新的数据库信息(DB_NAME、DB_USER、DB_PASSWORD、DB_HOST)。安全密钥(AUTH_KEY 等)保持原样,否则所有用户都会被踢下线。
  5. 域名变了就更新网址:如果连域名一起换,请用 WP-CLI(wp search-replace 'ancien-domaine.com' 'nouveau-domaine.com' --skip-columns=guid),它能正确处理 PHP 的序列化字符串。直接跑一条 SQL UPDATE 会把小工具和序列化的设置搞坏。
  6. 先在临时子域名上测试:改本机 hosts 文件把 migration.nouveau-serveur.com 指过去(不动公网 DNS)。逐项验证:首页、文章、表单、支付(若是电商)、系统邮件。
  7. 切换 DNS:到注册商那里更新 A/AAAA 记录。事先把 TTL 调成 300 秒,几分钟就能生效。

方法三:By-Hoster 免费代迁

如果您搬到 By-Hoster,我们的技术团队会免费完成迁移。您提供旧主机的 FTP 或 cPanel 账号,剩下的交给我们,24 至 48 小时内完成,全程不中断。包含:文件与数据库的搬运、wp-config 重配、Let's Encrypt 证书签发、迁移后测试、与您约好时间切换 DNS。旧主机的访问权限您还能保留 14 天,方便核对。

迁移后的检查清单:12 项必查

DNS 指向新服务器,并不代表迁移就完事了。切换后 24 小时之内,这 12 项一定要查:

  • HTTP 和 HTTPS 都能打开:用三四种浏览器加一台手机测。主要页面都要看(首页、联系页、电商的购物车)。
  • Let's Encrypt 证书已签发并生效:curl -I https://votredomaine.com 应返回 200 OK,且证书有效。DNS 生效后约需 5 到 30 分钟。
  • 固定链接正常:随机点 5 到 10 篇文章。如果报 404,去 wp-admin → 设置 → 固定链接,点一下「保存」(会重新生成 .htaccess)。
  • 图片能加载:在首页按 Ctrl+F5。若有图片缺失,检查 wp-content/uploads 的权限(目录 755,文件 644)。
  • 联系表单:发一条测试消息,确认邮件能收到。收不到就配 SMTP(WP Mail SMTP),接一个外部服务(Mailgun、SendGrid)。
  • 能登录 wp-admin:登录一次,若开了两步验证也一并试。若提示「Cookie 被拦截」,清一下浏览器缓存,再用无痕窗口试。
  • WooCommerce(如果用了):走一笔测试订单(Stripe/PayPal 的「测试」模式)。确认确认邮件、库存扣减和 PDF 发票生成都正常。
  • WordPress 定时任务:确认计划任务在跑(用 WP-CLI 执行 wp cron event list)。关掉自带的 WP-Cron,改配系统 cron:* * * * * curl https://votredomaine.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1。
  • 性能:跑一次 PageSpeed Insights。分数低于 80,就检查缓存是否开启(LiteSpeed Cache、WP Rocket、W3 Total Cache)、Brotli/Gzip 压缩是否生效、图片是否懒加载。
  • 向 Google Search Console 提交站点地图:IP 变了之后,Google 可能要 24 到 72 小时才重新抓取。可在 Search Console → 站点地图 里提交网址来催一催。
  • 旧域名的 301 跳转:如果连域名也换了,就在旧主机的 .htaccess 里配 301:RewriteRule ^(.*)$ https://nouveau-domaine.com/$1 [R=301,L]。至少保留 12 个月,把外链的权重留住。
  • 盯 24 小时:UptimeRobot 或 Hyperping 这类免费服务能发现中断并用邮件或短信通知您。头 48 小时也顺带盯着 PHP 错误日志(tail -f /var/log/php/error.log)。

常见的坑,以及怎么绕开

  • 序列化字符串被弄坏:如果迁移时只是在 SQL 里粗暴地查找替换,那些序列化的 PHP 设置(小工具、自定义器、页面构建器)就会坏掉。请务必使用 WP-CLI,或 Better Search Replace 这类能正确处理序列化的插件。
  • 迁移后没重新签 SSL:Let's Encrypt 证书跟 IP 和域名绑定,必须在新主机上重新生成。旧证书是搬不过去的。
  • wp-config.php 没改对:忘了更新 DB_HOST(有时是「localhost」,有时是一个 IP),或者留着旧的 WP_DEBUG=true,把错误信息暴露在生产环境里。
  • 没替换掉自带的 WordPress 定时任务:在旧主机上,WP-Cron 是靠访问流量触发的。如果忘了关掉自带的 WP-Cron 并配上真正的系统 cron,那些计划任务(备份、发送邮件通讯、按计划更新)就不会再正常执行。
  • 缓存还是旧的:CDN(Cloudflare、BunnyCDN)的旧缓存仍指向老服务器。迁移后请清缓存:Cloudflare 点「Purge Everything」,BunnyCDN 点「Clear Cache」。
  • XML 站点地图坏了:Yoast 和 Rank Math 会自动重建,但请确认 https://votredomaine.com/sitemap_index.xml 打得开,并重新提交到 Search Console。
  • DNS 没散布开:如果旧的 TTL 还是 24 小时,一部分访客在整整一天里看到的仍是老站点。所以迁移前把 TTL 调成 300 秒才这么关键。

常见问题

不会——前提是网址一个不改,而且 DNS 切换干净利落(迁移前先把 TTL 调短)。Google 只会看到 IP 变了,内容和结构毫无变化。

1 GB 以下的普通站点用插件法:1 到 3 小时。1 至 5 GB 的中型站点用手工法:4 到 8 小时。有成千上万商品的大型电商:1 到 2 天(含准备、测试和约定时间的切换)。By-Hoster 的免费代迁一般是 24 至 48 小时,全程与您协同。

域名不变:不用,Google 会在 24 到 72 小时内自行察觉 IP 变化。换了域名:要,先配好 301 跳转,再用 Google Search Console 的「地址更改」工具。否则原有的排名就白攒了。

用插件法并把 DNS TTL 调短,不可用时间通常在 0 到 5 分钟之间(等 DNS 散布开而已)。手工法只要准备充分,可以做到零中断:新服务器先并行搭好,改本机 hosts 文件测通,全部验证无误后再切 DNS。

我们需要:旧主机的 SFTP 或 FTP 账号(只读即可)、数据库的 phpMyAdmin 账号或 SQL 导出文件,以及 DNS 管理权限(在注册商处:OVH、Gandi、Cloudflare 等),以便到点切换解析记录。迁移结束后,我们不会保留任何敏感信息。

不必全停,但导出之前必须停用缓存类插件(W3 Total Cache、WP Rocket、LiteSpeed Cache),免得过期的缓存文件在新服务器上报错。迁完再启用它们并清空缓存。安全类插件(Wordfence、Sucuri)同理:导出前停用,迁完再开。

能,但麻烦一些,因为 WordPress.com(托管版)限制文件访问。做法是:1) 在 wp-admin 里通过 Outils → Exporter 导出内容(会生成一个 XML 文件);2) 在您的主机上装好 WordPress.org;3) 通过 Outils → Importer → WordPress 导入这个 XML。这种方式能带走文章、页面、媒体和评论,但带不走 WordPress.com 上买的付费主题(需另买或换掉)。连同外观微调,预计 4 到 8 小时。