【.htaccess】URLを正規化する方法(「www」と「index.html」の正規化)
WordPressでサイトを運用している場合、デフォルトでURLの正規化を行ってくれますが、HTMLサイト等を運営している場合、自分で「.htaccess」ファイルを作成し、正規化処理をしなくてはなりません。
ここではサーバーapacheのmod_rewriteを使ったURL正規化の方法を説明します。
URLの正規化とは?
URLの正規化とは、同じ内容のページが複数ある場合に、指定したページに統一することです。
正規化の方法には、正規化タグ「rel="canonical"」を使う方法とサーバーの.htaccess(mod_rewrite)を使う方法がありますが、ここではmod_rewriteの方法を説明します。
詳細
URL上は「http://○○○.com」と「http://www.○○○.com」は別ページとなります(wwwがあるかないか)。
しかし殆どの場合(URLの正規化を行っていない場合)、「http://○○○.com」でアクセスしても「http://www.○○○.com」でアクセスしても同じページが表示されます。
こういった場合、サイト内に同一ページが存在することになり、検索エンジン対策(SEO)上よろしくない状態になります。
なぜなら、検索エンジンは同一コンテンツを嫌いますし、それぞれのページにSEO的なパワーが分散してしまうからです。
具体例
そのため、SEO上の理由のため、URLの正規化をする必要があります(最近の検索エンジンはとても賢いので、その必要性も薄れているかもしれませんが・・・)。
なお、URL正規化の具体例を示しますと、当サイトのドメインは「ysklog.net」ですが、「http://ysklog.net」と「http://www.ysklog.net」でアクセスしても、同じページ(http://ysklog.net)に統一されます。
これは、「http://www.ysklog.net」でアクセスしてきたものを「http://ysklog.net」に正規化(リダイレクト)しているからです。
正規化の方法
ということで、実際にURLを正規化する方法を紹介したいと思います。
まず、「.htaccess」ファイルを準備します。そして以下を記述します。
#「www」のあるURLを「www」なしのURLに正規化
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.○○○.com
RewriteRule ^(.*)$ http://○○○/$1 [R=301,L]
これだけで、「www.○○○.com」を「○○○.com」に正規化(301リダイレクト)することができます。
(なお、「http://www.○○○.com/piyo/」の場合でも「http://○○○.com/piyo/」に正規化されます)
また、「http://○○○.com/」と「http://○○○.com/index.html」でアクセスしても同一のページが表示されますので、これも同様な理由で正規化してあげる必要があります。
#「index.html」ありのURLをなしに正規化
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://○○○.com/$1 [R=301,L]
これで「http://○○○.com/index.html」にアクセスがあった場合、「http://○○○.com/」に正規化されます。
(なお、「http://○○○.com/hoge/index.html」の場合でも「http://○○○.com/hoge/」に正規化されます)
まとめ
ということで、「www」と「index.html」のURL正規化を行うためには、「.htaccess」に以下を記述すればOKです。
#「www」のあるURLを「www」なしのURLに正規化
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.○○○.com
RewriteRule ^(.*)$ http://○○○/$1 [R=301,L]
#「index.html」ありのURLをなしに正規化
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://○○まる.com/$1 [R=301,L]
あわせて読んでほしい!
コメント
まだコメントはありません。