このタグについての通念の半分をひっくり返す事実から始めます。rel="canonical" は命令ではなく、ヒントです。
Googleはこれを他のすべてのシグナルと並べて比較検討します。内部リンク、サイトマップ、リダイレクト、hreflang。これらが食い違うと、検索エンジンは自らが正しいと判断したURLを選び、あなたのcanonicalを無視します。重複URLの統合に関するGoogle自身のドキュメントに明記されています。
残りはすべてここから導かれます。canonicalは単独では機能せず、他のシグナルが同じ方向を指しているときにだけ働きます。
記法
タグは <head> の中に置きます。
<link rel="canonical" href="https://example.com/page">
最もよく破られる三つのルール。
絶対URLを使う。 相対パスは技術的には許容されますが、ベースURLに誤りがあれば無意味になります。スキームとホストを含めて完全に書いてください。
タグはちょうど一つ。 1ページに異なるcanonicalが二つあると、Googleは両方を破棄します。SEOプラグインを二つ同時に動かしたときの典型的な結果です。
<head> の中だけ。 スクリプトが誤った位置に挿入するなどして <body> に入ってしまったcanonicalは考慮されません。
自前のHTMLを持たないファイル(PDF、画像)では、canonicalはHTTPヘッダーで送ります。
Link: <https://example.com/document.pdf>; rel="canonical"
canonicalが解決すること
解決するのは一つだけです。同じ内容が複数のURLに存在し、そのすべてがアクセス可能なままである必要があるという状況です。
典型的なケース:
- 並べ替えや絞り込みのパラメータ:
?sort=price、?color=red; - UTMパラメータや広告用の識別子;
- 複数のカテゴリに置かれた同一商品;
- 印刷用ページ;
- 別々のサブドメインにある同じ資料。
いずれの場合も単純にリダイレクトすることはできません。そのページ自体が必要だからです。canonicalは、どのアドレスを主とみなすかを検索エンジンに伝え、シグナルをそこに集約します。
自己参照canonical
ページは自分自身にcanonicalを向けることができます。必須ではありませんが有用です。誰かが余計なパラメータを付けてあなたのURLを開き、検索エンジンがそれを別ページとみなす事態への保険になります。
canonicalではないもの
誤りの大半はここに集中しています。隣接するツールを一覧にします。
| 目的 | 手段 | なぜcanonicalではないのか |
|---|---|---|
| ページが恒久的に移転した | 301リダイレクト | canonicalは旧アドレスを到達可能なまま残す |
| 遷移先が一時的に変わる | 302リダイレクト | 同じ理由 |
| ページをインデックスに載せたくない | noindex |
canonicalはインデックスから何も削除しない |
| ページをクロールさせたくない | robots.txt | ただしこれもインデックスからは外さない |
| 同一内容の多言語版 | hreflang+自己参照canonical | これらは重複ではない |
| ページ送りのある一覧 | 何も使わない | 2ページ目、3ページ目は独立している |
二点は特に強調しておきます。
canonicalは301の代わりになりません。 本当に移転したのならリダイレクトしてください。canonicalは、両方のURLが動き続ける必要がある場合のためのものです。
ページ送りは重複ではありません。 一覧の全ページのcanonicalを1ページ目に向けるのはよくある誤りです。2ページ目と3ページ目の内容は異なっており、それをインデックスから消しているだけになります。
canonicalとhreflang
最も繊細な部分であり、この領域で最も高くつく誤りが潜む場所です。
その誤りとは、すべての言語版を英語版にcanonicalすることです。 英語が「本体」だという理屈は一見もっともらしく見えます。結果は逆です。ドイツ語ページとスペイン語ページは独立していない、と検索エンジンに伝えることになり、それぞれの市場の検索結果から消えます。
正しい構成:
- 各言語版はcanonicalを自分自身に向ける;
- すべての版が
hreflangで互いを列挙する。自分自身も含める; - 関係は相互的であること。AがBを参照するなら、BもAを参照しなければならない;
hreflangはパラメータ付きの変種ではなく、正規URLを指す;x-defaultは、どの言語にも合致しない訪問者向けのフォールバックを示す。
いま読んでいるこのサイトはそのように作られています。YouTubeリンクの短縮に関するページには21の言語版があり、それぞれが自分自身にcanonicalしています。中国語版はこうなっています。
<link rel="canonical" href="https://lix.li/suoduan-youtube-lianjie">
<link rel="alternate" hreflang="en" href="https://lix.li/shorten-youtube-link">
<link rel="alternate" hreflang="zh" href="https://lix.li/suoduan-youtube-lianjie">
<link rel="alternate" hreflang="es" href="https://lix.li/acortar-link-youtube">
canonicalが英語ではなく中国語のURLを指していること、そして中国語版が自身のhreflangリストに含まれていることに注目してください。
よくある誤り
Googleは主要なものを何年も前にrel=canonicalの五つの誤りに関する記事にまとめており、そのリストはほとんど変わっていません。
404を返すURLを指すcanonical。 タグは丸ごと無視されます。
noindex のページを指すcanonical。 矛盾したシグナルです。「これを主とみなせ」と「これをインデックスするな」を同時に言っていることになります。
robots.txtでブロックされたURLを指すcanonical。 クローラーが取得できないため、確認もできません。
連鎖。 AがBを、BがCを指す。Search Consoleではこれが「正規URLが選択されていません」になります。最終URLを直接指してください。
httpとhttps、wwwあり・なしの混在。 canonical内のスキームとホストは、主とみなしているサイトの版と一致させてください。
同一ページ上のcanonicalと noindex。 どちらか一方を選んでください。
Googleが別のURLを選んだとき
Search Consoleでは「重複しています。ユーザーにより正規と指定されたページではなく、Googleが選択した正規ページ」と表示されます。
これはマークアップの誤りでもペナルティでもありません。他のシグナルがあなたのタグを上回った、という通知です。確認すべき点:
- 内部リンク。 サイト全体がパラメータ付きの変種にリンクしていて、canonicalだけがクリーンなURLを指しているなら、検索エンジンはリンクを信じます。
- サイトマップ。 正規URLだけを載せるべきです。
- リダイレクト。 canonicalの指す先がさらにどこかへリダイレクトしていれば、タグは力を失います。
- 本当に重複なのか。 内容が目に見えて違うなら、検索エンジンが別ページとして扱うのは妥当です。
シグナルを揃えればタグは機能し始めます。アルゴリズムと争っても意味がありません。それは全体像を読んでいます。
短縮リンクとcanonical
よく聞かれるにもかかわらず、一般的なガイドが答えない問いです。
短縮リンクはページの重複を生むのか。生みません。
短縮サービスは内容の複製を配信しません。返すのはHTTPリダイレクトです。302応答にはボディも <head> もないため、canonicalを置く場所が物理的に存在しません。クローラーはリダイレクトをたどり、自前のcanonicalを持つ遷移先を扱います。この仕組みは短縮URLの仕組みで解説しています。
このサイトの短縮リンクは、さらに X-Robots-Tag: noindex, nofollow ヘッダーを返し、リダイレクト自体をインデックスしないよう明示的に求めています。
では独自の短縮ドメインは。 リダイレクトしている限り、これも重複を生みません。重複が生じるのは、同じ内容をリダイレクトせずに二つのドメインで配信した場合です。そのときこそ主ドメインを指すcanonicalが必要になります。独自ドメインの短縮リンクの意義は別途扱っており、設定は独自ドメインのページから行えます。
短いチェックリスト
- 1ページにcanonicalは一つ、
<head>内、絶対URLで。 - 遷移先は200を返し、robots.txtでブロックされておらず、
noindexも付いていない。 - 連鎖させない——最終URLを直接指す。
- 各言語版は自分自身にcanonicalする。hreflangは相互に。
- サイトマップと内部リンクは同じ正規URLへ向かう。
- ページ送りと移転ページは、canonicalではなくそれぞれの手段で解決する。