WordPressのサイトを新しいサーバーやドメインへ移すとき、いちばん大事なのは旧サイトのURLと新サイトのURLを1対1で対応させることです。対応が崩れると、旧URLから新URLへの301リダイレクトが張れず、検索エンジンの評価や、名刺・他サイトからのリンクが行き場を失います。
この記事では、旧サイトを止めずに新しいドメインへ移した作業をもとに、移行の前と最中にURLを壊さないための判断と落とし穴をまとめます。301リダイレクトの設定そのものは、別の記事で詳しく書いています。
この記事は2026年10月時点のWordPress本体・WordPress Importerのソースコードと、All-in-One WP Migration公式ガイドの記述をもとにしています。ドメインはすべて架空の値です。
結論:URLに投稿IDが入っているかで、移行の手段が決まる
先に結論です。
- 旧サイトのURLに投稿IDが入っているか(
/news/56/など)を、最初に確認する - 入っているなら、データベースを丸ごと移す手段(All-in-One WP Migrationなど)を選ぶ。WordPress標準のエクスポート(WXR)では、IDが変わることがある
- All-in-One WP Migrationは、インポート先のサイトのURLに合わせて中のURLを置き換える。インポートの前に、移行先のURLを正しくしておく
- エクスポートの設定画面は、実行前に毎回確認する
前提:DNSを切り替えずに、並行して作って301でつなぐ
今回の移行は、同じドメインのままサーバーだけを替える「DNS切り替え型」ではありません。
旧サイト : https://old-example.co.jp/ (旧サーバー。止めずに残す)
新サイト : https://new-example.jp/ (新サーバー。WordPress は /wp/ に置く構成)
新しいドメインに新サイトを作り込み、旧サイトからコンテンツだけを移し、最後に旧URLから新URLへ301でつなぎます。旧サイトを止めないので、ダウンタイムはありません。この方式では、旧URLと新URLの対応表がそのまま301のルールになるので、URLが1対1で引き継げるかがすべてです。
URLに投稿IDが入っているかで、移行の手段が決まる
旧サイトのお知らせは、/news/news/56/のように投稿IDが入ったURLでした。この場合、新サイトでも同じ投稿が同じIDでないと、/56/が別の記事を指してしまいます。
判断はこうなります。
旧サイトの URL に投稿IDが入っているか?
入っている → データベースを丸ごと移す手段(All-in-One WP Migration、サーバーの移行ツールなど)
入っていない → WXR(標準のエクスポート)でもよい。プラグインに頼らない分、軽い
WXRはIDを「なるべく」保つが、保証しない
WordPress標準の「ツール → エクスポート」で書き出すWXRファイルを、WordPress Importerで読み込む場合を考えます。
ソースコードを確認すると、WordPress Importerは投稿を作るときに、元のIDを「このIDで作ってほしい」とWordPressに渡しています。ただしWordPress本体は、そのIDが移行先で空いているときだけ使い、すでに使われていれば新しいIDを振ります。
つまりWXRでは、IDは「保てるとは限らない」です。移行先にページや画像、リビジョンがあると、同じIDがぶつかります。新しいサイトを並行して作り込んでいる場合は、ほぼ確実にぶつかるので、今回はデータベースを丸ごと移すAll-in-One WP Migrationを選びました。
スラッグを揃え直すなら、SQLではなくWordPressの関数で
移行後に、投稿のスラッグ(URLの末尾)を整理し直すことがあります。このときSQLで直接書き換えず、wp_update_post()を通すと、WordPressが旧スラッグを自動で記録し、旧スラッグのURLから新しいURLへ301してくれます(公開中の投稿が対象。固定ページのように階層を持つ投稿タイプは対象外)。詳しくは、301の設定の記事に書いています。
落とし穴1:URLに/wp/が焼き込まれる
いちばん危なかったのがこれです。
移行先のサーバーは、WordPress本体を/wp/というフォルダに置く構成で、サイトのURLもhttps://new-example.jp/wp/になっていました。
All-in-One WP Migrationは、インポートすると、データベースの中のURLをインポート先のサイトのURLに置き換えます。そのままインポートしていたら、全記事のURLにこうして/wp/が入っていたはずです。
旧 : https://old-example.co.jp/news/news/56/
新 : https://new-example.jp/wp/news/56/ ← /wp/ が入る
こうなると、旧URLと新URLが1対1になりません。後から直すには、データベース全体の置換が必要になります。
インポートの前に、移行先のURLを正しくしておきます。
- WordPressの「設定 → 一般」で、サイトアドレス(URL)をルートにする(WordPressアドレスは
/wpのまま) /wp/index.phpをルートにコピーし、中の読み込み先をrequire __DIR__ . '/wp/wp-blog-header.php';に書き換える- 「設定 → パーマリンク」を開いて、変更せずに保存する(書き換えルールの作り直し)
- トップページや固定ページが、
/wp/の付かないURLで表示されることを確認する - 確認してからインポートする
落とし穴2:エクスポートの設定に罠がある
All-in-One WP Migrationのエクスポート画面には「高度なオプション」があります。ここで2つ、危ないことがありました。
- 「データベースをエクスポートしない」にチェックが入っていた。 公式ガイドでも、このオプションは記事やページを含まない不完全なバックアップになるとされています。気づかなければ、中身のない移行になっていました
- 検索置換の欄に、前回の作業の値が残っていた。 そのまま実行すると、意図しない文字列がデータベース全体で置き換わります
どちらも、実行の直前に画面を確認して気づきました。エクスポートの設定画面は、実行前に毎回スクリーンショットを撮って確認するのがおすすめです。書き出したファイルの容量で気づける場合もありますが、画像が多いサイトでは容量だけでは判断できません。
落とし穴3:ファイルが大きすぎてインポートできない
書き出したファイルは579MBでしたが、インポート先で表示された上限は512MBでした。
公式ガイドによると、無料版のプラグインそのものには容量の上限はなく、サーバーの設定が許す範囲まで読み込めます。上限に引っかかったら、サーバーのアップロード上限を上げるか、有料の拡張機能を使うか、ファイルを小さくするかです。
今回は、メディア(uploads)を除外して書き出し、147MBまで小さくしました。画像は別の経路で移します。
FTPの情報がないときは、管理画面から取り出す
画像を移そうとしたところ、旧サーバーのFTPの情報を誰も持っていませんでした(前の管理会社が管理していたため)。
旧サイトの管理画面にファイルマネージャー系のプラグインが入っていたので、wp-content/uploadsの下を年ごとのフォルダ単位でZIPにしてダウンロードしました。FTPが使えなくても、管理画面に入れればファイルは取り出せます。
移行のあとに確認すること
- プラグインを更新する:旧環境はPHP 7系、新環境はPHP 8.3でした。インポート時に警告が出ましたが、動作はしました。ただし古いバージョンのプラグインが新しいPHPで動く状態なので、移行直後に更新します
mu-pluginsを見る:wp-content/mu-plugins/に、旧サーバーの自動インストーラーが置いたファイルがありました。ここのプラグインは管理画面の一覧に出ないので、ファイルの一覧で確認します- 件数とURLを見る:記事の件数が新旧で一致するか、画像が表示されるか、旧URLと同じパスで新サイトが開けるか
- 301をつなぐ:対応が取れたら、旧サイトから301を張ります(下の記事へ)
- フォームのメールが届くか:移行で壊れても、画面には何も出ない項目です(下の記事へ)
チェックリスト
移行の前
- 旧サイトのURLに投稿IDが入っているか
- 入っているなら、データベースを丸ごと移す手段を選んだか
- 旧サーバーのファイルを取り出す手段(FTP、または管理画面)があるか
インポートの前
- 移行先のサイトアドレスを、最終的なURL(
/wp/なしなど)にしたか - エクスポートの「高度なオプション」に、意図しないチェックや値が残っていないか
- 書き出したファイルが、インポート先の上限に収まるか
移行のあと
- プラグインを最新にしたか、
mu-pluginsを見たか - 記事の件数・画像・URLが新旧で一致するか
- 301とメールを確認したか
よくある質問
Q. WXRで十分なのはどんなときですか?
A. URLに投稿IDが入っていない(スラッグや日付のURL)なら、WXRでもURLは引き継げます。プラグインに頼らず、記事だけを移したいときに向いています。ただしWXRは、テーマの設定やウィジェットなどは移しません。
Q. 有料の拡張機能は必要ですか?
A. 書き出したファイルがサーバーの上限に収まるなら、無料版で足ります。収まらないときは、まずメディアを除外して小さくする方法を試すのがおすすめです。
Q. 旧サイトはいつまで残せばいいですか?
A. 301は、旧サーバーと旧ドメインが動いている間しか効きません。止めた時点で、旧URLへのリンクはすべて行き場を失います。できるだけ長く、最低でも1年は残すのがおすすめです。
まとめ
- 移行の手段は、旧URLに投稿IDが入っているかで決める
- WXRはIDを保てるとは限らない。並行して作り込んだ新サイトでは、ほぼ確実にぶつかる
- All-in-One WP Migrationは、インポート先のURLに合わせて置き換える。URLを先に正しくしてからインポートする
- エクスポートの設定画面は毎回確認し、容量の上限はメディアを除外してかわす
移行したあとの301の張り方と、移行後に起きたメールの問題は、こちらの記事にまとめています。
- WordPressのドメイン移行でRedirectionを安全に設定した手順と、検証で見つかった落とし穴
- Contact Form 7で自動返信は届くのに管理者宛だけ届かない原因
- 前の制作会社からサイトを引き継ぐとき、技術より先に確認すべきアカウントと契約
