.htaccessで301リダイレクトをかけてWordPressサイトのURLを正規化する方法
WordPressで作成したブログやサイトって、一見はじめから正規化されている感じがします。
www有り無しは「サイトアドレス」に設定した方に飛んでくれますよね。httpsかhttpかも同じようにサイトアドレスに飛んでくれます。どっこい、httpsかhttpかはトップページしかリダイレクトしてくれません。サイトアドレスにhttps://~と指定しておいても、下層ページの場合はhttpでもアクセスできてしまいます。
という事で、今回はワードプレスサイト(ブログ)の『http』 or 『https』を、.htaccessファイルに301リダイレクトの記述をして正規化したいと思います。
~ 目次 ~
ちなみにURLの正規化って何?
このページにたどり着いた方は、ある程度ご存知だと思いますが、一応書いておきます。「んなこたぁ、どうでもいい」という方は読み飛ばしてください。
アクセスできるURLは主に4通りある
例えば、このブログのトップページのURLは『https://whitewood-hp.com/web-tips』のつもりで制作しています。WordPressの「設定->一般」でも「サイトドメイン(URL)」は『https://whitewood-hp.com/web-tips』としてあります。
実際に、このURLにアクセスすればブラウザーで閲覧できます。
しかし、以下のようなURLでアクセスしても同じコンテンツが表示されます。
- http://www.whitewood-hp.com/web-tips(http + www有り)
- http://whitewood-hp.com/web-tips(http + www無し)
- https://www.whitewood-hp.com/web-tips(https + www有り)
- https://whitewood-hp.com/web-tips(https + www無し)
URLパラメータなどを考慮するとアクセスできるURLは無間に広がっていきますが、主にURLの正規化というのは上の4パターンのURLの中から使用するURLを1つに統一する事を言います。
複数のURLがあってはマズいのか?
マズいとは言いませんが、SEOを考えるのであれば必ずやっておきたいところです。
同じコンテンツが表示されるURLが複数ある事で、検索エンジンがサイトを評価する時に、その評価が各URLに分散してしまうと言われています。あるいは重複コンテンツ扱いを受けてしまうかもしれません。
URLの正規化(一本化)の目的は、検索エンジンに対して使用するURLを一本化して明示する事です。
どのタイプのURLがいいのか?
どれでも問題ありません。私は5~6年前までは「www付きの方が良い」という風のウワサを信じてwww付きを多用していましたが、最近は短くスッキリとしたwww無しを好んで使っています。WEB全体でも比較的新しいサイトは、www無しを使用している場合が多いように感じます。
httpかhttpsかは、SSL化が強く推奨されている現在、httpsが望ましいでしょう。ですが、これは先にSSL化をしていなければいけませんので、サイトの状況に合わせて選びましょう。
URLの正規化で大事なのは、1つに絞るという事です。
WordPressのデフォルトの.htaccess
初期状態のWordPressの.htaccessファイルを開いてみると中はこんな感じ(Ver 4.9.7現在)です。
1 2 3 4 5 6 7 8 9 10 |
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
.htaccessファイルの『#』から始まる行はコメントアウト(内容としては無効な、コード内のメモ書きのようなもの)です。BIGIN WordPressとEND WordPressというコメントアウトが最初と最後にありますね。この中はワードプレスによって書き換えされます。今後ずっと使うURLに関する事なので、「気が付いたら消されていた…」なんて事は避けたいですね。オリジナルの記述をする場合は、必ずコメントアウトの行(BIGINとENDの行)の外側に書きましょう。
その他、ゴチャゴチャと書いた覚えのない記述がある場合は、おそらくプラグインによって書き込まれています。WordPressの記述と同様に、使用しているプラグイン名などが『#』から始まる行に書かれていると思います。このBIGINとENDの間もプラグインによって書き換えられる恐れがあるので、やはり外側に書くように注意しましょう。
正規化のためのコード
書き方は何通りかあるかと思いますが、以下のコードをデフォルトの記述内容の上に貼り付けて下さい。
.htaccessファイルの記述をミスすると、サイトが表示されないなど、大きなトラブルになる事があります。修正すれば戻りますが、不安な方は作業前に記述してあった内容を保存しておく事をお勧めします。
手順
- 【必ず最初に!】WordPress管理画面の「設定->一般->サイトのURL」が、メインで使用するURLになっている事を確認してください。WordPressでは、www有りor無しは、ここで選んだ方に自動的にリダイレクトされます。
- ファイルをアップロードして下さい。
httpsとhttpの正規化の注意点
URLのリダイレクトは、http接続のサイトをhttps(あるいは逆)に変更するものではありません。あくまで正しいURLに導くためのものです。設置サーバーの環境を無視してリダイレクトの記述をすると、WordPressの管理画面にログインできなくなったりする事があります。
⇒サイトのURLを変更した後WordPressにログインできない時に修正する方法
https://~のURLに正規化
※SSL化していないサイトでは記述しないで下さい。
1 2 3 4 5 6 |
# httpからhttpsにリダイレクト <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule> |
さくらインターネットの場合
2019/3/22追記です。さくらインターネットでhttpsにリダイレクトしようとしたら、上記のコードでは上手くリダイレクトされませんでした。さらに、さくらインターネットのサポートページのコードでも上手くリダイレクトされず、少々ハマりました。
1 2 3 4 5 |
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} !on RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule> |
(SSL化プラグインを使用した時に記述される内容のコピーですが…)上の書き方で、無事に下層ページもリダイレクトされました。httpで長く運用していたサイトのSSL化ならまだしも、新しく作成するサイトのURLの正規化のためだけにプラグインを入れたくないですもんね。
http://~のURLに正規化
※SSLサイトでは記述しないで下さい。
1 2 3 4 5 6 |
# httpsからhttpにリダイレクト <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule> |
301リダイレクトのチェック
「301リダイレクト チェック」などとググれば色々なツールが出てきますが、私はこちらで確認しました。
⇒リダイレクトチェック|SEOツール【ohotuku.jp】
リダイレクト元のURLを入力してみて、ご希望のURLに転送されていればOKです。リダイレクトの設定は間違えていたら大変です。よく確認してください。
最後に
ちゃんと希望のURLに転送(301リダイレクト)されたでしょうか?
wwwの有り or 無しの301リダイレクトも.htaccessに記述できますが、基本的にサイトアドレスをちゃんと指定すれば必要ないはずです。書いておいてもサイト表示上の問題は出ませんが、WordPressサイトの場合Google Search Consoleでリダイレクト元のプロパティにエラーが出る事があるようです。気持ち悪いのでやめておきましょう。