WordPressのマルチサイト化に失敗する原因と成功する方法

はじめに

今回は、WordPressをマルチサイト化する方法、というテーマで書いてきます。

冒頭から申し上げますが、サーバー編集に慣れていない人にとって、この作業は少し難しいと思います。

人それぞれ、ブログの置き場所、サーバーの状況が異なっているので、他人の説明で上手くいきづらい気がします。
真似していけばいいわけじゃないので、最初に自分のフォルダの場所などの状況を見極めるのが大事だと思います。

また、途中で似たようなコード書き換え作業が、何箇所も出てきますので注意しましょう。

・難しいという覚悟
・1日以上の余裕のあるスケジュール
・重要なサイトでいきなり試さない
・絶対に、必ずバックアップを取ってから始める
・紅茶とお菓子とマッサージ機を用意する
・ストレッチする

このくらい準備してから、始めましょう。

作業環境

WordPress 4.9.8 (WING-AFFINGER5 Child テーマ)
MacOSX High Sierra
FTPソフト Cyberduck
該当サイト2013年-運営

参考資料

こちらの公式サイトの説明に沿って作業します。

Create A Network
https://codex.wordpress.org/Create_A_Network

 

1.マルチサイトとは

マルチサイト機能とは、簡単に言うと「複数のブログを1つのWordPressでまとめて運用できる」ってことです。
公式の説明は以下の通りです。

WordPressはバージョン3.0以降、異なるドメイン名でも、同じインストールに複数のブログを実行することができます。
すなわち、マルチサイト機能が含まれています。
WordPress の公式オンラインマニュアルWordPress Codex
https://codex.wordpress.org/Migrating_Multiple_Blogs_into_WordPress_3.0_Multisite#Install_4.9.8より翻訳引用

 

2.マルチサイトにする理由

僕が、ブログをマルチサイト化したい理由は、「多言語対応のブログを作りたいから」です。

ここが少しでも揺らぐと、作業中に心が折れそうになるので、見つめ直しておいた方がいいと思います。

僕が、運営中の多言語ブログをもっと進化させたいと、決意するまでの経緯はこちらの記事に書きました。
多言語対応の数ある手法の中で、マルチサイト化をいう手段を選んだ理由を書いています。
(Googleの公式サイトが、そうしろと言っていました。)

WordPressブログを多言語化するベストな方法【GoogleのSEO重視】

本当にマルチサイトにする必要がありますか?

「本当にマルチサイトにする必要がありますか?」
これ、僕が言っているわけじゃなくて、公式に書いてあるんですよ。

Do you really need a network?
https://codex.wordpress.org/Before_You_Create_A_Network#WordPress_Settings_Requirements

実際、多言語展開「以外」で、良いなと思ったマルチサイトの利用例は、今の所、僕の中ではないです。
正直、カテゴリーごとに分けるくらいなら、マルチサイトにする必要はないのでは、と思います。
(ブログの機能でもできますよね)
ジャンル分けなら、別ドメインを取得して別ブログで展開した方がSEO対策にはいいと僕は思います。

 

3.重要なサイトでいきなり試さない

自信がない場合は、重要なサイトでいきなり試さない方がいいと思います。
なぜなら、この作業は失敗する可能性が高いです。(俺だけ?)
あと、時間が結構かかると思うからです。
(別サイトで構築しておいて、後でネームサーバーを移すなど、アクセス数への対策を行なっているなら別です。)
(でも、そこまでできているレベルの玄人さんは、この作業はサクッと終わりそうな気もします。)

 

4.事前準備

(1)バックアップを取る

バックアップについては、この記事では解説しません。
僕はBackWPupをいうプラグインを使っています。
直前にブログをバックアップして、手元に保存しておく作業が絶対に必要だと思います。
(実際、今回失敗して、バックアップから2回も復旧しましたw)

BackWPup
https://wordpress.org/plugins/backwpup/

