Studio で作られたサイトを、WordPress(クラシックテーマ)に移行しました。ドメインはそのままで、ページの構成もほぼ同じです。
作業してみると、Studio ならではのつまずきどころが3つありました。コードを書き出す機能がないこと、一覧ページにページネーションがないこと、そしてURLに大文字が使われていたことです。特に3つ目は「ドメインもページも同じだからリダイレクトはいらない」と思っていると見落としやすいポイントです。
この記事では、実際に進めた順番に沿って、移行の手順と注意点をまとめます。
移行の流れ
- Studio のページを HTML として保存する
- HTML をもとにクラシックテーマを作り、足りない機能を WordPress で追加する
- 旧URLの一覧を作り、URLが変わるページに301リダイレクトを設定する
- 切り替え後に、旧URLの転送やリンク切れを確認する
1. Studio のページを HTML として保存する
Studio には、HTML・CSS・JavaScript を書き出すエクスポート機能がありません。そこで、ブラウザの保存機能を使って、公開中のページを HTML として保存しました。
- 公開中のページを開き、ページ上部の何もない場所で右クリックする
- 「別名でページを保存」(ブラウザによっては「名前を付けて保存」)を選ぶ
- 保存の形式を「ウェブページ、完全」にして保存する
これで、HTMLファイルと、画像などが入ったアセットフォルダがダウンロードされます。ページの数だけ、この作業を繰り返します。
保存した HTML を使うときの注意
- Studio 独自の機能は動かない:CMS やフォームなど、Studio のシステムで動いている機能は連動しなくなります。お問い合わせフォームやブログ一覧は、WordPress 側で作り直す前提で考えます
- Vue.js のコードを削除する:保存した HTML には、Studio のページを動かすための Vue.js 関連のコードが含まれています。テーマに組み込むときは、これらを1つずつ削除して、必要な見た目と構造だけを残していきます
- 持ち出せるのは公開されている見た目だけ:あくまで「表示されているページ」を保存する方法なので、Studio の編集データそのものが移せるわけではありません
2. クラシックテーマに組み込み、足りない機能を追加する
保存した HTML から Vue.js のコードを取り除き、ヘッダー・フッター・各ページのテンプレートに分けてクラシックテーマ(PHP のテンプレートで作るテーマ)にしていきました。CMS で管理していたブログやお知らせは WordPress の投稿に、フォームは WordPress のフォームプラグインに置き換えます。
ページネーションは WordPress の機能で追加する
Studio にはページネーション(「1 2 3 … 次へ」のようなページ送り)の機能がありません。ブログやお知らせの一覧は、WordPress に移すタイミングで次の2つで追加しました。
- 1ページに表示する件数:管理画面の「設定 → 表示設定 → 1ページに表示する最大投稿数」で決めます
- ページ送りの表示:一覧ページのテンプレート(
index.phpやarchive.phpなど)の記事ループの後に、ページ送りを出力する関数を入れます
<?php the_posts_pagination(); ?>
2ページ目以降は /page/2/ のようなURLになります。旧サイトにはなかったURLなのでリダイレクトは必要ありませんが、一覧ページそのもののURLが Studio 時代から変わる場合は、次の章の301リダイレクトを忘れずに設定します。
3. URLの大文字・小文字が変わるなら301リダイレクトする
旧サイトのURLを一覧にしてみると、/About や /Service のように頭文字が大文字のURLが混ざっていました。WordPress は投稿やページのスラッグを基本的に小文字に変換して保存するので、移行すると /about や /service になります。
大文字と小文字が違うと、別のURLになる
URLのパス部分(ドメインより後ろ)は、大文字と小文字を区別します。Google の John Mueller 氏も、URLは大文字・小文字を区別するので /About と /about は別のURLとして扱われる、と説明しています。何もしないで切り替えると、次のようなことが起こります。
- 検索結果の評価が引き継がれない:Google にとっては、旧URLが消えて新しいURLが現れた状態になります
- ブックマークや外部リンクが404になる:取引先のサイトやSNS、名刺のQRコードなどに旧URLが残っていると、リンク切れになります
- 同じ内容のURLが2つできることがある:環境によっては旧URLでもページが表示されてしまい、大文字版と小文字版の重複になります
URLが変わるページは、旧URLから新URLへ 301リダイレクト(恒久的な転送)を設定します。301にしておけば、検索エンジンにも「このページは引っ越しました」と伝わり、評価の引き継ぎが期待できます。
方法1:.htaccess に書く
Apache 系のサーバー(多くのレンタルサーバー)なら、WordPress の .htaccess に次のように書けます。WordPress が自動で書き換える # BEGIN WordPress〜# END WordPress の範囲の外(上)に書くのがポイントです。範囲の中に書くと、パーマリンク設定を保存したときなどに消えてしまいます。
# Studio時代の旧URL → WordPressの新URL
RedirectMatch 301 ^/About/?$ /about/
RedirectMatch 301 ^/Service/?$ /service/
RedirectMatch 301 ^/Contact/?$ /contact/
RedirectMatch の正規表現は大文字・小文字を区別するので、^/About/?$ は /About にだけ一致し、転送先の /about/ には一致しません。ここで「大文字・小文字を区別しない」設定((?i) や mod_rewrite の [NC] フラグ)を付けてしまうと、転送先の /about/ にも一致して、リダイレクトのループになるので注意してください。
方法2:Redirection プラグインを使う
.htaccess を触りたくない場合や、お客さん自身に管理してもらう場合は、WordPress のプラグイン「Redirection」が便利です。管理画面から旧URLと新URLを登録するだけで301リダイレクトを設定でき、404になったURLの記録も確認できます。
「全部小文字にする」設定は .htaccess だけではできない
「大文字のURLをすべて小文字に転送する」方法として、Apache の RewriteMap と int:tolower を使う例もよく見かけます。
RewriteMap lc int:tolower
RewriteRule "(.*)" "${lc:$1}" [R=301]
ただし Apache の公式ドキュメントによると、RewriteMap はサーバー全体またはバーチャルホストの設定でしか宣言できず、.htaccess には書けません。共有のレンタルサーバーではサーバー全体の設定を触れないことが多いので、この方法は基本的に使えないと考えておいたほうがいいです。ページ数がそれほど多くなければ、旧URLを1つずつ書き出して転送するのが確実です。
4. 切り替えの前後に確認すること
- 旧サイトのURLを一覧にする:サイトマップ、Google Search Console の「ページ」レポート、アクセス解析のページ一覧などから、実際に使われていたURLを洗い出します
- 新URLと1対1で対応表を作る:大文字・小文字、末尾のスラッシュ、ブログ記事のURLの形式(カテゴリを含むかどうか)などの違いをチェックします
- 301リダイレクトを設定する:URLが変わるものはすべて転送します。対応するページがないものは、近い内容のページか一覧ページへ
- サイト内のリンクを新URLにそろえる:保存した HTML から作ったテンプレートには旧URLのリンクが残りやすいので、メニューや本文のリンクを新URLに直します
- 切り替え後に実際に開いて確認する:旧URLを開いて、301で新URLに移動するかを確認します。旧URLのままページが200で表示される場合は、重複URLになっているので設定を見直します
- Search Console でサイトマップを送信する:WordPress のサイトマップを送信し、しばらくはクロールのエラーや404を確認します
リダイレクトの確認は、ターミナルで curl -I を使うとステータスコードと転送先が一目で分かります。
curl -I https://example.com/About
HTTP/1.1 301 Moved Permanently
Location: https://example.com/about/
まとめ
- Studio にはコードのエクスポート機能がないので、ブラウザの「ウェブページ、完全」で保存し、Vue.js のコードを削除してテーマに組み込む
- CMS・フォームなど Studio 独自の機能は動かないので、WordPress 側で作り直す
- Studio にはページネーションがないので、件数の設定と
the_posts_pagination()で追加する - ドメインが同じでも、URLの大文字・小文字が変わるなら別のURL。
.htaccessのRedirectMatchか Redirection プラグインで301リダイレクトする - 切り替え後は、旧URLを実際に開いて301になっているかを確認する
「ドメインもページも同じだから大丈夫」と思っていても、URLを1文字ずつ見比べると違いが見つかることがあります。HTMLを保存するタイミングで旧URLの一覧も作っておくと、移行全体がスムーズに進みます。
