かなり前にSSLが標準化しましたが、管理しているサイトでSSL化していないサイトはないでしょうか?
これからSSL化するサイトでも既にSSL化しているサイトでも、きちんとhttpからhttpsへのリダイレクトやwwwのあり・なしの統一は出来ていますでしょうか?
きちんと対応していないと、ブラウザから警告が表示されてユーザーの離脱や、検索エンジンの評価の分散につながってしまいます。今回は、.htaccessを使用したhttpsへのリダイレクトとwwwあり・なし統一の方法について解説していきます。
※今回紹介する方法は、記述を間違ってしまうとエラーが出てしまう場合がありますのでバックアップを必ず取るようにしてください。
なぜ.htaccessでリダイレクトする必要があるのか
まずはじめに、なぜリダイレクトが必要なのかという事ですが、URLがhttpやhttps、wwwあり・なしなどで検索エンジンに登録されるURLが複数出来てしまう場合、同じ内容だとしても別サイトとみなされてサイトの評価が分散してしまいます。この、URLを統一する事を「URLの正規化」と言います。
また、検索エンジンへのサイトURLの登録がhttpのままだと評価が下がり、表示順位も下がります。
URLがhttpのサイトにアクセスした際にも、ブラウザ上で警告が出てしまったりユーザーの離脱にもつなってしまいます。
これらを防ぐ為にも、.htaccessを使用したリダイレクトの内容を理解し、正しく設定してあげる事が必要です。
※レンタルサーバー等で.htaccessの設置が出来ない場合もありますので、その場合はサーバー会社にてご確認ください。
.htaccessでリダイレクトする際の基本的な記述
.htaccessでリダイレクトをする際は、「.htaccess」というファイルに記述していきます。
このファイルは通常隠しファイル(不可視ファイル)となっている為、使用しているデバイスの設定を隠しファイルを見えるように設定してあげる必要があります。
Windowsの場合は「フォルダーオプション」から、Macの場合は「command」+「shift」+「.」で表示可能です。
続いて.htaccessファイルへの記述ですが、以下のコードをご覧ください。
<IfModule mod_rewrite.c>
RewriteEngine on
#ここにリダイレクトの内容を記述
</IfModule>
WordPressを利用している方であれば見た事がある記述かもしれませんが、「IfModule mod_rewrite.c」とい部分は利用しているサーバーで「mod_rewrite」が利用できるのであればというIf文になっています。
「RewriteEngine on」はリダイレクト機能を有効化する為の記述となります。
最近のレンタルサーバーでは大体「mod_rewrite」は有効になっているので、このIf文は記述しなくても問題無い場合も多いですが、今回はこのIf文の中に記述していきます。
記述するリダイレクトは、301リダイレクトで行います。301は恒久的な移転を示すステータスとなります。
wwwありで統一する場合
wwwの有無はSEO的には影響はありませんのでどちらでも大丈夫です。
無い方がURLが短くなりますので、個人的には無い方がいいと思っています。
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
※レンタルサーバー等で、管理画面にて設定出来る場合もありますので、その場合は記述しなくでも大丈夫です。
wwwなしで統一する場合
wwwの有無はSEO的には影響はありませんのでどちらでも大丈夫です。
無い方がURLが短くなりますので、個人的には無い方がいいと思っています。
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
※レンタルサーバー等で、管理画面にて設定出来る場合もありますので、その場合は記述しなくでも大丈夫です。
httpsへリダイレクトする
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
※レンタルサーバー等で、管理画面にて設定出来る場合もありますので、その場合は記述しなくでも大丈夫です。
index.html、index.phpなしに統一する
「https://ドメイン名/index.html」など、URLが複数になってしまっている場合には以下のコードで対応可能です。
RewriteCond %{THE_REQUEST} ^.*/index.(html|php)
RewriteRule ^(.*)index.(html|php)$ https://%{HTTP_HOST}/$1 [R=301,L]
まとめて記述した場合
上記の内容(wwwの有無、httpsへのリダイレクト、index.htmlやindex.phpのリダイレクト)をまとめて記述した場合は以下のようになります。
<IfModule mod_rewrite.c>
RewriteEngine on
# wwwなしに統一
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# httpsへのリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# index.html、index.phpなしに統一
RewriteCond %{THE_REQUEST} ^.*/index.(html|php)
RewriteRule ^(.*)index.(html|php)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
WordPressの場合の注意点
WordPressを使用している場合はWordpressインストール時に記述されている「IfModule mod_rewrite.c」があるかと思います。この部分より上に記述するようにしてください。
また、サイトURLのhttpsへの変更やwwwあり・なしの変更をWordpress管理画面にも反映してあげる必要があります。
管理画面内の「設定」→「一般」から、
- WordPressアドレス
- サイトアドレス
上記2か所も変更する必要がありますので注意してください。
さいごに
いかがでしたでしょうか。
今回は、.htaccessでhttpsへのリダイレクトとwwwあり・なし統一の方法について解説しました。
SEO的にもしっかりと統一した方がいいので、忘れずに設定するようにしてください。