wwwあり・なしを統一(正規化)してURLの分散を防ぐ方法

wwwあり・なしを統一(正規化)してURLの分散を防ぐ方法

URL正規化とは

ページのURLは異なっているのに、その内容が完全に同じであるコンテンツが存在していることがあります。

サイトを公開した際に、ドメインはデフォルトで以下のようなurlでもアクセスできてしまいます。

『http://sample.com』
『http://www.sample.com/index.html』
『http://www.sample.com』
『http://www.sample.com/index.html』

どれか一つ正規のURLを検索エンジンに対して明示することを「URL正規化」と言います。

URL正規化は基本的なSEO対策

何故、URLの正規化をしないといけないのでしょうか?

複数のURLで同じコンテンツが存在する場合、検索エンジンによってはそれぞれを別のサイトとみなすことがあります。

その場合ページの持つパワーが分散されてしまうからです。

別ページと認識されると、どんなに検索上位化施策として被リンク(外部リンク)施策を行ってもページが分散してしまうため、SEO効果が半減しまいます。

複数URLでページアクセスできる場合は、URL正規化し、SEO効果を高めたいと思います。

wwwあり・なしを統一(正規化)

wwwあり・なしのどちらかに統一することが可能です。

WordPressの場合

WordPressの場合、インストール時にどちらかのURLに正規化されています。

[ダッシュボード(管理画面)]→[設定]→[一般]の
サイトアドレス (URL)で設定したURLに正規化されます。

wordpress一般設定

サイトアドレス (URL) で設定したURL「http://netbusinessbox.net/」(wwwなし)に正規化されるので、「http://www.netbusinessbox.net/」でアクセスした場合は「wwwなし」のページにリダイレクトされます。

・「wwwなし」のURLでinstall.phpを実行すると「wwwなし」に統一
・「wwwあり」のURLでinstall.phpを実行すると「wwwあり」に統一

htmlサイトの場合

htmlサイトの場合は.htaccessで301リダイレクトして統一します。

wwwあり・なしを選び、以下のタグをhtaccessに記述してアップしてください。

・「wwwなし」のURLに統一

RewriteEngine On

# www無しのURLに統一
RewriteCond %{HTTP_HOST} ^www\.sample\.com
RewriteRule ^(.*) http://sample.com/$1 [R=301,L]

・「wwwあり」のURLに統一

RewriteEngine On

# www有りのURLに統一
RewriteCond %{HTTP_HOST} ^sample\.com
RewriteRule ^(.*) http://www.sample.com/$1 [R=301,L]

index.htmlあり・なしを統一(正規化)

また、index.htmlのあり・なしでURLが分散する場合も、書き換えによりURLを統一(正規化)することもできます。

『http://www.sample.com』
『http://www.sample.com/index.html』

WordPressの場合

.htaccess を編集してindex.html をindex.php へリダイレクトします。

WordPressに対してパーマネントリンクを設定すると、自動的にWordPressのインストールディレクトリに対して「.htaccessファイル」が生成されます。

生成された場合の「.htaccessファイル」は、以下のようになっています。

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

これをベースに、index.html をindex.php へリダイレクトさせるソースコード(5行目)を追加します。

RewriteRule ^index\.html?$ / [R=301,L]

追記したソースコードは下記になります。

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.html?$ / [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

htmlサイトの場合

サイト内のすべてのディレクトリにおいて『/index.html』(index.html有り)でのアクセスを『/』(index.htmlなし)に統一する方法


RewriteEngine On

# index.html無しのURLに統一
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://sample.com/$1 [R=301,L]