htaccessでURLの正規化!SSL (https)とwwwあり/なしの設定方法

「htaccess」でURLの正規化!SSL (https)とwwwあり/なし

ブログやホームページのURL統一化(正規化)は検索エンジンのクローラービリティの向上に繋がり、検索順位にも影響を受ける可能性のある大事な項目です。ここではURL統一化(正規化)の設定方法を紹介。

1)URL正規化とは

ブログやホームページのURLのwwwあり/なし、/index.htmlの有無、SSL化によるhttp/httpsの統一化を行うべく検索エンジンに宣言することをURL正規化といいます。初めての方は何のこと?って感じかもしれませんがこの後詳しく説明しますので「URLを統一する」という認識だけで大丈夫です。

「wwwあり/なし」について

ブログやホームページで独自ドメインを使用する場合、例えば「sample.com」のドメインを取得し使用する場合、「www.sample.com / sample.com」の2つのURLが使用可能。デフォルトでは、wwwあり/なしどちらのURLでもサイトに接続可能であり同じサイトを意味しているので、一見、特に問題はないように感じますが、少し見方を変えると同じ内容でWWWありなしの2つのアドレスを持つサイトが存在するということになります。このように重複するURLを統一(正規化)しましょうというわけなんです。なかにはミラーサイトとして検索エンジンからペナルティを受ける可能性も!?なんてコメントを見たこともありますが、流石にこのケースではないと考えますが、URL正規化は検索エンジンのクローラビリティ向上に貢献すると共に、URLが異なると別のページとみなされページの評価が分散されるなど検索順位に影響する可能性も無いとは言いきれませんので正規化しておきたい。

なお、wwwのありなしのどちらにする方が良いか?という点について、どちらでも好きな方で選んでOK!です。SEO効果で優位性の差はありませんし、この後に記載の設定を行えば、仮にサイト訪問者がURLを直接入力する場合でも、wwwの入力有無に関わらずどちらでも正規化URLに誘導できますので余計な心配をする必要もありません。

SSL化(http/https)について

SSL化とは暗号化通信のことで、インターネット上でランダムな文字列に暗号化し通信することができます。改ざん、なりすまし、フィッシング攻撃対策に有効です。以前は、一般的なサイトの場合メールフォーム、ショッピングカートなど個人情報の入力が行われるページに対してのみ、SSL化されておりましたが(一部では暗号化されていない小規模サイトも見かけてました)、Googleでは利用者に安心して利用してもらうためにSSL化の重要性を伝えるべく、全てのページがSSL化されたサイトをSEOの観点からも評価するようになったこと、これによりレンタルサーバー会社のSSL化サービスが充実し、低価格化(無料もあり)したことで、一気にSSL化が加速。と言うわけで、SSL化(http/https)は今や独自ドメインでサイト運用する方にとっては必須項目です。

ブラウザーでURLの表示見ていただければお分かりかと思いますが、SSL化されていないサイトやページはhttp://となりURLの先頭には「保護されていない通信」と表示されます。利用者からの印象も悪いです。SSL化されたサイト/ページはhttps://となっています。またURLの先頭にカギマークが表示されているのですぐにわかります。デフォルトではどちらでもアクセスできますので、これはよくありませんのでURL正規化を行う必要があります。
SSL化が未だの方は無料で使える「独自SSL化 (https)の設定方法」 Let’s Encrypt-スターサーバー編の記事をご覧ください、

index.htmlについて

HTMLサイトの場合に、トップページを表示している際にURLが(例:https://sample.com/index.html)というよう形で「index.html」、PHPで制作されている場合「index.php」と表示されているのをたまに見かけます。この場合も同様ことが言えますので、URL正規化します。


https://sample.com
https://sample.com/index.html
これは両方ともに同じトップページですがURLは2つ存在。

2)URL正規化の設定方法

「.htaccess」ファイルを使って設定する方法を案内します。細かな説明はしませんので基本的には以下をコピペでご使用いただいて構いません。(コピペは自己責任でお願いします。)

「.htaccess(ドットエイチティアクセス)」はリダイレクトによりサイト・ページ引っ越しやドメイン変更などの際に旧サイトから新しい移転先へ自動的に訪問者を転送することができます。URL正規化もこのリダイレクトを使います。他にもBASIC認証、IP制限の設定も可能。なお、テキストエディタなどで.htaccessを作成しドメイン直下(ルートフォルダー)に設置します。WordPressの場合はルートフォルダに.htaccessのファイルがありますのでそちらを追加変更します。 
※ .htaccessには拡張子は付きません。

設定時の注意点

.htaccessは、些細な記述ミスなどでもサイトにアクセスできなくなる恐れがありますので、ミスがないように注意し慎重に編集することが大事です。また編集を行う前に必ずサイトの.htaccessをバックアップしておくようにしてください。

.htaccessの最後は空行にすること
.htaccessの最後の行は空行としなければなりません。(リダイレクトの命令の後ではなく、.htaccessの最後の行)

httpsのURLに正規化したい場合

「HTTPS」がoffの場合、つまりhttpでのアクセスと言うことなので、httpsでリダイレクトすると言う内容の設定です。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

「wwwなし」 + 「https」のURLに正規化したい場合

%{HTTP_HOST}のホスト名がwwwありの場合、wwwなしでリダイレクトすると言う内容の設定です。httpsは前述と同じ。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

「wwwあり」 + 「https」のURLに正規化したい場合

%{HTTP_HOST}のホスト名がwwwなしの場合、wwwありでリダイレクトすると言う内容の設定です。httpsは前述と同じ。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

index.htmlのついたURLを正規化したい場合

https://sample.com/index.htmlのようにindex.htmlの付いたURLをhttps://sample.com/に正規化する場合。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://sample.com/$1 [R=301,L]
</IfModule>

WordPress場合の設定について

WordPressの場合、「.htaccess」には下記の命令が入っていると思いますが、この命令の位置次第でhttps設定しているにも関わらず下層ページで結果がhttpになってしまう場合もあるらしい!?とのことで(知りたいネットさんの記事より)、補足として追記しておきました

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

以下のように、前に設置すると良いとのことです。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress