.htaccess③ URLの正規化

コーディング
スポンサーリンク

URL正規化とは?

  • URLのwwwあり/なし
  • /index.htmlの有無
  • SSL化によるhttp/httpsの統一化

上記を検索エンジンに宣言することをURL正規化といいます。

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

独自ドメインを使用する場合、例えば「sample.com」のドメインを取得し使用する場合、「www.sample.com / sample.com」の2つのURLが使用可能です。

デフォルトでは、wwwあり/なしどちらのURLでもサイトに接続可能で、一見、特に問題はないように感じますが、同じ内容でWWWありなしの2つのアドレスを持つサイトが存在するということになります。
なので、重複するURLを統一(正規化)が必要です。
記述する内容は下記です。

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

ちなみに、wwwのありなしのどちらにする方が良いか?という点については、どちらでも好きな方で選んで大丈夫です。SEO効果で優位性の差はありません。

SSL化(http/https)について

SSL化されていないサイトやページはhttp://となりURLの先頭には「保護されていない通信」と表示されます。SSL化されたサイトやページはhttps://となっています。

デフォルトではどちらでもアクセスできますので、これはよくありませんのでURL正規化を行う必要があります。

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

<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に正規化したい場合

<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」、PHPで制作されている場合「index.php」と表示されている場合も同様ことが言えますので、URL正規化します。

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

まとめ

バラバラに書きましたが、まとめると、書き方は下記になります。

indexなし、wwwあり、https強制

<IfModule mod_rewrite.c>
  RewriteEngine On
 
  # indexなしに統一
  RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
  RewriteRule ^(.*)index.(html|htm|php)$ https://%{HTTP_HOST}/$1 
  [R=301,L]
 
  # wwwありに統一
  RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
  RewriteRule ^ https://www.%{HTTP_HOST}/$1 [R=301,L]
 
  # httpsに統一
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

indexなし、wwwなし、https強制

<IfModule mod_rewrite.c>
  RewriteEngine On
 
  # indexなしに統一
  RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
  RewriteRule ^(.*)index.(html|htm|php)$ https://%{HTTP_HOST}/$1 
  [R=301,L]
 
  # wwwなしに統一
  RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
  RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
 
  # httpsに統一
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

参考

htaccessでURLの正規化!SSL (https)とwwwあり/なしの設定方法
ブログやホームページのURL統一(正規化)は検索エンジンのクローラービリティの向上に繋がり、検索順位にも影響を受ける可能性のある重要な項目。コピペでできる正規化の設定方法。wwwありなし、SSL(https/http)、index.htmlの正規化。

コメント

タイトルとURLをコピーしました