URLの正規化の対応方法
▼URLの正規化とは
【定義】
URLの正規化とは、様々なURLからアクセスできる状態を、1つのURLにまとめて、統一(正規化)すること。
【具体例】
- 「www」のあり・なし
- 「index.html」のあり・なし
- 「https」or「http」
- 「パラメーター」のあり・なし
※末尾のスラッシュ「/」のあり・なしは、検索エンジンから同一に扱われる。
▼対応する理由
- 検索エンジンが別ページと認識する
- 被リンクが分散してしまう
▼Google推奨の対応方法
- 301リダイレクトを設定する
- canonicalタグを設定する
▼301リダイレクトを設定する
【解説】
- 基本的にこちらで対応する
- 「.htaccess」に記述する
- WordPressの場合は管理画面の「設定」>「一般」>「サイトアドレス (URL)」から設定できる
【具体例】
◆http→httpsに正規化させるパターン
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
◆https→httpに正規化させるパターン
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
◆特定のページに正規化させるパターン
Redirect permanent /post-a/ https://example.com/post-b/
※「/post-a/」は転送元のURL(相対パス)、「https://example.com/post-b/」は転送先のURL(絶対パス)
◆wwwなし→wwwありに正規化させるパターン
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
◆wwwあり→wwwなしに正規化させるパターン
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
◆indexあり→indexなしに正規化させるパターン
RewriteEngine On
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://www.example.com/$1 [R=301,L]
▼canonicalタグを設定する
【サンプル】
<link rel="canonical" href="https:/communityserver.org/">
【解説】
- .htaccessでリダイレクトできない場合やパラメーターなどを正規化する場合には、canonicalタグを使用する
- インデックスを登録させたいURLを記述する
- あくまで指定をしているだけなので、指定通りに動いてくれるかは検索エンジン次第(強制はできない)
▼参考
https://communityserver.org/contents/3663/
https://www.suzukikenichi.com/blog/canonicalization-of-indexhtml-and-non-indexhtml/