SEO マーケティング

.htaccess で行うURLの正規化 ( wwwあり / なし統一、index.html非表示、https強制) まとめてどうぞ

URL正規化イメージ

.htaccessでURLの正規化を行う際、いつも個別にググってそれぞれ設定するのが手間だったので、https強制、wwwあり/なしの統一、インデックスファイルの非表示を、このページだけ見ればまとめて設定できるようにしました。

というわけでこの記事は初心者ですが一応「.htaccessの編集はできる」という人向けです。各命令の細かい説明は別ページで行います。

まずは基本のコードをどうぞ。条件さえ合っていれば下のコードをコピペして一部修正すればOKです。基本的にこのブログを運用しているエックスサーバー向けですが、他のサーバーでも応用できます。


RewriteEngine on

# https強制
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# wwwなし
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# インデックスファイルを表示しない
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^index.(html|htm|php)$ https://example.com/$1 [R=301,L]
# URL正規化コードここまで

上記コードの「example.com」の部分を自分のドメイン名に書き換えてください。また、なるべく最終行のコメントもコピーしてください(理由は後述)。このコードを.htaccessにコピペした場合、サイトにアクセスした際、以下のような動作をします。

  • httpsを強制してURLを正規化
  • wwwなしでURLを正規化
  • インデックスファイル"index.html (または.php、.htm)"を表示しない

また別パターンとして、wwwありでURLを正規化したい場合は、


RewriteEngine on

# https強制
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# wwwあり
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# インデックスファイルを表示しない
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^index.(html|htm|php)$ https://example.com/$1 [R=301,L]
# URL正規化コードここまで

「wwwあり」の部分を上記コードで書き換えてください。これで(少なくともエックスサーバーなら)問題なく動作するはずです。

上記二つのコードをコピペしてexample.comの部分を書き換え、アップロードすれば作業は完了ですが、各項目について詳しく説明した記事をアップしたので興味があったら参照してみてください。

.htaccessに書いたコマンドは行末に改行がないと実行されない

ちなみに「なるべく最終行のコメントもコピーしてください」と書いたのは、.httaccessの特性によるものです。

というルールがあります。最後のコメントまでコピペすれば、自動的にコマンドの最終行に改行が入ることになります。これならうっかり改行つけ忘れの事故を防げますね。

このルールをわかっていれば、特に最終行のコメントをコピーする必要はありません。また、すでに他の命令が.htaccessに書いてあって、URL正規化のコードを上の方に書く場合も必要ありません。ただし、このコードが最終行になる場合は、行末に改行を付けるのを忘れないようにしましょう。

URLの正規化、初心者の頃の疑問

500 Internal Server Error
URLの正規化のため.htaccessをいじったらエラーが出てサイトが表示されなくったの図

初心者の頃は疑問というか不安でいっぱいなものです。特にサーバーサイドの設定〜〜.htaccessをいじるようなものに関しては「下手にいじったらぶっ壊れてしまうんじゃないか」と思ったりします(実際壊れますけど)。そういうプログラミングをする際の心構えはまた別記事に任せるとして、URL正規化の際の、初心が抱きがちな疑問について解説します。

RewriteEngine onが何回も書いてあるページがあるんだけど?

答え : 先頭に1回だけあればOKです。

URL 正規化」でググったりすると"RewriteEngine on"が下記の部分にそれぞれ書いてある場合があります。

  • https強制
  • wwwあり / なしに統一
  • index.html非表示

それぞれに"RewriteEngine on"と記述されていても正常に動作するんですが、まだ駆け出しの頃にこういう「どっちでもOK」みたいな例があると、ものすごく戸惑っていた。何しろ、書いてみたものは大抵うまく動いてくれず、スペース一つの有無が正しいのかそうでないのか迷う頃なので。

場数を踏めばどうってことはなくなるんですけどね。

URLの正規化で検索すると、先頭に"Options +FollowSymLinks"って記述がある解説ページがあるんだけど

URL正規化の解説をしているページを見ると、結構この"Options +FollowSymLinks"という記述を目にします。ですがエックスサーバーでは不要です。

もし他のサーバーで.htaccessをいじってみて、動かなかったら"Options +FollowSymlinks"を付け足してみるというのはアリかもしれません。

ただし、.htaccessの記述方法は、サーバーによって微妙な違いがあるので、別のサーバーでの設定を知りたい場合は、検索キーワードに使用しているサーバーの名前を加えると目的の情報が見つかる確率が高くなるかもしれません。

一通り読んだけどまだ.htaccessの編集は怖くてできないんですけど

今回の記事はあくまで

.htaccessにどう書けばいいんだっけ...?

という人に向けた記事だったので、そもそも「.htaccessの編集方法がわからない!」という人には説明不足かもしれません。というわけで、

  • .htaccessをいじらなくてもURLの正規化はできるの? ←canonicalを使おう
  • .htaccessの編集方法が知りたい

という人向けの記事もアップする予定です。

-SEO, マーケティング

© 2024 kappasta.