URLの正規化/wwwありとwwwなし

今日は朝っぱらからURLの正規化を行ったので、一応、その方法を後日のためにメモしておこうと思います。

まず、知らない人のために書いておくと、URLにwwwがあるのと、wwwが付いていないものがあるのはご存じですよね?これをどちらかに統一するという話です。他には、htmかhtmlかと言うことが問題になることもありますが、今回はwwwのありなしの正規化です。

統一しないとどうなるかというと、検索エンジンでは、wwwがあるのとないのとでは、別々のサイトと認識されてしまう可能性があるため、非常に面倒なことになります。簡単に言うと、不利です。

実際、今回、朝っぱらURLの正規化を行ったのは、この問題のために、せっかく作ったページが検索結果から消えてしまっていたからです。他にも原因はあるかもしれませんが、取りあえず、原因と考えられるものを一つずつ潰すしかありません。

実際に私のところで起きた問題では、www付のページの一つにトップページとして、wwwなしのURLのリンクが貼られていたというものです。正規化されていれば、転送されるので問題はないのですが、転送されていないため、二つのトップページというか、二つのサイトが存在して、そのwww付のページは、www付のトップページからリンクされていますが、そのページがトップページとしているwwwなしのサイトからはリンクが貼られていないという状態だったわけです。わかりにくいと思うので、下に図を書いておきます。

wwww付トップページ

   ↓

wwww付ページ(検索結果から削除されていた)

   ↓

wwwwなしのトップページ ※このサイトにはトップページ以外のページがない。

他に検索のインデックスから削除された原因としては、記事数の少ないブログからリンクが貼られていたことぐらいですね。数えたら、全部で17本の記事しかありませんでした。最近は、リンクがあると、検索インデックスから削除される場合もあるので、要注意です。

原因は何かわかりませんが、URLの正規化を行って悪いことなど一つもないので、まずURLの正規化をやってみたわけです。

問題のサイトは、www付を正規のURLとしているので、www付への転送設定です。.htaccessに以下の様に記述します。ついでに、wwwなしのドメインへの転送設定も書いておきます。

www付のドメインへの転送設定
example.com→www.example.com

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

wwwなしのドメインへの転送設定
wwww.example.com→example.com

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

バックスラッシュは半角の円マークになることがありますが、気にしなくても大丈夫です。逆にバックスラッシュが使えない時は、半角の円マークにしてください。実はこの二つは同じ文字で、単に文字コードの問題に過ぎませんので、スクリプトとしては同じ動作になります。

説明

バックスラッシュ(半角円マーク)
「.」の前に置いて、「.」が「.」として認識されるようにするためのものです。そうしないと、「example-com」であっても、一致するものと見なされ、おかしな転送が発生する可能性があります。バックスラッシュが前にないと、「.」はどの文字とも一致するものとして扱われます。

NC
「No Case」の略です。ケースは関係がない、大文字か小文字かは問わないという意味です。つまり、「NC」をつけておけば、URLが大文字で入力されていても大丈夫ということです。

L
「Last」の略です。定義の最後を示します。従って、定義の最終行の後に書きます。

R
「Redirect」の略です。転送という意味になります。

301
「永久に転送する」という意味のパラメーターです。「R=301」で「永久に転送する」という意味が伝わります。なお、「永久」というのはおおむね2週間以上の期間を指します。

実際の運用では、「R=301」以外は省略しても、まず問題はないだろうと思います。しかし、今回は、念には念を入れて、上記のように書いておきました。

最後にちゃんと動作するのかチェックを怠らないようにしましょう。一字違うだけでも、全然違う結果になります。

実際、今回、ドメイン名の中にあった「-」を忘れたら、全然別のサイトに飛んで行きました。(^ ^;;;

[ URLの正規化/wwwありとwwwなし ]インターネット2017/08/30 09:00