canonical(正規 URL)とは — 重複コンテンツを 1 つにまとめる
canonical(正規 URL)は、同じ内容が複数の URL から見えるとき、検索エンジンに「評価をまとめる代表 URL はこれ」と伝える指定です。パラメータ違いや www の有無で URL が枝分かれすると、本来 1 ページ分の評価が分散します。head 内に絶対 URL で rel=canonical を書き、正規 URL へ評価を集約します。ただし Google にとっては命令ではなくヒント扱いです。
canonical(正規 URL)とは何ですか?
canonical は、同じ内容を持つ複数の URL のうち「これを代表とみなしてほしい」と検索エンジンに伝える指定です。head 内の link 要素に rel="canonical" と正規 URL を書きます。重複したページの評価を代表 URL へまとめ、検索結果にどの URL を出すかの判断材料になります。
「正規 URL(canonical URL)」とは、実質同じ内容を表示する複数の URL のうち、検索エンジンに代表として扱ってほしい 1 本のことです。 たとえば https://example.com/products/x100 と https://example.com/products/x100?utm_source=mail は、 人が見れば同じ商品ページですが、検索エンジンにとっては文字列の違う別 URLです。 この 2 つを「同じページの別入口」として束ね、評価を 1 本に寄せるための宣言が canonical です。
指定は <head> 内の <link> 要素で行います。属性は 2 つだけ、rel="canonical" と、 正規 URL を入れた href です。難しい仕組みではありませんが、後述するように「書けば必ず従ってもらえる」ものではない点が、 正しく理解しておきたいところです。
なぜ canonical が必要なのですか?
同じ内容が複数の URL から見えると、被リンクやクロールの評価がバラけ、どの URL も中途半端になりがちだからです。canonical で 1 つの正規 URL に集約すれば評価がまとまり、検索結果に意図しない URL が出るのも防げます。クローラが重複を巡回する無駄も減らせます。
重複 URL を放置すると、具体的に次のような不利益が生じます。
- 評価の分散 — 同じ内容へのリンクが 3 つの URL に分かれると、集まるはずの評価も 3 分割される
- 意図しない URL が検索結果に出る — パラメータ付きの URL や www 有りの URL など、見せたくない形が表示されることがある
- クロールの無駄 — 検索エンジンが同じ内容を何度も巡回し、本当に見てほしい新しいページの発見が遅れる
canonical はこれらを、ページを削除したり URL を変えたりせずに解消するための穏当な手段です。 既存の URL はそのまま生かしつつ、評価だけを 1 本に寄せられます。
canonical はどう書きますか?
head 内に link 要素を 1 つ置き、rel="canonical" と正規 URL を絶対 URL で指定します。全ページに、そのページ自身を指す自己参照 canonical を入れておくのが基本です。相対 URL やページ内での複数指定は避け、http/https・www の有無・末尾スラッシュまで含めた完全な URL を書きます。
書き方の要点は 3 つです。絶対 URL で書く、1 ページにつき 1 つだけ置く、 そしてすべてのページに「自分自身を指す」自己参照 canonical を入れることです。 自己参照はやや冗長に見えますが、パラメータ付きで開かれても正規 URL を明示できるため、重複対策として最も確実です。
<!-- 各ページの <head> に、そのページ自身を指す自己参照 canonical を 1 つ -->
<head>
<link rel="canonical" href="https://example.com/products/x100">
</head>
<!-- パラメータ付き URL で開かれても、canonical は正規 URL(パラメータ無し)を指す。
例: https://example.com/products/x100?utm_source=mail を開いても、
head の中身は同じ正規 URL のまま -->
<head>
<link rel="canonical" href="https://example.com/products/x100">
</head>静的な HTML なら上のように <head> へ直接書きます。フレームワークを使っているなら、 テンプレート側で URL を組み立てて出力するのが安全です。Next.js(App Router)なら metadata のalternates.canonical で宣言できます。
// Next.js(App Router)の例。各ページの metadata で canonical を宣言する。
// BASE は https://example.com のような本番の絶対 URL。
export const metadata = {
alternates: {
canonical: `${BASE}/products/x100`,
},
};どんなときに重複 URL が生まれますか?
主にパラメータの付与(?utm= や並び替え)、www の有無、末尾スラッシュの有無、http と https、URL の大文字小文字の違いで生まれます。人には同じページに見えても、検索エンジンは文字が 1 つでも違えば別 URL として扱います。CMS や広告のトラッキングが自動で枝分かれを増やすことも多いです。
「自分のサイトに重複なんて無い」と思っていても、次のような形で意図せず別 URL が量産されていることがよくあります。 いずれも人には同じページに見えますが、検索エンジンは 1 文字の違いも別 URL として扱います。
| パターン | 別 URL になる例 | 正規化の方針 |
|---|---|---|
| パラメータ | /x100 と /x100?utm_source=mail | パラメータ無しの URL を正規にする |
| www の有無 | example.com と www.example.com | どちらか一方に統一し 301 で寄せる |
| 末尾スラッシュ | /guide と /guide/ | サイト全体でどちらかに統一する |
| http / https | http:// と https:// | https へ 301 で統一する |
| 大文字小文字 | /Guide と /guide | 小文字に統一する |
表の「正規化の方針」に 301 リダイレクトが出てくる点に注目してください。www の有無や http/https のようにURL を完全に一本化できる場合は、canonical より 301 リダイレクトのほうが強く確実です。 canonical はあくまで「複数の URL を残したまま評価だけ寄せる」ための手段で、両者は役割が違います。
canonical でありがちな誤りは何ですか?
相対 URL での指定、全ページが同じ 1 つの URL を指す設定、noindex との併用、そして 301 リダイレクトで済む場面での誤用が代表例です。特に「全ページ同一 canonical」はトップ以外が検索から消える事故につながります。canonical は内容が実質同一の URL 群にだけ使います。
<!-- NG: 相対 URL。ドメインが欠けると解釈がぶれる。必ず絶対 URL で -->
<link rel="canonical" href="/products/x100">
<!-- NG: 全ページが同じ 1 つの URL を指す。
内容の違うページまで「トップと同一」と申告し、トップ以外が検索から消える事故 -->
<link rel="canonical" href="https://example.com/">
<!-- OK: 絶対 URL で、そのページ自身の正規 URL を指す -->
<link rel="canonical" href="https://example.com/products/x100">特に事故が大きいのが、全ページが同じ 1 つの URL を指してしまう設定です。 テンプレートで canonical をハードコードした結果、個別記事や商品ページまでトップページを正規 URL として申告し、 それらが検索結果から消える、という典型があります。canonical は「このページの正規形」を指すもので、 「サイトの代表ページ」を指すものではありません。
canonical と 301 リダイレクトは、下の表のように使い分けます。
| 観点 | rel=canonical | 301 リダイレクト |
|---|---|---|
| URL は残る? | 残る(両方アクセス可) | 残らない(正規 URL へ転送) |
| 拘束力 | ヒント(従わないことがある) | 強い(原則そのまま従う) |
| 向く場面 | パラメータ違いなど URL を残したいとき | www/http など URL を一本化できるとき |
| 利用者の遷移 | 変わらない | 自動で正規 URL へ移動する |
canonical を書けば必ず従ってもらえますか?
いいえ。Google にとって canonical は命令ではなくヒントです。sitemap の内容・内部リンク・リダイレクト・ページ内容の一致度など複数の手がかりを総合し、指定と別の URL を正規と判断することもあります。指定と矛盾する手がかりを残さないことが、意図どおり集約させるコツです。
ここは誤解されやすい重要な点です。Google は canonical を「強い手がかりの 1 つ」として扱うが、命令とはみなさないと明言しています。 Google は canonical タグのほかに、次のような複数の手がかりを総合して正規 URL を自分で選びます。
- 内部リンク — サイト内から実際にどの URL がリンクされているか
- sitemap.xml — サイトマップにどの URL を載せているか
- リダイレクト — 301 でどの URL に寄せているか
- 内容の一致度 — canonical 先とページ内容が本当に同じか
したがって、canonical だけを正しく書いても、内部リンクや sitemap が別の URL を指していれば、Google はそちらを正規と選ぶことがあります。 意図どおり集約させたいなら、canonical・内部リンク・sitemap・リダイレクトのすべてを同じ正規 URL にそろえ、矛盾する手がかりを残さないことが肝心です。
指定した canonical が効いているか、どう確認しますか?
ページのソースで head 内の link rel=canonical を確認し、Google Search Console の URL 検査で「Google が選択した正規 URL」を見ます。指定と Google の選択が一致していれば意図どおりです。食い違うときは、内部リンクや sitemap が別 URL を指していないかを見直します。
確認は 2 段階で行います。まず自分の書いた指定、次にGoogle が実際にどう判断したかです。
- 指定の確認 — ブラウザでページのソースを開き、
<head>内のlink rel="canonical"が 意図した絶対 URL を 1 つだけ指しているかを見る - 判断の確認 — Google Search Console の「URL 検査」で、「Google が選択した正規 URL」を確認する。 ここが自分の指定と一致していれば意図どおり
もし指定と Google の選択が食い違っていたら、それは canonical だけの問題ではありません。 内部リンクや sitemap が別 URL を指していないか、301 の向きが逆になっていないかを、 あわせて見直してください。内部リンクの張り先を正規 URL にそろえるだけで解決することも少なくありません。