URLの正規化の対応方法

更新日: 2022.01.17

▼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/

https://www.irep.co.jp/knowledge/blog/detail/id=46107/