WordPressサイトを運営していると、サイト移行や記事バックアップのニーズは必ず生まれます。しかし、標準のエクスポート/インポート機能を正しく使いこなすだけで、手軽にデータの引っ越しや簡易バックアップができることをご存じでしょうか。多くの解説記事は、管理画面の操作手順だけを淡々と紹介するに留まり、XMLファイルの中身解析やメディア移行の落とし穴、自動化・定期運用のコツには触れられていません。本記事では、WordPress標準機能の使い方を基本から応用まで徹底解説し、小規模サイトであればプラグイン不要で自社だけでも運用可能なノウハウをお届けします。さらに、大規模移行や独自要件がある場合のプロ支援ポイントもご案内し、最適な運用方法をご提案します。
WordPress標準エクスポート機能の概要と活用シナリオ
結論(Point)
WordPress標準のエクスポート機能は、投稿・固定ページ・コメント・カテゴリ・タグなどの主要データを一括でXML形式ファイルに出力できるため、特別なプラグインを導入せずとも手軽にコンテンツ引越しや簡易バックアップ運用が可能です。
理由(Reason)
- 標準機能ならではの互換性
WordPressコアに搭載されているエクスポート機能は、WordPress間のバージョン差異を吸収するため定期的にアップデートされており、最新のXMLスキーマを自動的に反映します。これにより、同一バージョン間はもちろん、多少のバージョン差があっても標準インポート機能との互換性が高く、データ型やメタ情報が欠落しにくい点が大きなメリットです。 - 手順のシンプルさ
管理画面の「ツール>エクスポート」を開き、対象コンテンツ(すべてのコンテンツ、投稿のみ、固定ページのみ、カスタム投稿タイプなど)を選択して「エクスポートファイルをダウンロード」をクリックするだけでXMLが取得できます。操作が少ないため、WordPress初心者でも迷わず利用できる点が魅力です。 - 小規模サイトの簡易バックアップに最適
例えば、企業コーポレートサイトや個人ブログなど、データ量が数百MB以内のサイトであれば、このエクスポートXMLを定期的に取得するだけで、コンテンツの差分バックアップとして十分機能します。サーバー丸ごとのバックアップと比べて容量を抑えつつ、記事単位の復元も迅速に行えるため、運用コストや管理工数の大幅削減につながります。
定期バックアップ運用
B社は毎週金曜夜に標準エクスポートをスケジュールし、取得したXMLをGoogle Driveへ手動アップロード。過去4週間分を保存し、万一の記事削除や誤更新が発生した際は、対象週のXMLから該当投稿だけをインポートし、素早く内容を復元しています。
エクスポートデータの内容とXMLファイルの構造解析
結論(Point)
標準エクスポートで出力されるXMLファイルは、投稿・固定ページの本文だけでなく、タイトル、スラッグ、公開ステータス、作成日時、カテゴリーやタグ、カスタムフィールドなど多層的なメタ情報をタグ階層で保持しています。これらを理解することで、移行後のデータ整合性を確保し、必要に応じてXMLを直接編集してカスタマイズ移行が可能です。
XMLタグ構造の基本
<rss version="2.0" …>
WordPressエクスポートはRSSフォーマットをベースにしており、ルートは<rss>
タグ。<channel>
サイト全体のメタ情報(タイトル、URL、生成日時)を含む要素。<item>
(投稿単位)
個別の投稿や固定ページは<item>
タグで区切られ、以下のサブタグを持ちます:<title>
:投稿タイトル<link>
:公開URL<pubDate>
:公開日時<dc:creator>
:投稿者スラッグ<content:encoded>
:本文HTML<wp:post_id>
、<wp:post_date>
、<wp:status>
:内部管理情報<category domain="category" …>
:カテゴリー・タグ情報<wp:postmeta>
:カスタムフィールド(キーと値を<wp:meta_key>
/<wp:meta_value>
で定義)
カスタム投稿タイプ・タクソノミーの扱い
- カスタム投稿も
<item>
で出力され、<wp:post_type>
タグで識別されます。 - カスタムタクソノミーは
<category domain="taxonomy">
タグで保持され、独自タクソノミー名をdomain
属性に指定。 - テーマやプラグイン固有のメタ情報もすべて
<wp:postmeta>
以下に列挙されるため、移行先でも同一キーを持つプラグインが有効であれば、自動的に再構築されます。
リスクと対応策
- XMLの文字エンコーディング
デフォルトはUTF-8ですが、特殊文字や絵文字が混在すると文字化けリスクが高まります。
対策:移行前にXMLをテキストエディタでUTF-8 BOMなしで保存し直すか、WP-CLIのwp export --encoding=UTF-8
オプションで再生成。 - メタ情報の漏れ
一部のプラグインはメタ情報を独自テーブルに保存し、標準エクスポートでは含まれない場合があります。
対策:--with-meta
オプションを持つプラグイン(例:WP All Export)や、DBダンプを併用して不足分を補完。 - XMLファイルのサイズ過大
コンテンツ量が多いとXMLが数十MBに達し、インポート時にタイムアウトすることも。
対策:投稿タイプごと、あるいは年月単位で分割エクスポートするか、WP-CLIでバッチ処理。
具体手順:XML構造の確認と編集
- 管理画面からエクスポート → ファイルをダウンロード
- テキストエディタ(VSCodeなど)で開き、ルートの<channel>内を把握
- カスタムフィールドや不要な投稿タイプを移行除外したい場合は、該当<item>を削除 or
<wp:post_type>
タグでフィルタ - 保存後、インポート画面でファイルを指定
ツール紹介と未来予測
- WP-CLI
wp export --dir=./exports --post_type=post,page --start_date=2025-01-01
将来はGUIからCLI起動や、クラウド連携による自動バックアッププラットフォームが主流に。 - VSCode拡張(XML Tools)
タグ折りたたみやXPath検索で、特定要素を瞬時に編集。
他サイトへのデータ移行手順 – 標準インポート機能の使い方
結論(Point)
WordPress標準のインポート機能を利用すれば、エクスポートで取得したXMLファイルをアップロードするだけで投稿・固定ページ・コメント・カテゴリ・タグ・カスタム投稿タイプを含むほぼすべてのコンテンツを移行できます。ただし、投稿者のマッピング設定やメディアファイル再取得といったステップを正しく行わないと、データ整合性が崩れる可能性があります。
インポート手順の詳細
- 移行先サイトにログインし、「ツール>インポート」を開く。プラグイン一覧の中から「WordPress」を選択し、「今すぐインストール」をクリック。
- 「インポーターの実行」をクリックし、XMLファイルをアップロード。
- 投稿者の割り当てを設定。「インポートする投稿の投稿者を割り当ててください」で、XML内の投稿者とサイト内のユーザーをマッピングします。「新規ユーザーを作成」も可能ですが、すでに同じスラグのユーザーが存在する場合は、既存のユーザーを選択したほうが後処理が少なくて済みます。
- 添付ファイルのダウンロードを有効化。「添付ファイルをダウンロードしてインポートする」チェックボックスを必ずオンにします。これで、XMLに含まれるメディアURLから実際の画像ファイルを取得し、移行先サイトのメディアライブラリに保存できます。
- 実行後の確認作業。インポート完了後は、代表的な投稿やページを数件開き、本文内の画像リンクや内部リンクが正しく書き換えられているか、コメントが表示されているかを確認します。特にカテゴリー階層やカスタムタクソノミーが入れ子構造で再現されているかをチェックしましょう。
注意点と対策
- ファイルサイズ制限
PHP設定でupload_max_filesize
やpost_max_size
が小さいと、XMLアップロードでエラーになります。事前にphp.ini
を修正するか、WP-CLIのwp import
コマンドを併用して回避します。 - メディアの再リンク漏れ
添付ファイルをインポートしても、本文中の相対URLが残る場合があります。この場合は、プラグイン「Search Regex」などでドメインを置換して一括修正します。 - 投稿者マッピングの齟齬
XML内の投稿者スラグが移行先に存在しない場合、意図しない新規ユーザーが作成されることがあります。可能な限り、ユーザー一覧を事前に整備し、マッピングできるスラグをあらかじめ用意しておくことが重要です。
具体例(Example)
ある事例では、C社がエクスポートしたXML約15MBを標準インポートでアップロードしようとしたところ、管理画面がタイムアウト。そこで、WP-CLIから:
wp import export-20250729.xml --authors=create
を実行し、投稿者はすべて「create」オプションで新規作成。続いて、プラグイン「Better Search Replace」を使って記事内ドメインを一括書き換え、メディアURLを移行先URLに更新しました。この一連の流れで、手動エラーを最小化しつつ作業時間を従来の半分に短縮できました。
メディアファイル移行の注意点と対策
結論(Point)
WordPress標準のエクスポート/インポート機能では、XMLにメディアのURL情報は含まれるものの、実際のファイルは自動的に移行されない場合や、添付ファイルのリンク切れが発生することがあります。これを防ぐには、インポート時のダウンロードオプション活用と、必要に応じたプラグイン・スクリプトの併用が不可欠です。
対策①:インポート時のダウンロードオプション最適化
- 「添付ファイルをダウンロードしてインポートする」を必ずオン
インポーター画面でチェックを入れることで、XMLが参照する外部URLからファイルを直接取得します。 - PHP設定の調整
max_execution_time
を 300 秒以上に設定memory_limit
を256M
以上に設定
- リトライ用プラグイン
「Auto Upload Images」など、投稿保存時に外部URLの画像を再取得してくれるプラグインを併用すると、インポート後の漏れ分を自動で補填できます。
対策②:専用プラグイン/ツール活用
- Export Media with Selected Content
エクスポート時にメディア本体をZIPにまとめてダウンロードできるため、ファイル単位で確実に保存可能。 - WP-CLI スクリプト
wp media import $(wp eval-file list-attachment-urls.php)
※list-attachment-urls.php
はXMLから<wp:attachment_url>
を抽出するPHPスクリプト。
注意点③:URL書き換えとキャッシュクリア
- インポート後、本文内リンクが移行前ドメインを指したままになっている場合は、「Better Search Replace」などで一括書換えを行います。
- CDN利用サイトでは、キャッシュ削除やパージを実行して新規メディアを反映させる必要があります。
具体例:大規模メディア移行の流れ
D社の事例では、動画ファイル約2GBを含む投稿を移行。標準インポートではまず画像の一部が欠落。そこで「Export Media with Selected Content」プラグインを使い、画像・動画・PDFをZIPで取得。移行先で展開後、WP-CLIのwp media import ./media/* --porcelain
コマンドを実行し、一括登録&リンク自動更新を行いました。この手順でメディア漏れゼロの完全移行を実現しています。
標準機能の限界とプラグイン/CLI利用による拡張方法
結論(Point)
標準のエクスポート/インポート機能だけでは、プラグイン設定、テーマオプション、ユーザーアカウント権限設定などは移行できません。大規模サイトや複雑な構成を持つ場合、専用プラグインやWP-CLIを併用することで、データ移行の網羅性と自動化を強化できます。
理由(Reason)
テーマカスタマイザー設定やウィジェット配置、プラグイン固有テーブルデータはXMLに含まれないため、手動で設定を再現する必要があります。また、ネットワーク環境(マルチサイト)から単一サイトへのエクスポートには標準機能では対応しておらず、WP-CLIの export
コマンドでサブサイト単位に抽出する必要があります。
プラグイン活用例
- All-in-One WP Migration
ファイル、データベース、メディアをまとめてエクスポート。サイズ上限の拡張アドオン購入で、何十GB規模にも対応可能。 - Duplicator
サイト全体(ファイル+DB)をパッケージ化し、移行先でインストーラーを実行するだけで完全複製を実現。
WP-CLI自動化スクリプト例
# 1. 投稿・ページ・カスタム投稿を抽出してエクスポート
wp export --dir=./exports --post_type=post,page,my_custom_post
# 2. 移行先でXMLをインポート
wp import ./exports/*.xml --authors=map
# 3. メディアを別コマンドで登録
wp media import ./exports/*.zip --preserve-filemtime
--authors=map
で、投稿者スラグをwp user list
の結果と照合して自動マッピング。--preserve-filemtime
により、メディア登録時のタイムスタンプを維持。
具体的な構成例
- ステージング環境で事前テスト
CLIスクリプトをステージングサイトで検証し、エラー発生時にログを確認。 - 本番環境で実行
cronジョブに登録し、自動実行。 - ログ監視と通知
スクリプト実行後、Slack通知を行い、移行結果をチームで共有。
定期バックアップとしてのエクスポート活用術と自動化
結論(Point)
WordPress標準エクスポートを定期的なバックアップ手段として活用することで、プラグイン不要でコンテンツの変更履歴を保存し、万一のデータ損失時に迅速な復旧が可能になります。さらに、WP-CLIやcronと組み合わせることで自動化し、運用工数を大幅に削減できます。
自動化手順
#!/bin/bash
DATE=$(date +%F)
mkdir -p ~/wp-backups/$DATE
wp export --dir=~/wp-backups/$DATE --quiet
そしてcronに以下を追加:
# 毎日深夜1時に実行
0 1 * * * /usr/bin/bash /home/ユーザー/wp-backup.sh >> /var/log/wp-backup.log 2>&1
バックアップ保存ポリシー
- 世代管理:過去7日分のディレクトリを保持し、8日目は自動削除。
- リモート転送:作成後に
rsync
やrclone
を使い、クラウド(Google Drive/S3)へアップロード。
Git連携
- XMLリポジトリ
バックアップディレクトリをGit管理下に置き、git add
→git commit
→git push
で履歴追跡。 - 差分確認
git diff
コマンドでコンテンツの変更箇所を可視化し、編集ミスや不正改変の早期発見に役立ちます。
将来予測
今後はヘッドレスCMS連携やクラウドネイティブバックアッププラットフォームとの統合が進み、XMLエクスポートだけでなく、APIを通じた差分同期やリアルタイムミラーリングが標準化されるでしょう。
トラブルシューティング – よくある問題と解決策
結論(Point)
エクスポート/インポート時には、XMLファイルの読み込みエラー、メディア欠落、文字化け、パーミッションエラーなどが多発しますが、それぞれの原因を把握して適切に対策を講じれば、高い成功率でデータ移行・バックアップ運用が実現します。
XML読込エラー
- 症状:インポーター実行時に「ファイルが無効です」や「XML構文エラー」が表示される。
- 原因:ファイル破損、途中で切れたダウンロード、大きすぎるファイルサイズ。
- 解決策:
- ファイルをUTF-8で再保存
- ファイル分割エクスポート(WP-CLIの
--post_type
、--start_date
オプション) - PHPメモリ・実行時間設定の拡張
メディア欠落・リンク切れ
- 症状:添付画像が表示されない、メディアライブラリにファイルがない。
- 原因:外部URLからのダウンロード失敗、サーバータイムアウト。
- 解決策:
- インポート時の「添付ファイルをダウンロード…」有効化
- 「Export Media with Selected Content」でメディアのみ別取得
- WP-CLIやプラグインで再取得
文字化け・エンコーディング不整合
- 症状:日本語が
?
や�
に置き換わる。 - 原因:XMLのエンコーディング宣言(
<?xml encoding="UTF-8"?>
)と実ファイルのエンコーディング不一致。 - 解決策:
- テキストエディタで
BOMなしUTF-8
に統一 wp export --encoding=UTF-8
を指定
- テキストエディタで
パーミッション・ファイルサイズ制限
- 症状:アップロード拒否、500エラー。
- 原因:
upload_max_filesize
・post_max_size
の小設定、PHPプロセスのパーミッション不足。 - 解決策:
php.ini
を編集し設定値を引き上げwp-config.php
にdefine('WP_MEMORY_LIMIT','256M');
を追加- FTP/SSH経由でCLIによるインポートに切り替え
具体的なケーススタディ
- ケース1:EコマースサイトでXML約50MBがタイムアウト。→ 投稿タイプ別に4分割してエクスポートし、順番にインポート。
- ケース2:絵文字を含むブログで文字化け多発。→
iconv
コマンドでファイルを一括変換後、再インポート成功。
まとめ
WordPress標準のエクスポート/インポート機能を正しく理解・活用すれば、プラグインなしでコンテンツ移行や簡易バックアップが可能です。XMLの中身解析、メディア移行の注意点、WP-CLI&cronによる自動化など、本記事の手法を今すぐ実践し、万が一の際にも迅速な復旧体制を構築しましょう。