- Step0. 移行環境の定義と前提条件
- 現行環境(Prod)と新環境(New-Prod)のサーバー仕様
- 必須情報(FTP/SSH接続情報、DB接続情報)
- Step1. 現行サーバーでのバックアップ取得
- ファイル一式(/wp-content/他)のダウンロード
- データベース(MySQL)のダンプ・エクスポート
- Step2. 新サーバーの構築とデータ配置
- 新サーバーへのドメイン追加設定(DNS未変更)
- WordPressクリーンインストールとDB作成
- バックアップデータのインポートとwp-config.php接続情報修正
- Step3. hostsファイル設定による動作検証
- PCローカルのhostsファイル書き換え(IP固定)
- 新サーバー環境での表示・管理画面ログイン確認
- Step4. DNS切り替え前のSSL事前設定
- Xserverパネルでの無料独自SSL追加申請
- SSL認証・発行完了のステータス確認
- Step5. DNS切り替えとSEOリカバリ確認
- ネームサーバー(DNS)の変更実行
- hostsファイルの復元と一般アクセスの確認
- 検索エンジン巡回確認(robots.txt・計測タグ・GSC)
- 移行の成否は「切り替え前の準備」で決まる
- 最後に:ロールバックプランの確保
サーバー移行は、Webサイト運用において最もリスクの高いプロジェクトの一つです。
DNS切り替えのタイミングで発生する「数時間のダウンタイム」、切り替え直後の「SSL証明書エラー(保護されていません)」、そして予期せぬ「SEO順位の急落」。これらは、手順の順序を一つ間違えるだけで確実に発生します。
多くの「移行ガイド」では、プラグインを使用したデータ移行を推奨していますが、プロの現場では不十分です。DNSが切り替わるまで新環境の動作確認ができない「ぶっつけ本番」の手法では、ビジネスにおける機会損失を防げないからです。
本記事では、「hostsファイル」を活用したローカルDNSスプーフィングと、DNS切り替え前のSSL事前認証を組み合わせた、エンジニア向けの堅牢な移行フローを解説します。
一般ユーザーには現行サイトを見せたまま、裏側で新環境を構築・検証し、ダウンタイム「ゼロ秒」で安全にサーバーを切り替える技術手順を習得してください。
Step0. 移行環境の定義と前提条件
移行作業における事故(データ損失、長時間ダウンタイム)の9割は、環境差異の確認不足と権限情報の不備に起因します。
作業着手前に、現行環境(Prod)と新環境(New-Prod)の仕様差分を明確化し、SSH/DB接続に必要な認証情報を手元に揃えてください。特にPHPバージョンの不一致は、移行直後の「500 Internal Server Error」の主因となります。
現行環境(Prod)と新環境(New-Prod)のサーバー仕様
移行元と移行先の環境仕様を照合します。特に以下の3点は、アプリケーションの動作に直結するため必ず確認してください。
| 項目 | 確認ポイント・リスク |
| PHPバージョン | 最重要。移行元が7.x系、移行先が8.x系の場合、廃止された関数によりサイトがクラッシュする可能性があります。移行先サーバーの設定で、一時的に旧環境のバージョンに合わせることを推奨します。 |
| Webサーバー | Apache / Nginx / Litespeed等の違い。.htaccessの記述(リダイレクトやセキュリティ設定)が効くかどうかに影響します。Xserver同士であれば基本構成は同じですが、プラン変更時は注意が必要です。 |
| DBバージョン | MySQL / MariaDBのバージョン差異。基本的には上位互換ですが、極端に古いバージョンからの移行時は文字コード(utf8mb4等)の扱いに注意が必要です。 |
【メールサーバーに関する重要警告】
本手順はWebサイトの移行に特化していますが、DNS(ネームサーバー)を切り替えると、同ドメインで使用しているメール(@prod.com)も新サーバー経由に切り替わります。 新サーバー側でも同名のメールアカウントを作成しておかないと、切り替え後にメールが不達となります。Web作業と並行してメールアカウントの準備も必ず行ってください。
【Xserver特有の注意点:WAF設定】
Xserverには強力なWAF(Webアプリケーションファイアウォール)が標準搭載されています。REST APIやXML-RPCを使用するバックアッププラグインや外部ツールを使用する場合、WAFが通信を遮断し「403 Forbidden」を返す頻度が高いです。
- 推奨アクション: 移行作業中(特にデータインポート時)は、新サーバー側のWAF設定を一時的に「OFF」にすることを強く推奨します。
必須情報(FTP/SSH接続情報、DB接続情報)
効率的に作業を進めるため、以下の接続情報をテキストエディタ等に控えてください。GUI(ファイルマネージャー)ではなく、ターミナル操作やローカルのFTPクライアントを使用することで、作業時間を大幅に短縮できます。
1. サーバー接続情報(FTP / SFTP / SSH)
エンジニアであれば、転送速度と安全性の観点からSSH接続の利用を推奨します。
- ホスト名(SV番号.xserver.jp 等)
- ユーザー名
- パスワード(または公開鍵認証のパス)
- ポート番号(SFTP/SSHは通常22以外の場合が多い。Xserverは10022)
2. データベース接続情報
wp-config.phpの書き換え時に必須となります。
- データベース名
- データベースユーザー名
- データベースパスワード
- データベースホスト名(注意: Xserverはlocalhostではなくmysqlxxxx.xserver.jpのような固有ホスト名が割り当てられます)
3. WordPress管理者権限
- ログインURL(セキュリティプラグイン等で /wp-admin から変更されている場合はそのパス)
- 管理者ID / パスワード
- ※Basic認証がかかっている場合は、そのID/PWも必要です。
Step1. 現行サーバーでのバックアップ取得
プラグインによるバックアップは手軽ですが、ファイルサイズ制限やPHPの実行時間制限(Time Out)により、大規模サイトでは失敗するリスクがあります。
エンジニアであれば、「ファイル領域」と「データベース領域」を物理的に分けて手動取得する方法が最も確実であり、トラブルシューティングも容易です。
ファイル一式(/wp-content/他)のダウンロード
WordPressの全ファイルをダウンロードする必要はありません。新サーバーではクリーンインストール(最新のコアファイル配置)を行うため、移行に必要な以下の固有データのみを取得します。
- /wp-content/ ディレクトリ配下すべて(テーマ、プラグイン、画像・アップロードファイル)
- wp-config.php(DB接続情報やSaltキーの参照用。上書きはしない)
- .htaccess(リダイレクト設定やセキュリティ設定の参照用)
【推奨:SSHを用いた高速バックアップ】
FTPで数万個のファイルを個別にダウンロードすると数時間かかる場合があります。SSH接続が可能であれば、サーバー上で圧縮してからダウンロードしてください。
Bash
# wp-contentディレクトリへ移動
cd /home/user_id/domain_name/public_html/
# wp-contentをtar.gzで圧縮
tar -czvf wp-content_backup.tar.gz ./wp-content
※作成された wp-content_backup.tar.gz をFTPソフトでダウンロードすれば、転送時間は数分で完了します。
データベース(MySQL)のダンプ・エクスポート
記事データや設定値が含まれるデータベース(SQLファイル)を取得します。
A. SSH / コマンドラインでの取得(推奨)
mysqldump コマンドを使用すれば、タイムアウトを気にせず一瞬でエクスポート可能です。
Bash
# DBバックアップコマンド例
mysqldump -u [DBユーザー名] -p -h [DBホスト名] [DB名] > db_backup.sql
※Xserverの場合、DBホスト名は localhost ではなく mysqlxxxxx.xserver.jp となる点に注意してください。
B. phpMyAdminでの取得
GUIを使用する場合、phpMyAdminの「エクスポート」機能を使用します。
- エクスポート方法: 「詳細」を選択
- 生成オプション: DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT を追加 にチェックを入れる(インポート時のテーブル重複エラーを防ぐため)
- データ: 完全な INSERT 文を作成する を選択
- 出力: 圧縮(gzip)を選択して実行
このバックアップ取得時点からDNS切り替え完了までの間に記事更新やコメント投稿が行われると、「データの先祖返り(消失)」が発生します。
可能な限り、現行サイトにBasic認証をかけるか、メンテナンスモードプラグインを有効化し、データ更新を凍結した状態でバックアップを取得してください。
Step2. 新サーバーの構築とデータ配置
DNSレコードがまだ旧サーバーを指している状態で、新サーバー上に「受け皿」となるアプリケーション環境を構築します。
ここでは手動でDBを作成する手間を省くため、Xserverの「WordPress簡単インストール」機能を活用し、その後にデータを入れ替える手法を採用します。
新サーバーへのドメイン追加設定(DNS未変更)
Xserverのサーバーパネルにて、移行対象のドメインを追加します。
- サーバーパネル > ドメイン設定 > ドメイン設定追加 を選択。
- ドメイン名(例: prod.com)を入力。
- 重要: 「無料独自SSLを利用する」のチェックを外してください。
- 理由: 現時点でDNSが新サーバーを向いていないため、SSL認証(Let’s Encrypt)は必ず失敗します。SSL設定はStep4で個別に行うため、ここではドメインの箱だけを作ります。
- 「確認画面へ進む」→「追加する」をクリック。
WordPressクリーンインストールとDB作成
空のWordPressをインストールし、ディレクトリ構造とデータベース(DB)を自動生成させます。
- サーバーパネル > WordPress簡単インストール を選択。
- 対象ドメインを選択し、「WordPressインストール」タブをクリック。
- 必要な情報を入力してインストールを実行。
- サイトURL: ドメインのみ(サブディレクトリ不要)
- データベース: 「自動でデータベースを生成する」を選択
- ユーザー名/PW: 任意(後でDBインポート時に上書きされるため何でも良い)
- インストール完了後、表示されるMySQL接続情報(データベース名、ユーザー名、パスワード)を必ずメモしてください。
バックアップデータのインポートとwp-config.php接続情報修正
「空のWordPress」を「旧環境のデータ」に置換します。ここで最も技術的なミスが起きやすいため、手順を厳守してください。
1. 静的ファイル(wp-content)の差し替え
FTP/SSHで新サーバーのドキュメントルート(/home/user/domain/public_html/)にアクセスします。
- 既存の wp-content ディレクトリを削除します。
- Step1でバックアップした旧環境の wp-content をアップロードします。
2. データベースのインポート
新サーバーのphpMyAdminにログインします(ID/PWは先ほどメモしたもの)。
- 対象のデータベースを選択します。
- 「簡単インストール」で生成された初期テーブル(wp_users, wp_options 等すべて)をすべて選択し、「削除(DROP)」します。
- 目的: 完全に空にしてからインポートしないと、主キー重複エラー等が発生します。
- 「インポート」タブから、Step1で取得したSQLファイル(db_backup.sql)をアップロード・実行します。
3. wp-config.php の整合性確認(最重要)
新サーバー上の wp-config.php を確認します。旧環境のファイルを上書きしてはいけません。(DB接続情報が旧サーバーのものになり、接続エラーになります)
確認すべきは「テーブル接頭辞(Prefix)」の一致です。
- 旧環境: Step1でバックアップした wp-config.php を開き、$table_prefix の値を確認(例: ‘wp_’ や ‘wp1234_’)。
- 新環境: サーバー上の wp-config.php を編集し、$table_prefix の値を旧環境と同じものに書き換えます。
PHP
/**
* 新サーバーのwp-config.php
* DB接続情報(DB_NAME等)は新サーバーのまま維持する。
* 下記の接頭辞だけ、旧環境に合わせて修正する。
*/
$table_prefix = ‘wp_’; // ← ここが旧データと一致していないとサイトが表示されません
Step3. hostsファイル設定による動作検証
DNSを切り替える前に、新サーバー上でWebサイトが完全に動作するかを検証します。
PC内のhostsファイルを編集し、対象ドメインの向き先(IPアドレス)を強制的に新サーバーへ向けることで、疑似的な切り替え状態を作り出します。
PCローカルのhostsファイル書き換え(IP固定)
1. 新サーバーのIPアドレスを確認
Xserverサーバーパネルの「サーバー情報」を開き、「IPアドレス」の項目をコピーします。
(例: 183.18.xxx.xxx)
2. hostsファイルの編集
OSごとに以下のファイルを管理者権限で開きます。
- Windows: C:\Windows\System32\drivers\etc\hosts
- ※メモ帳などを「管理者として実行」して開いてください。
- Mac / Linux: /private/etc/hosts
- ターミナルで sudo vi /private/etc/hosts 等を実行。
3. 設定の追記
ファイルの末尾に、以下の形式で一行追記して保存します。
Plaintext
# [新サーバーIPアドレス] [半角スペース] [ドメイン名]
183.18.xxx.xxx prod.com
183.18.xxx.xxx www.prod.com
エンジニア向けのTips:
編集後、ブラウザが旧DNSキャッシュを保持している場合があります。Chromeのシークレットウィンドウを開くか、コマンドプロンプト/ターミナルでDNSキャッシュをクリアしてください。
- Win: ipconfig /flushdns
- Mac: sudo killall -HUP mDNSResponder
新サーバー環境での表示・管理画面ログイン確認
hosts設定後、ブラウザでサイトにアクセスします。
見た目は変わりませんが、接続先が新サーバーに変わっているはずです。以下の手順で「本当に新サーバーに繋がっているか」を確証し、動作チェックを行います。
1. 接続先IPの確認(必須)
Chrome等の開発者ツール(F12)を開き、「Network」タブを選択します。
リロードして最初のHTMLリクエスト(ドメイン名)をクリックし、Header情報の 「Remote Address」 が新サーバーのIPになっているか確認してください。
- 旧IPのままの場合:hosts設定が反映されていません。ブラウザ再起動等を試してください。
2. 動作検証チェックリスト
接続先が正しいことを確認したら、以下の項目を重点的にテストします。
- トップページおよび下層ページの表示:
- もし下層ページが 404 Not Found になる場合、管理画面の「設定 > パーマリンク」を開き、何も変更せずに「変更を保存」ボタンを押してください。これで .htaccess が再生成され、リンク構造が修復されます。
- 管理画面へのログイン:
- ログイン可否、記事の保存、画像のアップロード機能を確認します。
- 画像の表示:
- メディアライブラリの画像が表示されているか確認します。表示されない場合、wp-content/uploads のパーミッション(通常755)または所有権の問題です。
- お問い合わせフォーム:
- テスト送信を行い、メールが届くか確認します(サーバーのメール送信機能の確認)。
Step4. DNS切り替え前のSSL事前設定
ここが多くのエンジニアが躓き、「切り替え直後のSSLエラー(保護されていません)」を発生させるポイントです。
DNSがまだ旧サーバーを向いている状態で、いかにして新サーバー用のSSL証明書を発行させるか、その「認証ロジックのハック(Web認証)」を解説します。
通常、無料独自SSL(Let’s Encrypt)は、発行申請時に「そのドメインがサーバーに紐付いているか」をDNS経由で確認します。
今回はDNSがまだ旧サーバーを向いているため、普通に申請ボタンを押すだけでは「ドメイン認証失敗」となり、追加できません。
しかし、Xserverの「他社サーバーでのWeb認証」機能を利用することで、DNS切り替え前に証明書を裏側で発行・インストールすることが可能です。
Xserverパネルでの無料独自SSL追加申請
新サーバーのサーバーパネルにて操作を行いますが、認証用ファイルは旧サーバーに設置する必要があります。この「認証のねじれ」を理解して作業してください。
1. SSL追加申請(Web認証の選択)
- 新サーバーのパネルで「SSL設定」>「独自SSL設定追加」を選択します。
- 対象ドメインを選択し、「確認画面へ進む」をクリックします。
- ここでエラーが出ますが正常です。 エラー画面、または認証方法の選択肢から「Web認証」を選択してください(または「他社サーバーで運用中」オプション)。
2. トークンファイルのダウンロード
- 画面に表示される「トークンファイル(認証用ファイル)」をダウンロードします。
- または、表示された「ファイル名」と「記述内容」をコピーし、ローカルで同名のファイルを作成します。
3. 旧サーバーへのトークン設置(最重要)
FTP/SSHを使用し、このファイルを「現在稼働中の旧サーバー」にアップロードします。
認証局(Let’s Encrypt)は、現在のDNS(旧サーバー)を見に行って認証を行うためです。
- アップロード先:
/home/user/domain/public_html/.well-known/acme-challenge/ - ※ディレクトリが存在しない場合は作成してください。ドット(.)から始まる隠しディレクトリである点に注意。
- 重要注記: 旧サーバーでBasic認証をかけている場合、.htaccess で .well-known ディレクトリを除外設定しないと認証に失敗します。
4. 認証の実行
- アップロード後、ブラウザで http://prod.com/.well-known/acme-challenge/[ファイル名] にアクセスし、文字列が表示されるか確認します。
- 確認できたら、新サーバーのパネルに戻り「追加する(認証実行)」をクリックします。
これにより、DNSは旧サーバーを向いたままで、新サーバー内に正当なSSL証明書がインストールされます。
SSL認証・発行完了のステータス確認
認証が通ると、ステータスが「反映待ち」になります。
通常、数分~1時間程度で「利用中」に変わりますが、以下の点を確認してください。
- 「利用中」になるまでDNSは切り替えない:
ステータスが「利用中」になる前にDNSを切り替えると、証明書のインストールプロセスが中断され、最悪の場合SSL設定が破損します。 - hosts環境での確認:
Step3で行ったhosts設定がまだ有効であれば、新サーバーにHTTPS(https://prod.com)でアクセスできるか確認してください。証明書エラーが出ず、鍵マークが表示されれば準備完了です。
Step5. DNS切り替えとSEOリカバリ確認
準備はすべて整いました。ここからは世界中のユーザーを新サーバーへ誘導する「DNS切り替え」と、その後の「正常性確認」を行います。
特にSEO担当者として、「新サーバーで意図せず noindex が入っていないか」の確認は、順位下落を防ぐための最重要事項です。
ネームサーバー(DNS)の変更実行
ドメイン管理画面(今回はムームードメイン)にて、ネームサーバー情報を新サーバー(Xserver)のものに変更します。
- ムームードメイン管理画面へログイン:
- 「ネームサーバー設定変更」を開きます。
- ネームサーバー情報の入力:
- 「GMOペパボ以外のネームサーバーを使用する」を選択し、以下を入力します。
- ns1.xserver.jp
- ns2.xserver.jp
- ns3.xserver.jp
- ns4.xserver.jp
- ns5.xserver.jp
- 変更の保存:
- 保存ボタンを押します。反映には数時間~最大24時間程度かかります(プロパガーション期間)。
注記: Xserver間で移行する場合でも、契約IDが異なる場合はネームサーバーの再設定(更新)アクションが必要です。
hostsファイルの復元と一般アクセスの確認
DNS変更を行ったら、必ず自分のPC環境を「一般ユーザーと同じ状態」に戻します。
Step3で設定した hosts の設定が残っていると、自分だけは新サーバーに見えても、世界中からはまだ旧サーバーが見えている(または繋がらない)状態に気づけません。
1. hostsファイルの復元
- Step3で追記した IPアドレスとドメインの記述行(183.18.xxx.xxx prod.com)を削除、またはコメントアウト(#)して保存します。
2. プロパガーションの確認
- コマンドプロンプト/ターミナルで nslookup prod.com を実行し、返ってくるIPアドレスが新サーバーのものに変わっているか確認します。
- または、外部ツール「Whatsmydns.net」を使用し、世界各国のDNSサーバーが新IPを認識しているかチェックします。
検索エンジン巡回確認(robots.txt・計測タグ・GSC)
サイトが表示されただけでは完了ではありません。SEOとマーケティングデータの「血管」が繋がっているかを検証します。
1. インデックス制御の確認(事故率No.1)
新サーバーのWordPress設定で、誤って検索エンジンをブロックしていないか確認してください。
- 確認場所: 管理画面 > 設定 > 表示設定
- チェック項目: 「検索エンジンがサイトをインデックスしないようにする」のチェックが外れていること。
- ソースコード確認: <head> 内に <meta name=”robots” content=”noindex”> が存在しないこと。
2. 計測タグの発火確認(機会損失防止)
GA4(Google Analytics)やGTM、広告コンバージョンタグが正常に動作しているか確認します。
- GA4リアルタイム: 自分でサイトにアクセスし、GA4の「リアルタイム」レポートで計測されているか確認します。
- ※プラグイン設定の移行漏れにより、タグIDが空欄になっているケースが多発します。
3. Google Search Console(GSC)での検証
- URL検査ツール: GSCでトップページ等のURLを検査し、「公開URLをテスト」を実行します。Googlebotが正常にアクセスでき(200 OK)、レンダリングできているか確認します。
- サイトマップ送信: 念のため、XMLサイトマップ(/sitemap.xml)を再送信し、クローラーの巡回を促します。
移行の成否は「切り替え前の準備」で決まる
本記事では、Xserver間でのWordPress移行を例に、ダウンタイムとSEOリスクを最小化する以下の5ステップを解説しました。
- 環境定義とバックアップ: 物理的なファイルとDBを分離して保全する。
- 新環境のサイレント構築: DNS変更前に、裏側で受け皿を完成させる。
- hostsによる動作検証: 自分だけが新サーバーへアクセスし、表示・ログインを保証する。
- SSL事前設定: Web認証を用い、HTTPSエラーの発生を未然に防ぐ。
- DNS切り替えとSEOリカバリ: 切り替え後のインデックス監視で順位を守る。
サーバー移行において最も重要なのは、「DNSを切り替えた後に祈る」ことではなく、「切り替える前に勝算を確定させる」ことです。
今回解説したhostsファイルを活用した検証フローを踏めば、どのようなトラブルが起きても、DNS切り替え前に検知・修正が可能になります。
最後に:ロールバックプランの確保
移行が完了しても、旧サーバー(移行元)の契約は即座に解約せず、最低1ヶ月は保持してください。
万が一、特定のプラグインが新環境のPHPバージョンで動かない等の致命的な不具合が発覚した場合、DNSを旧サーバーに戻すだけで即座に復旧(ロールバック)できるからです。
「常に最悪のケースを想定し、リカバリ手段を確保しておく」。
このエンジニアリング思想こそが、SEOにおける検索順位と、その背後にいるユーザー体験を守る唯一の手段です。