(2)プラグインの停止

プラグイン停止しましょう。
特に考えることなく、全部停止すればOKです。
あとでまた復活させればいいです。

(3)FTPソフトを準備する

MacユーザーにおすすめFTPソフト

僕はCyberDuckを使っています。
使い方はこの記事では解説しません。

CyberDuck
https://cyberduck.io

ファイルの編集の仕方を慣れておく

基本的なことですが、この先、サーバー操作を頻繁に繰り返します。
これに慣れるのが大事だと思います。

CyberDuckのアプリ上でEditボタンを押します。
規定のテキゥトエディタ(僕の場合Atom2)が開きます。
編集が終わったら、保存して閉じます。
保存して閉じると、自動的に更新されています。
(失敗したら、バックアップから復元すれば大丈夫です)

このようにアプリ上で編集していかないと、面倒すぎるので、絶対にアプリからやった方がいいです。

ダウンロードしてやってると、htaccessのリネーム作業とかめんどい
Htaccessは「.htaccess」といった形のファイルです。
もし、ダウンロードして、テキストファイル形式で編集して…とかやっていると、サーバー上で拡張子を直さないといけないです。
なので、FTPアプリ上で編集(CyberDuck+Atom2)した方がいいです。

 

5.wp-config.phpの1段階目の編集(一文加える)

では、まずwp-config.phpを編集していきます。
これは簡単です。

ネットワーク設定メニュー項目を有効にするには、まずwp-config.phpファイル内のマルチサイトを有効にする必要があります。
開いてwp-config.phpの/* That's all, stop editing! Happy blogging. */の上の行に追加します。
https://codex.wordpress.org/Create_A_Networkより引用

/ *マルチサイトを許可* /
define( 'WP_ALLOW_MULTISITE', true);

上の1行を、「/* That's all, stop editing! Happy blogging. */」の上に追加すればOKです。
(カンマ(,)が文字化けしていたのを訂正しました。)

 

6.WordPress側が自動生成してくれた指定コードが親切に出現する

wp-config.phpに1行加えたら、WordPressにログインし直します。

ツール>サイトネットワークの設置を押します。
ネットワークのタイトルを聞かれるので、名前をつけて、インストールを押します。
すると、wp-config.phpと.htaccessの編集についての説明が出ます。

 

7.wp-config.phpの2段階目の編集

wp-config.phpにさらに文章を追加するように出てきます。

ここでの文章は、あなたの状況に沿ったものを用意します。

また、WordPressに「これに書き換えてください」と提示される内容では、上手くいかない人もいます。
僕は上手くいきませんでした

説明がかなり長いので、下の方に詳しく書きました。

wp-config.phpのユニーク認証キーに関するサジェストが出た場合

ユニーク認証キーが wp-config.php ファイルに見つかりません。 インストールをさらに安全にするため、次を追加するとよいでしょう

無視しました

 

8..htaccessの編集

htacessの内容ですが、こちらも、人によって変わってきます。

説明がかなり長いので、下の方に詳しく書きました。

htaccessのifmoduleも消してイイの?

>消さないです。

<IfModule mod_rewrite.c>
これは利用環境でmod_rewriteが利用できるかどうかを確認しています。
https://html-coding.co.jp/knowhow/tips/wp_modrewrite/より引用

 

9.Wordpressに戻ると参加サイト欄が増えてる

2つの文章を編集して、再度ログインします。
すると、参加サイトという欄が増えています。

サイトネットワーク>サイトと進み、ここからサイトを追加できます。

「サイトネットワーク>サイト」にアクセスできない場合
404エラーになす。

URL構造を確認してみてくだあし。
/wp/を付け足したらアクセスできる場合、途中過程で間違えている可能性あります。
(僕もこうなりました(汗))

特に.htaccessの編集を間違えている可能性が高いので、やり直しをオススメです。

