2026年6月29日
2026年6月29日
WordPressをサーバー間で移行する方法【完全ガイド・データ損失ゼロ】
はじめに
WordPressのサーバー移行は正しい手順を踏めばデータ損失ゼロで完了できます。共有サーバーからVPSへの移行、ホスティング会社の変更、クラウド環境への移行まで、WP-CLIとrsyncを使った確実な移行手順を解説します。
症状・原因
- 移行後にURLが古いサーバーのままになってしまいサイトが表示されない
- 移行後に画像が表示されないがファイルは存在している
- WordPressの管理画面にアクセスできずサイトが白い画面になる
- DNS変更後もしばらく古いサーバーにアクセスされてしまい二重管理が必要
解決手順
ステップ1:移行前チェックリストの確認
移行前に現環境の情報を記録し、バックアップを取得します。
# 旧サーバーでの事前確認
# PHPバージョン
php -v
# WordPressのバージョンとプラグイン一覧
wp core version
wp plugin list --format=table
wp theme list --format=table
# データベースサイズの確認
wp db size --format=table
# アクティブなプラグイン一覧をエクスポート
wp plugin list --status=active --format=csv > /tmp/active-plugins.csv
# uploads ディレクトリのサイズ確認
du -sh /var/www/html/wp-content/uploads/
# サーバー情報の記録
echo "PHP: $(php -v | head -1)"
echo "MySQL: $(mysql --version)"
echo "Apache/Nginx: $(apache2 -v 2>/dev/null || nginx -v 2>/dev/null)"
echo "OS: $(lsb_release -d 2>/dev/null || cat /etc/os-release | grep PRETTY_NAME)"
# フルバックアップの取得(移行前)
# DBバックアップ
wp db export /var/backups/pre-migration-db-$(date +%Y%m%d).sql
# ファイルバックアップ(wp-contentのみ)
tar -czf /var/backups/pre-migration-files-$(date +%Y%m%d).tar.gz \
-C /var/www/html wp-content
# wp-config.phpのバックアップ
cp /var/www/html/wp-config.php /var/backups/wp-config.php.bak
echo "バックアップ完了"
ステップ2:旧サーバーでのDBエクスポートとファイルバックアップ
# 旧サーバーでの作業
OLD_PATH="/var/www/html"
EXPORT_DIR="/tmp/wp-migration"
mkdir -p "$EXPORT_DIR"
# データベースエクスポート(文字コードを明示)
wp --path="$OLD_PATH" db export \
--add-drop-table \
"${EXPORT_DIR}/database.sql"
# 圧縮
gzip "${EXPORT_DIR}/database.sql"
echo "DBエクスポート完了: $(du -sh ${EXPORT_DIR}/database.sql.gz)"
# wp-contentをrsyncで新サーバーに転送(DBより先にファイル転送)
# (SSHキーが設定済みであることが前提)
NEW_SERVER_IP="203.0.113.1"
NEW_SERVER_USER="deploy"
NEW_WP_PATH="/var/www/html"
rsync -avz --progress \
--exclude="cache/" \
"${OLD_PATH}/wp-content/" \
"${NEW_SERVER_USER}@${NEW_SERVER_IP}:${NEW_WP_PATH}/wp-content/"
# WordPressコアファイルも転送(wp-contentとwp-config.phpは除く)
rsync -avz --progress \
--exclude="wp-content/" \
--exclude="wp-config.php" \
"${OLD_PATH}/" \
"${NEW_SERVER_USER}@${NEW_SERVER_IP}:${NEW_WP_PATH}/"
# DBエクスポートファイルを転送
scp "${EXPORT_DIR}/database.sql.gz" \
"${NEW_SERVER_USER}@${NEW_SERVER_IP}:/tmp/"
echo "ファイル転送完了"
# SCPが使えない場合は圧縮してダウンロード
# 旧サーバーで実行
tar -czf /tmp/wordpress-backup.tar.gz \
-C /var/www html \
--exclude="html/wp-content/cache"
# ローカルにダウンロードしてから新サーバーにアップロード
scp old-server:/tmp/wordpress-backup.tar.gz ./
scp ./wordpress-backup.tar.gz new-server:/tmp/
ステップ3:新サーバーのセットアップとDBインポート
# 新サーバーでの作業
NEW_PATH="/var/www/html"
OLD_URL="https://example.com" # 一時的に旧URLのまま
# WordPressコアがなければインストール
wp core download --path="$NEW_PATH" --locale=ja
# wp-config.phpを作成
wp config create \
--path="$NEW_PATH" \
--dbname="wordpress_new" \
--dbuser="new_db_user" \
--dbpass="new_db_password" \
--dbhost="localhost" \
--locale="ja"
# DBが存在しなければ作成
wp db create --path="$NEW_PATH"
# DBをインポート
gunzip /tmp/database.sql.gz
wp db import /tmp/database.sql --path="$NEW_PATH"
# インポート確認
wp post list --path="$NEW_PATH" --post_status=publish --format=count
wp option get siteurl --path="$NEW_PATH"
# Webサーバーの設定(Apache)
sudo chown -R www-data:www-data "$NEW_PATH"
sudo chmod -R 755 "$NEW_PATH"
sudo chmod -R 664 "$NEW_PATH/wp-content/uploads"
echo "DBインポート完了"
# Nginxの設定例(新サーバー)
sudo nano /etc/nginx/sites-available/example.com
# /etc/nginx/sites-available/example.com
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
}
ステップ4:wp search-replaceでURLを更新
URLの変更をwp search-replaceで確実に行います。
NEW_PATH="/var/www/html"
OLD_URL="https://old-example.com" # 旧URL
NEW_URL="https://example.com" # 新URL
# ドライランで影響範囲を確認
echo "=== ドライラン実行(実際には変更しない)==="
wp search-replace "$OLD_URL" "$NEW_URL" \
--path="$NEW_PATH" \
--all-tables \
--dry-run \
--report-changed-only
# 確認後に実際に実行
echo "=== URLを実際に変換 ==="
wp search-replace "$OLD_URL" "$NEW_URL" \
--path="$NEW_PATH" \
--all-tables \
--report-changed-only
# wwwなしURLも念のため変換
wp search-replace \
"http://old-example.com" \
"https://example.com" \
--path="$NEW_PATH" \
--all-tables
# IPアドレスが残っている場合の変換
OLD_IP="192.168.1.100"
wp search-replace "$OLD_IP" "$NEW_URL" \
--path="$NEW_PATH" \
--all-tables
# siteurl と home オプションの確認
wp option get siteurl --path="$NEW_PATH"
wp option get home --path="$NEW_PATH"
# 必要なら手動で設定
wp option update siteurl "$NEW_URL" --path="$NEW_PATH"
wp option update home "$NEW_URL" --path="$NEW_PATH"
# キャッシュとリライトをリセット
wp cache flush --path="$NEW_PATH"
wp rewrite flush --hard --path="$NEW_PATH"
ステップ5:DNS切り替え、SSL設定と移行後の確認チェックリスト
# Let's Encrypt でSSL証明書を取得(Certbot)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
# 自動更新の確認
sudo certbot renew --dry-run
# wp-config.php に HTTPS強制を追加
wp config set FORCE_SSL_ADMIN true --path="$NEW_PATH"
# 移行後の動作確認チェックリスト
NEW_PATH="/var/www/html"
echo "=== 移行後確認チェックリスト ==="
# 1. サイトURLの確認
echo "✓ SiteURL: $(wp option get siteurl --path=$NEW_PATH)"
echo "✓ Home: $(wp option get home --path=$NEW_PATH)"
# 2. 投稿数の確認(旧サーバーと比較)
echo "✓ 公開投稿数: $(wp post list --path=$NEW_PATH --post_status=publish --format=count)"
# 3. メディアファイルの確認
UPLOADS_COUNT=$(find "$NEW_PATH/wp-content/uploads" -type f | wc -l)
echo "✓ アップロードファイル数: $UPLOADS_COUNT"
# 4. プラグインの有効化確認
wp plugin list --path="$NEW_PATH" --status=active --format=table
# 5. パーマリンクの再生成
wp rewrite flush --hard --path="$NEW_PATH"
echo "✓ パーマリンクを再生成"
# 6. データベースの最適化
wp db optimize --path="$NEW_PATH"
echo "✓ DBを最適化"
# 7. セキュリティキーの再生成(移行後は推奨)
wp config shuffle-salts --path="$NEW_PATH"
echo "✓ セキュリティキーを再生成"
echo ""
echo "=== 移行後の手動確認事項 ==="
echo "□ トップページが表示される"
echo "□ 固定ページ・投稿ページが表示される"
echo "□ 画像・メディアが表示される"
echo "□ お問い合わせフォームが動作する"
echo "□ WooCommerce(使用している場合)が正常動作する"
echo "□ HTTPSが正しくリダイレクトされる"
echo "□ 管理画面にログインできる"
echo "□ DNS伝播完了後にSSL証明書が有効になっている"
# DNS切り替えのタイミング確認
# TTLを事前に短く設定しておくことでDNS伝播を速める
# 旧DNS設定で TTL=300(5分)に変更してから24時間後に切り替える
# 伝播確認
dig +short example.com @8.8.8.8 # Google DNS
dig +short example.com @1.1.1.1 # Cloudflare DNS
nslookup example.com 208.67.222.222 # OpenDNS
注意事項
wp search-replaceは実行前に必ず--dry-runで影響範囲を確認してください。特にWordPressのシリアライズされたデータ(ウィジェット設定、メタデータなど)が含まれる場合は、通常のSQLのSEDやREPLACE()ではなくwp search-replaceを使うことが必須です- DNS切り替え後も旧サーバーを最低1週間は維持してください。DNSの伝播には最大72時間かかる場合があり、この間に旧サーバーへアクセスするユーザーへの対応が必要になることがあります
- SSL証明書(Let's Encrypt)はDNSが新サーバーを指してから取得してください。DNS切り替え前に取得しようとすると、ドメイン検証に失敗します。DNS切り替え直後からCertbotを実行してください
まとめ
WordPressのサーバー移行は、バックアップ・ファイル転送・DBインポート・search-replace・DNS切り替えという手順を順守することでデータ損失ゼロで完了できます。移行後の確認チェックリストを使って全機能の動作を確認し、旧サーバーは一定期間維持することで安全な移行を実現しましょう。