WordPressサブドメイン・サブディレクトリ
間の移行完全手順
blog.example.comからexample.com/blog/へ、example.com/blog/からexample.com/へといったサブドメイン・サブディレクトリ間の移行手順を4パターン対応で解説します。URLが変わるため301リダイレクトとDB内のURL一括置換が必要です。
📋 目次
🗂️ 1. 移行パターンの種類と特徴
自分の状況に合ったパターンを確認してから手順に進んでください。
| パターン | ドメイン変化 | 難易度 | SEO影響 |
|---|---|---|---|
| A:サブドメイン→サブディレクトリ | ドメイン変化あり | ★★★☆ | 一時的変動あり |
| B:サブディレクトリ→ルート | 同一ドメイン内 | ★★☆☆ | 小〜中程度 |
| C:ルート→サブディレクトリ | 同一ドメイン内 | ★★☆☆ | 一時的変動あり |
| D:サブドメイン→ルート | ドメイン変化あり | ★★★★☆ | 一時的変動あり |
📊 2. SEO影響と注意点
Googleはサブドメインとサブディレクトリを同様に扱うと述べていますが、実務的にはサブディレクトリの方がメインドメインの評価を直接共有できるため有利とされることが多いです。同じテーマ・ブランドのコンテンツを統合する場合はサブディレクトリへの移行が推奨されます。
① 旧URL → 新URLへ1対1で301リダイレクトを設定する
② Better Search ReplaceでDB内のURL一括置換を行う
③ Google Search Consoleで新URLのサイトマップを送信してクロールを促進する
blog.example.comからexample.comへの移行はドメインが変わるため、ドメイン変更ガイドのSearch ConsoleのAddress Change設定も必要です。🔧 3. パターン別 移行手順
パターンA:サブドメイン → サブディレクトリ
blog.example.com → example.com/blog/ への移行です。
public_html/blog/ ディレクトリを作成する
FTPまたはファイルマネージャーで public_html/blog/ ディレクトリを作成します。
新規DBを作成してWordPressを仮インストールする
サーバーパネルで新規DBを作成し、example.com/blog/ にWordPressをインストールします(この後インポートで上書きされます)。
All-in-One WP Migrationでエクスポート→インポートする
サブドメインのWPでエクスポートし、example.com/blog/ のWPでインポートします。
Better Search ReplaceでURL置換する
検索:https://blog.example.com / 置換:https://example.com/blog
全テーブルを対象にドライラン確認後に本実行します。
パーマリンク設定を保存し直す
設定 → パーマリンク設定 → 変更を保存 をクリックして .htaccess を再生成します。
サブドメイン(blog.example.com)の .htaccess に追記:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/blog/$1 [R=301,L]
新URLをSearch Consoleに追加・サイトマップ送信
example.com/blog/sitemap.xml をSearch Consoleに送信します。
旧サブドメインでAddress Changeを設定(推奨)
Search ConsoleでAddress Changeを使って移転を通知します。詳細はドメイン変更ガイドを参照。
パターンB:サブディレクトリ → ルート
example.com/blog/ → example.com/ への移行です。
public_html/blog/ の全ファイルをpublic_html/ にコピーする
既存のルートファイルがある場合は事前にバックアップしてください。
phpMyAdminでサイトURLを更新する
wp_options テーブルの siteurl と home を https://example.com に変更します。
Better Search ReplaceでURL置換する
検索:https://example.com/blog / 置換:https://example.com
スラッシュの有無を確認しながら複数パターンで実行します。
旧パス(/blog/)に301リダイレクトを追加する
ルートの .htaccess に追記:RewriteRule ^blog/(.*)$ /$1 [R=301,L]
パーマリンク設定を保存し直す
管理画面 → 設定 → パーマリンク設定 → 変更を保存 をクリックします。
パターンC:ルート → サブディレクトリ
example.com/ → example.com/blog/ への移行です。
/blog/ ディレクトリを作成してファイルをコピーする
FTPで public_html/ の全WordPressファイルを public_html/blog/ にコピーします。
phpMyAdminでサイトURLを /blog/ に更新する
wp_options の siteurl と home を https://example.com/blog に変更します。
Better Search ReplaceでURL置換する(慎重に)
検索:https://example.com(/blog/なし) / 置換:https://example.com/blog
必ずドライランで確認。example.com/blog が example.com/blog/blog にならないよう注意してください。
旧ルートURLを /blog/ に301リダイレクトする
ルートの .htaccess に追記(新コーポレートサイトがある場合は条件を調整してください):
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /blog/$1 [R=301,L]
パターンD:サブドメイン → ルート
blog.example.com/ → example.com/ への移行です。パターンAとBの複合です。
All-in-One WP MigrationでサブドメインのWPをエクスポートし、ルート(example.com/)のWPにインポートします。Better Search Replaceで blog.example.com → example.com に置換します。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
サブドメインのSearch Consoleで「アドレスの変更」を設定し、example.com への移転を通知します。詳細はドメイン変更ガイドを参照してください。
⚙️ 4. 301リダイレクトのコード例
パターンA:サブドメイン→サブディレクトリ
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?blog\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/blog/$1 [R=301,L]
パターンB:サブディレクトリ→ルート
RewriteEngine On
RewriteRule ^blog/(.*)$ /$1 [R=301,L]
パターンC:ルート→サブディレクトリ(WordPress URLのみ)
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /blog/$1 [R=301,L]
パターンD:サブドメイン→ルート
RewriteEngine On
RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
✅ 5. 移行後の確認チェックリスト
- ☑旧URLにアクセスすると新URLに301リダイレクトされる
- ☑新URLでサイトが正常に表示される(SSL🔒確認)
- ☑全記事・固定ページのURLが新しいパスになっている
- ☑画像・内部リンクが新URLを使っている
- ☑管理画面のWordPressアドレス・サイトアドレスが新URLになっている
- ☑パーマリンク設定を保存し直した
- ☑Google Search Consoleに新URLを追加・サイトマップ送信済み
- ☑サブドメイン→別ドメインの場合:Search ConsoleのAddress Change設定済み
- ☑Google Analytics のストリームURLを更新した
- ☑リダイレクトチェーン(3回以上の連鎖リダイレクト)が発生していない
🔨 6. よくあるトラブルと対処法
.htaccessの条件が不足しており、/blog/ 以下のURLも再度 /blog/ にリダイレクトされるループになっています。RewriteCond %{REQUEST_URI} !^/blog/ の条件を必ず入れて /blog/ 以下へのリクエストはリダイレクトしないようにしてください。
Better Search Replaceで example.com を example.com/blog に置換した後に逆方向の置換をしたり、置換対象が広すぎる場合に発生します。必ずドライランで確認してから実行し、置換後に数ページのソースを確認してください。問題が発生した場合はバックアップからDBを復元します。
wp-config.phpのDB接続情報またはサイトURLの設定が不正な状態です。phpMyAdmin で wp_options テーブルの siteurl と home の値を正しい新URLに直接変更してください。
Better Search ReplaceでURL置換が完全でない場合に起きます。特に http:// と https:// の両パターン、スラッシュあり/なしのパターンで再度置換を実行してください。また wp_postmeta テーブルにシリアライズ形式で保存されている場合があるため、Better Search Replaceを使うことで自動処理されます。
.htaccessファイルの書き込み権限が不足しているため、パーマリンク設定が反映されていません。FTPで .htaccess のパーミッションを644に設定するか、FTPで手動で.htaccessを編集・アップロードしてください。Apacheの mod_rewrite が有効になっているかもサーバー側で確認します。
❓ 7. よくある質問(FAQ)
Q. サブドメインとサブディレクトリ、新規に始めるならどちらがいいですか?
同じブランド・テーマのコンテンツであればサブディレクトリ(example.com/blog/)が推奨されます。メインドメインのSEO評価を共有でき、管理も一元化できます。全く別のサービスや言語サイトの場合はサブドメインが適切です。
Q. 移行前後でWordPressのバージョンが違っても問題ありませんか?
基本的に問題ありませんが、移行先は移行元と同じかそれ以上のWordPressバージョンにしておくことを推奨します。プラグインのPHP互換性も確認しておきましょう。
Q. マルチサイト環境でサブドメイン→サブディレクトリに切り替えられますか?
WordPress マルチサイト環境でのネットワーク設定(サブドメイン型⇔サブディレクトリ型)の切り替えは、通常の移行より複雑です。wp-config.phpのマルチサイト設定と各サイトのURLを全て変更する必要があります。マルチサイトの移行についてはマルチサイト移行ガイドを参照してください。
Q. 旧サブドメインを削除しても問題ありませんか?
旧サブドメインを削除するとリダイレクトが機能しなくなります。旧サブドメインを削除する場合は、ドメインレジストラやDNS設定でCNAMEやAレコードを維持しながら.htaccessのリダイレクトが動くようにするか、長期間(最低1年)は維持することを推奨します。