http://xxxxxxxxxxxxxxxx.com/wp/wp-admin/network/sites.php
ここにアクセスしたら、サイトって画面に行けるって意味です。
つまり「/wp/」の文字を入れ忘れてるんですね。

 

10.サイト名、メルアドなどを入力

入力します。

 

11.URL構造を確認

(1)新しく作ったサイト部分のURL構造を確認

URL構造がどうなってるか、確認しましょう。

「http://xxxxxxxxxxxxxx.com/en/testpost/」

きちんとできていますね。

(2)元のサイト部分のURL構造を確認

ここで、元のブログのURL構造を見ると、http://xxxxxxx.com/blog/2018/09/07/sample-postというURL構造に勝手に置き換わってました。
見落としていたので、焦りました。

「サイトを編集」からPermalink Structureを直す

サイトタブから、元のブログの「サイトを編集」へ、進みます。
Permalink Structureの部分に「blog/%year%%monthnum%/%day%/%postname%」に自動で変更されてしまっています。

とりあえず「blog」部分はいらないと思うので、ここで消しました。

その後は、設定>パーマリンク設定から、いつものようにURL構造を選べます。
URL構造については、また深い話になるので、この記事では説明はしないです。
少し言うと、SEO的に「http://xxxxxxx.com/%postname%/」がベストだとは思いますが、僕はこのブログは「http://xxxxxxx.com/?p=123」で書いていたので、とりあえず、今日はもう深夜なので「/?p=123」に設定して、あとでリダイレクト設定などでゆっくり変更したいと思います。

 

12.完了

 


 

13.自分の状況にあったwp-config.phpとhtaccessの作り方

上でも、話したwp-config.phpとhtaccessのファイルは、自分の状況にあったものを作る必要があります。

特にこんな状況などです。

・サブディレクトリ型を選びたい
・公開後1カ月以上経過したブログは、サブディレクトリ型を選べないって本当?2018年の今もまだダメなの?まじ?
・サブドメイン型を選びたい
・サーバーの特殊な場所にWordPressをインストールしちゃった
・自分がWordPressインストールした場所がよくわからない

僕は、サブディレクトリ型を選びたくて、調べました。
一緒に詳しく見ていきましょう。
(結論から言うと、サブディレクトリ型も大丈夫です)

URL構造のワード説明
サブドメイン型…https://en.sample.com
サブディレクトリー型…https://sample.com/en

今回、僕は、サブディレクトリー型にしたい

(1)公式の説明ではたしかにサブディレクトリ型は選べないと書いてある

背一定画面で、公開1ヶ月以上経っているサイトは、サブドメイン型しか選択できないと出ます。

これは、回避できないのでしょうか?
サブドメイン型は絶対に嫌なんですが…

(2)こんな時は「サブディレクトリ型」は無理

You cannot choose Sub-directory Install (for a path-based network) if your existing WordPress installation has been set up for more than a month, due to issues with existing permalinks.
(This problem will be fixed in a future version. See Switching network types for more information.)
https://codex.wordpress.org/Before_You_Create_A_Network#WordPress_Settings_Requirements
2018.09.07閲覧

翻訳します。

既存のパーマリンクの問題のために、1ヶ月以上利用しているWordPressで、サブディレクトリ型を選ぶことはできません。
(この問題は、将来のバージョンで修正されます。詳細については、ネットワークタイプの切り替えを参照してください)。

ネットワークタイプの切り替えを参照してください
とあるので読んでみましょう。

(3)ネットワークタイプの切り替えページでの説明

公式の奥の奥に書いてありました。

ネットワークタイプの切り替え
Multisiteのドメインベース(サブドメイン)インストールとパスベース(サブディレクトリ)インストールを切り替えることができます。WordPressを1ヶ月以上インストールしていて、ネットワークをアクティブ化しようとすると、サブドメインサイトを使用するように指示されます。
これは、ページ(例:example.com/pagename)とサイト(example.com/sitenameなど)の間に矛盾がないようにするためです。
この問題が発生しないと確信している場合は、初期設定を完了した後でこれを変更することができます。
https://codex.wordpress.org/Migrating_Multiple_Blogs_into_WordPress_3.0_Multisiteより引用

