URL正規化の話

URL/URIの正規化というと「正規化」というエンジニア用語みたいのが絡んでいて意味がわからないので、URL/URIの統一化の方がいいんじゃないかということで、正規化=統一化という話でここでは進めたいと思います。
URL/URIっていうのは、いろんな方法で1つのデータに割り当てられるというのがそもそもの問題であり、またその複数のURL/URIというのを別々のデータであると判断する検索エンジン…というのが第二の問題であります。これは機能上仕方ないことといえば仕方ないことなので、サイトを運用する側が何とかしないといけないというところです。

http://www.example.com/
http://example.com/

という2つのURL/URIがあったとして、この2つをバラバラに利用している(つまり、印刷物とかにもどっちということなく何となく恣意的に2つを併用している)という場合、SEO的には、2つのデータにアクセスしているということになって実際のトップページへのアクセス数と違ってくるわけです。実際のアクセス数は双方のアクセス数を足したものになる筈です。これはこれでいいんじゃないかと思いますが、検索エンジンの評価はアクセス数とか被リンク数なので、こういうバラバラURL/URIを利用していると評価が事実上「下がる」ということになります。なので、これは駄目だということです。
もう一つは、index.htmlの問題です。

http://www.example.com/
http://www.example.com/index.html
上記2つのURL/URIは別々のURL/

URIとなってしまいます。検索エンジンもそれなりに馬鹿なので、ここらを何とかしてやらないといけないことになります。上記のwwwありとwwwなしのURL/URIと掛け合わせると、合計で4つのURL/URIが存在することになり実際のトップページアクセスの評価は概算上1/4になるということになります。
加えて、末尾の/(スラッシュ)問題。システム的には/はディレクトリを示し、スラッシュなしはファイルを示していることになっていますが、URL/URIというものになってしまうとそこらが曖昧です。つまりどちらでも同じファイルにアクセスできるということはごく頻繁にあります。しかし、問題なのは極希に同じファイルにアクセスしないという場合がちらほら含まれるということなのです。
以上いろいろ説明しましたが、まとめるとバラバラはあんまりよくないという話です。

対策1

http://www.example.com/
http://example.com/

というURL/URIに加えて、エイリアス、リダイレクト、サブドメインなど数々のアクセス方法にゆらぎがある場合は、それを統一します。

wwwありに統一

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example¥.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

wwwなしに統一

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www¥.example¥.com
RewriteRule (.*) http://example.com/$1 [R=301,L]

index.html・index.phpを/に統一

RewriteEngine On
RewriteBase /
RewriteRule ^index\.html?$ / [NC,R,L]
RewriteRule ^index\.php?$ / [NC,R,L]

plとかrbとかある場合はそれも追加。

canonicalでリダイレクト

<link href="http://www.example.com/" rel="canonical" /> ※wwwありに統一
<link href="http://example.com/" rel="canonical" /> ※wwwなしに統一

対策2

バラバラhrefを使わない。hrefでリンク先などを示す時にhref=”./”やhref=”./index.html”などを混在させない。コーディングのルールを作成してどちらかに統一させます。末尾の/で終わる際には、index.html index.php index.cgi index.pl index.rb index.pyなどなど自動的に割り振ってくれる設定はWEBサーバー側で行うのでこの設定も忘れずに。もしこの設定をしていない場合は、index.htmlと明示的に示した方が吉。

対策3

URL/URIはできるだけhttp://からはじまる絶対パスで記述する。これは、1つのデータに対して1つのURL/URIが結びつくという状態を保つためです。相対パスの場合は、検索エンジン側でいろいろな処理をしてURL/URIを作成していますが、いろいろ試行錯誤しているので最終的にどのようにURL/URIを作成してインデックス化しているのかわからないからです。絶対パスで示している場合は、公にしているデータアドレスが唯一であるということで正規化が保たれることが保証されるというわけです。
相対パスで示す場合もhref=”/web/index.html”とかhref=”../../index.html”とかバラバラの記述はやめるべきです。Root相対ならRoot相対、相対パスなら相対パスでその記述にルールを定めます。

対策4

ミラーリングサイトなどを公開しない。別々のホストにある同じデータとそれぞれ違ったURL/URIということになると検索エンジンは非常に困惑するようです。これらミラーサイトが本当に必要かどうかを検討しつつ、出来る限りミラーサイトの公開をやめることをおすすめします。勿論SEO的にということで、そんなこと全然気にしないしミラーサイトが必要な場合は全然関係ないです。

対策5

同じような内容のデータ(ページ)が複数存在し、どれが正当(canonical)なページがわからない場合は、rel属性にcanonicalを設定できます。これはGoogle検索特有の設定です。
cannonicalは、サブページにメインページのURL/URI(リンク先)を記述しておくことができます。

という感じでしょうか。こういうのもいつ何時やめてしまうかもわからない仕様ではありますし、実際の効果測定などは自分で行う気力もないですが、あくまでもおまじないとして適用するというのもよいでしょう。

まとめ

1ページ(1つのデータ) = 1URL/URI

いずれにしろ都市伝説みたいなところもなくはないですが、基本的には1ページに付き1URL/URIという図式を守ればよいということになります。SEO的に全然関係ないや!という場合は正規化なんて全然関係ないので自分らがアクセスしやすいように好きにやってよいわけです。

Last update: 2017.09.27 (水)