WordPressの特定カテゴリだけを別サイトに移転

引っ越し
©いらすとや.

WordPressでブログを作っていて、いつのまにか特定のカテゴリーが巨大化してブログの方向性がおかしくなることはある筈。
ワインのブログにちょこっと盆栽について書いていたつもりがいつのまにか盆栽の記事の方が多くなってるみたいな。ワインと盆栽では読者層が全く異なるので分けてしまった方が良い。
この「がとらぼ」でも中華スマホの紹介ページ(カテゴリ)を作っていたらいつのまにかスマホカテゴリが肥大した。で、このカテゴリの成長に合わせて「がとらぼ」の一部ではなく別のサイト(子サイト)のように見えるように作っていたが、それなら完全に別のサイトにしてしまった方が良いと思った。

この記事は、特定カテゴリのデータ引っ越しとリダイレクトについて。

特定カテゴリのデータの引っ越し

WordPressデータエクスポート
移転元サイトのWordPress管理パネルの「ツール」→「エクスポート」を開く。
「投稿」を選ぶ。
「カテゴリ」で引っ越しする特定のカテゴリを選ぶ。
「開始日時」と「終了日時」を必ず選択する。少なくとも2022年10月1日時点で最新のWordPress 6.0.2までは期間指定を行わないとエクスポートに失敗する。また、投稿数が多いとエクスポート或いはインポートで失敗しくじるかもしれないので期間を調整して1つのエクスポートファイルに含まれる記事数を数百以内程度にする。
必要に応じて「固定ページ」と「メディア」もそれぞれエクスポート。ただし、「固定ページ」と「メディア」はカテゴリのような仕分けはできないので移転先で不要な「固定ページ」と「メディア」を削除することになる。

WordPressデータインポート 1
移転先サイトのWordPress管理パネルの「ツール」→「インポート」を開く。
WordPress→WordPressの引っ越しなので「WordPress」のインポートになる。初めての場合は「今すぐインストール」をクリックする。クリックするだけで自動的にインストールされる。初めて以降は次へ。

WordPressデータインポート 2
「WordPress」の「今すぐインストール」が「インポーターの実行」に変わる(初めてではない場合は最初から「インポーターの実行」が表示される)
「インポーターの実行」をクリック。

WordPressデータインポート 3
「ファイルを選択」ボタンをクリックするとファイル選択画面が表示されるので移転元でエクスポートしたファイルを1つ選択する。
「ファイルをアップロードしてインポート」をクリック。

WordPressデータインポート 4
移転元と移転先で管理者やその他のユーザー名が変わることはよくあること。データをインポートするときに新しい投稿者を指定することができる。
添付ファイルのインポートのチェックを付けると記事に含まれる画像などインポート時に自動的に移転元サイトからダウンロードして登録してくれる。これがとても便利なのでチェックするのがオススメ。ただし、数十万/数百万単位であまりに多いようであればチェックしない方が良いかも。
「実行」をクリック。

インポートの手順で「投稿」(「固定ページ」「メディア」)で複数に分けてエクスポートしたファイルを1つずつ順番にインポートする。

このデータ引っ越し方法だと、移転元で付けられた投稿ID(番号)は移転先でも同じ投稿ID(番号)になる。このおかげで次のリダイレクトの設定がラク。

リダイレクト設定 カテゴリを識別できるスラッグの場合

スラッグ(URL)にカテゴリ名が入っているなら簡単。WordPressで処理の追加は不要。(WordPressでやりたければそれもアリ)

  • https://example.com/wine/hogehoge (ワインのカテゴリであることがURLで明らか)
  • https://example.com/bonsai/hogehoge (盆栽のカテゴリであることがURLで明らか)
  • Nginxリダイレクト設定例 (引っ越し元サイト側)
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    server {
        listen       192.168.0.1:443 ssl http2;
        listen       [fde4:8dba:82e1::abcd/64]:443 ssl http2;
        server_name  example.com;
    
        #中略
    
        rewrite ^/bonsai(.*)$ http://example.jp/bonsai$1 permanent;
    
        #後略
    }
    
    リダイレクト設定は8行目。
    上の例だと、https://example.com/bonsai/article は https://example.jp/bonsai/article にリダイレクトされるようになる。

    引越し先ではカテゴリ名はスラッグに含まれないということであれば
    rewrite ^/bonsai(.*)$ http://example.jp$1 permanent;
    この例だと、https://example.com/bonsai/article は https://example.jp/article にリダイレクトされるようになる。
    もちろん、リダイレクト先のURLでそのページが表示されないと意味ない。

    ウェブサーバでのリダイレクト設定の場合は移転元サイトの「投稿」「固定ページ」(「メディア」)は削除しても問題ないのがメリット。リダイレクトは少なくとも1年ほどは継続する方が良いかと思います。

    リダイレクト カテゴリを識別できないスラッグの場合

    「がとらぼ」では投稿記事のURLは https://gato.intaa.net/archives/00000 のようにarchives/数字という形式のURL。これはURLを見てもその投稿が何のカテゴリに属しているかは判らない。このようなURLではウェブサーバでリダイレクトさせるというのは事実上無理。カテゴリ内の記事URLを全てリストアップして個別にリダイレクト設定を書くならそれでも可だけど普通はそんなことしない。

    WordPress /wp-content/themes/使用中テーマ/functions.php に追加 (引っ越し元サイト側)
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    function category_redirect_to_newsite() {
    if ( !is_home() && !is_front_page() ) {
        $cat_slag = 'bonsai';    //移転するカテゴリのスラッグ (例: bonsai)
        $to_domain = 'https://example.com'; //移転先のドメイン
        $cur_uri = $_SERVER["REQUEST_URI"];;
        $new_url = $to_domain . $cur_uri;
        if ( in_category( $cat_slag ) ) {
            wp_redirect( $new_url, 301 );  //宛先がローカルならwp_safe_redirectを使う 
            exit;
        }
      }
    }
    add_action('template_redirect', 'category_redirect_to_newsite');
    

    「移転するカテゴリのスラッグ」というのはWordPressの管理パネルのメニューから「投稿」→「カテゴリ」で対象のカテゴリを選択して「スラッグ」欄に表示される文字列。(半角英数字とハイフンで構成される)

    WordPressでリダイレクト表示を行う場合、移転後も少なくとも1年ほど(リダイレクトを止めるまで)移転記事を消さずに置いておく必要がある。(元記事が無くなるとその記事のリダイレクトが行われなくなる)

    「特定カテゴリを新しいサイトなどに移すことで移転元サイトの専門性が高くなるので閲覧者の好感度は上がるだろうし長期で見ればSEO的にも良さげ。ただし、一部移転から暫くは移転先サイトは苦戦するかも。新規サイトであれば特に。そのあたりよく考えて迂闊なカテゴリ作成(拡張)はやめて最初から新しいサイトを作る方が良さそう。元が雑記サイト寄りだと難しいかもだけど。