やはり1ヶ月以上経っているサイトは、初めはサブドメインサイト型を使えと指示されます。
(しかも理由が、URLが被ったりしないため、って…そんなん自己責任ですやん…)
しかし、初期設定を完了した後に、変更はできるとのことです。

どっちなの??

てか、どっちなの?
はっきりしてよ
(変更できます)

(4)サブディレクトリ型を選択するために、改変していく

では、その初期設定完了後の操作について見ていきます。

A.wp-config.phpファイルで「SUBDOMAIN_INSTALL:」の項目を変更する

サブディレクトリ型にしたい場合は、画面上の指示は無視して、このように書き換えて作成します。

ドメインベースのネットワーク(サブドメインインストール)の場合

define( 'SUBDOMAIN_INSTALL'、true);

パスベースのネットワーク(サブディレクトリインストール)の場合

define( 'SUBDOMAIN_INSTALL'、false);

https://codex.wordpress.org/Multisite_Network_Administration#Switching_network_typesより引用

B.htaccess、新しい設定に変更する

htacessについては、その人の状況によって、書き換えが必要とのことです。

つまり、もう一度、整理します。

分岐点1
WordpressがWebサイトのルートフォルダにインストールされている場合
WordpressがWebサイトのルートフォルダにインストールされていない場合
あなたはどっち?

>>ルートフォルダにない場合、つまり、
独自のフォルダにWordPressがある場合は、RewriteBaseの値を適切に変更する必要があります。
独自のフォルダにWordPressがある場合は、RewriteBaseの値を適切に変更する必要があります。
独自のフォルダにWordPressがある場合は、RewriteBaseの値を適切に変更する必要があります。

大事なことなので3回言いました。
下でも説明しています。

分岐点2
サブドメイン型にしたい…https://en.sample.com
サブディレクトリー型にしたい…https://sample.com/en
あなたはどっち?

>>さっきから書いてるように、いろいろ違います。

分岐点3
WordPressのバージョン
3.0から3.4.2
3.5以上
あなたはどっち?

>>執筆時点で、僕はWordPress 4.9.8です。
これはみんな、だいたい3.5以上だと思います。
(公式のWordPress 3.5+というのは、日本語で3.5以上という意味です。)

おまけ
どこのhtaccessを書き換えるの?
WordpressがWebサイトのルートフォルダにインストールされている場合で、ルートフォルダにあるhtaccess
WordpressがWebサイトのルートフォルダにインストールされていない場合で、ルートフォルダにあるhtaccess
WordpressがWebサイトのルートフォルダにインストールされていない場合で、wpフォルダにあるhtaccess
どれ?

>>これも毎回、迷うので、補足・整理しておきましょう
編集するのは、WordpressがWebサイトのルートフォルダにインストールされていない場合は、ルートフォルダにあるhtaccessです。
つまり、どんな時でも、htaccessはルートフォルダのものを編集します。

なので…

ってか、道のり長いですね

僕の場合、
(1)「WordpressがWebサイトのルートフォルダにインストールされていない場合」で、
(2)「サブディレクトリー型にしたい」で
(3)「WordPress 4.9.8」
です。

その条件で、ここのコードを参照します。

マルチサイトネットワークの管理
https://codex.wordpress.org/Multisite_Network_Administration#Switching_network_types

参照します…と書きましたが、この公式サイトにも実は全部は載ってないんです。
(もう、本当に不親切じゃね、マジで)

需要が高そうだと思う、僕と同じ条件のものを載せておきます。
僕と同じ条件だと.htaccessファイルは以下のようになると思います。

RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

https://codex.wordpress.org/Multisite_Network_Administration#Switching_network_typesより参照して編集

