CMS・WordPress

WordPressの移行でURLを1対1で引き継ぐ方法|WXRとAll-in-One WP Migrationの選び方と、URLに/wp/が焼き込まれる落とし穴

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を正しくしておきます。

  1. WordPressの「設定 → 一般」で、サイトアドレス(URL)をルートにする(WordPressアドレスは/wpのまま)
  2. /wp/index.phpをルートにコピーし、中の読み込み先をrequire __DIR__ . '/wp/wp-blog-header.php';に書き換える
  3. 「設定 → パーマリンク」を開いて、変更せずに保存する(書き換えルールの作り直し)
  4. トップページや固定ページが、/wp/の付かないURLで表示されることを確認する
  5. 確認してからインポートする
スポンサーリンク

落とし穴2:エクスポートの設定に罠がある

All-in-One WP Migrationのエクスポート画面には「高度なオプション」があります。ここで2つ、危ないことがありました。

  • 「データベースをエクスポートしない」にチェックが入っていた。 公式ガイドでも、このオプションは記事やページを含まない不完全なバックアップになるとされています。気づかなければ、中身のない移行になっていました
  • 検索置換の欄に、前回の作業の値が残っていた。 そのまま実行すると、意図しない文字列がデータベース全体で置き換わります

どちらも、実行の直前に画面を確認して気づきました。エクスポートの設定画面は、実行前に毎回スクリーンショットを撮って確認するのがおすすめです。書き出したファイルの容量で気づける場合もありますが、画像が多いサイトでは容量だけでは判断できません。

落とし穴3:ファイルが大きすぎてインポートできない

書き出したファイルは579MBでしたが、インポート先で表示された上限は512MBでした。

公式ガイドによると、無料版のプラグインそのものには容量の上限はなく、サーバーの設定が許す範囲まで読み込めます。上限に引っかかったら、サーバーのアップロード上限を上げるか、有料の拡張機能を使うか、ファイルを小さくするかです。

今回は、メディア(uploads)を除外して書き出し、147MBまで小さくしました。画像は別の経路で移します。

FTPの情報がないときは、管理画面から取り出す

画像を移そうとしたところ、旧サーバーのFTPの情報を誰も持っていませんでした(前の管理会社が管理していたため)。

旧サイトの管理画面にファイルマネージャー系のプラグインが入っていたので、wp-content/uploadsの下を年ごとのフォルダ単位でZIPにしてダウンロードしました。FTPが使えなくても、管理画面に入れればファイルは取り出せます。

移行のあとに確認すること

  1. プラグインを更新する:旧環境はPHP 7系、新環境はPHP 8.3でした。インポート時に警告が出ましたが、動作はしました。ただし古いバージョンのプラグインが新しいPHPで動く状態なので、移行直後に更新します
  2. mu-pluginsを見る:wp-content/mu-plugins/に、旧サーバーの自動インストーラーが置いたファイルがありました。ここのプラグインは管理画面の一覧に出ないので、ファイルの一覧で確認します
  3. 件数とURLを見る:記事の件数が新旧で一致するか、画像が表示されるか、旧URLと同じパスで新サイトが開けるか
  4. 301をつなぐ:対応が取れたら、旧サイトから301を張ります(下の記事へ)
  5. フォームのメールが届くか:移行で壊れても、画面には何も出ない項目です(下の記事へ)

チェックリスト

移行の前

  • 旧サイトの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の張り方と、移行後に起きたメールの問題は、こちらの記事にまとめています。

参考