※繰り返しますが、このコードは、あなたの状況によって、各自違ってきます。

「独自のフォルダにWordPressがある場合は、RewriteBaseの値を適切に変更する必要がある」について

補足すると、上のコードは、リンクした公式に載っているコードで、「RewriteBaseの値を適切に変更」しています。
僕は、ルートフォルダ>wpという名前のフォルダに、WordPressをインストールしてあります。
なので、「RewriteBase /wp/」と書き換えています。
そこに注意です。

 

以下、特殊状況について、リサーチしたものも載せておきます。

14.こんな時は「サブドメイン型」は無理

サブドメイン型にも制約があります。
一応書いておきます。

ローカルホストで実行してる時はサブドメイン型は無理

ローカルホストで実行してるような特殊な場合はサブドメイン型はダメということらしいです。

設定要件に従って、「127.0.0.1 もしくは、 localhostで実行しているとき」はサブディレクトリからサブドメインに切り替えることはできません。
これにより、Cookieの処理のためにルートサイトでreauth = 1の無限ループが発生する可能性があります。
https://codex.wordpress.org/Multisite_Network_Administration#Switching_network_typesより引用

127.0.0.1とは
127.0.0.1はローカル・ループバック・アドレスと呼ばれ、自分自身を指す特別なIPアドレスである。
「 localhost」という名前でも参照できる。
自分自身の上で動作しているサービスへ接続する場合は、このIPアドレスを利用できる。
http://www.atmarkit.co.jp/ait/articles/0610/14/news021.htmlより引用

 

15.サーバーに条件があるって本当?

Multisiteでは、
mod_rewriteをApacheサーバーにロードし、
.htaccessファイルでサポートし、
Options FollowSymLinksを既に有効にしているか、
少なくとも永続的に無効にしないでください。

サーバー構成にアクセスできる場合は、
.htaccessファイルではなくディレクトリセクションを使用できます。
また、ドメインの仮想ホストに対して、httpd.confファイルの "AllowOverride"が "All"または "Options All"に設定されている
ことを確認してください。

あなたのウェブホストにこれに関する詳細情報を尋ねることができます。
https://codex.wordpress.org/Before_You_Create_A_Network#WordPress_Settings_Requirementsより引用

modや.htaccessはわかるんですが、他はわからないのでググってみます。

 

16.マルチサイトにした後、サーバーお引越しできる?

マルチサイトは、データベース自体がサーバー名とフォルダの場所を複数参照しているため、やや複雑になります。
同じドメイン名の新しいサーバーに移動するだけであれば、従来のインストールと同じように、ファイルとデータベースをコピーすることができます。
https://codex.wordpress.org/Moving_WordPress#Moving_WordPress_Multisite

 

まとめ

今回は、WordPressのマルチサイト化に失敗する原因と成功する方法というテーマで書いてきました。

おさらいすると、マルチサイトとはブログを集めたもので、マルチサイトにする理由は多言語サイト作成でした。
重要なサイトでいきなり試さない、事前準備について、の説明をしました。

実際の作業の流れは、wp-config.phpの1段階目の編集、WordPress側が自動生成してくれた指定コードの出現。
wp-config.phpの2段階目の編集、.htaccessの編集。
その後、Wordpressに戻ると参加サイト欄が増えてる、サイト名、メルアドなどを入力、URL構造を確認
これで完了でした。

ただし、自分の状況にあったwp-config.phpとhtaccessの作り方が難しいので、詳しく説明しました。

補足として、こんな時は「サブドメイン型」は無理、サーバー条件、サーバーお引越しなどについても書きました。

いやあ、長かったです。
試行錯誤したり、失敗したりしたので、長く感じただけかもしれません。
きちんと、方法が整理できていればサクッとできるかもしれません。
これで、多言語ブログをガンガン攻めていけそうです。

-WordPress, 多言語サイト