この記事の要点:
- canonicalは、重複したURLのうち検索結果に出してほしい代表(正規URL)を伝えるヒントで、ページの削除や転送はしない
- 正規URLは1つに決め、canonical・内部リンク・サイトマップ・リダイレクトのすべてで同じURLを使う
- 利用者が使い続ける重複URLにはcanonical、もう使わない古いURLには301、検索結果から外すならnoindex。正規化にrobots.txtは使わない
- ページ分割の2ページ目以降や翻訳ページは重複ではないため、それぞれ自分自身を指すcanonicalにする
- 指定が効いているかは、URL検査で「ユーザーが指定した正規 URL」と「Google が選択した正規 URL」を見比べて確かめる
canonicalとは
canonical(カノニカル)とは、同じ、またはほぼ同じ内容のページが複数のURLにあるときに、代表とするURL(正規URL)を検索エンジンに伝える指定です。Googleは重複したURLの中から1つを正規URLとして選び、主にそのURLを検索結果に表示します。
canonicalはページを消したり、利用者を転送したりはしません。どのURLも閲覧できるまま、「検索結果に出すならこのURL」と伝えるヒントです。重複したURLへのリンクなどのシグナルも、正規URLにまとめて扱われやすくなります。
正規化(canonicalization)の考え方
Googleは、重複したURLのまとまりごとに正規URLを1つ選ぶ処理を「正規化」と呼んでいます。サイト運営者がcanonicalを指定しなくても、Googleは自動で選びます。ただし、意図と違うURLが選ばれることがあるため、自分で指定しておく方が確実です。
canonicalが必要になる場面
サイトでは、意図しなくても同じ内容が複数のURLで表示されることがよくあります。代表的な場面は次のとおりです。
| 場面 | URLの例 | 正規URLにするもの |
|---|---|---|
| 計測用パラメータ付きのURL | /page/?utm_source=mail | /page/ |
| wwwの有無・httpとhttps | http://example.com/page/ | https://www.example.com/page/ など1つに統一 |
| 並び替え・表示件数だけ違う一覧 | /items/?sort=price | /items/ |
| 商品の色違いで内容がほぼ同じ | /shirt/?color=blue | 色ごとに説明が違うなら各URL、同じなら代表の1つ |
| PC用とスマートフォン用が別URL | https://m.example.com/page/ | PC用のURL(スマートフォン用にはalternateも併用) |
| A/Bテストで別URLの案を出している | /lp-b/ | 元のURL |
例:アパレルの通販サイトで、同じTシャツが「メンズ」「セール」の2つのカテゴリーから別URLで表示される場合。どちらの経路から来ても同じ商品ページなので、/products/t-shirt-001/ のように1つの正規URLを決めてcanonicalで指し、サイト内のリンクもそのURLにそろえます。重複ページ全般の考え方は重複コンテンツとは、URLのそろえ方はURLの正規化の記事で扱っています。
どのURLを正規にするかの決め方
正規URLは、次の順で考えると決めやすくなります。
- 利用者に一番見てほしいURL(パラメータが無く、短く、意味が分かるもの)
- httpsで、サイト全体で決めたwwwの有無に合っているURL
- サイト内のリンク・サイトマップ・パンくずで、すでに使っているURL
決めたURLは、canonicalだけでなく、内部リンク・サイトマップ・リダイレクトのすべてで同じものを使います。シグナルがそろうほど、Googleの選ぶ正規URLが指定と一致しやすくなります。
正規URLを伝える方法とシグナルの強さ
Googleは、正規URLを伝える方法を次のように整理しています。
| 方法 | Googleにとっての強さ | 向いている場面 |
|---|---|---|
| 301などのリダイレクト | 強いシグナル | 古いURLを使わなくなったとき、URLを統一したいとき |
| rel=”canonical”のlink要素 | 強いシグナル | 重複したページも表示したまま、代表を伝えたいとき |
| rel=”canonical”のHTTPヘッダー | 強いシグナル | PDFなどHTML以外のファイル |
| サイトマップに載せる | 弱いシグナル | サイト全体で正規URLをまとめて伝える補助 |
Googleは、これらの方法を組み合わせると効果が高まると説明しています。ただし、方法ごとに別のURLを指すと逆効果です。例えば、canonicalは/page/を指しているのに、サイトマップには/page/?ref=topを載せている、という状態は避けます。
rel=”canonical”の書き方
link要素(HTMLページ)
重複しているページの<head>の中に、正規URLを書きます。
<!-- /items/?sort=price の head 内 -->
<link rel="canonical" href="https://example.com/items/">
<!-- 正規URL /items/ 自身にも、自分を指すcanonicalを入れる -->
<link rel="canonical" href="https://example.com/items/">
守ることは次のとおりです。
- <head>の中に書く。<body>の中にあるcanonicalは使われません。
- 「https://」から始まる絶対URLで書く。相対URLも使えますが、書き間違いが起きにくいのは絶対URLです。
- 1ページに1つだけにする。複数あると無視されることがあります。
- 指す先は、正常に表示(200)され、インデックスできるページにする。
- 正規URLのページ自身にも、自分を指すcanonical(自己参照canonical)を入れる。
HTTPヘッダー(PDFなど)
PDFなどHTMLではないファイルには、Linkヘッダーで指定します。例:資料のHTML版とPDF版があり、HTML版を正規にしたい場合です。
Link: <https://example.com/guide/>; rel="canonical"
Apacheの.htaccessでは、mod_headersが有効な場合、次のように書けます。
<Files "guide.pdf">
Header add Link "<https://example.com/guide/>; rel="canonical""
</Files>
nginxでは、該当するlocationに書きます。
location = /files/guide.pdf {
add_header Link '<https://example.com/guide/>; rel="canonical"';
}
WordPressで確認する設定
- 投稿・固定ページ:WordPress本体が、記事ごとに自分自身を指すcanonicalを出力します。SEOプラグインを入れると、プラグインの出力に置き換わるのが一般的です。
- SEOプラグインの記事ごとの欄:投稿画面の詳細設定に「正規URL」などの入力欄があるものが多くあります。空欄なら自己参照になります。ほかの記事を複製したときに、元記事のURLが残っていないかを確認します。
- 一覧ページ:カテゴリー・タグ・ページ分割の一覧は、テーマやプラグインの出力に頼ります。2ページ目以降のcanonicalが何を指しているかを、実際のHTMLで確かめます。
- 多言語・キャッシュ系のプラグイン:URLを書き換えるプラグインと組み合わせると、canonicalのURLがずれることがあります(後の「当サイトの実例」を参照)。
canonical・301・noindex・robots.txtの使い分け
重複を整理したいとき、どの手段を選ぶかは「重複したURLを、利用者が使い続けるかどうか」で決まります。
| 状況 | 選ぶ手段 | 理由 |
|---|---|---|
| 重複URLも利用者が使う(並び替え、計測パラメータ) | canonical | ページは残したまま、評価を正規URLにまとめる |
| 古いURLはもう使わない(URL変更、http→https、統合) | 301リダイレクト | 利用者も検索エンジンも新しいURLへ移る |
| 内容が違い、検索結果に出す価値がない | noindex | 重複ではないので、canonicalは適さない |
| クロールさせる価値のないURLが大量にある | robots.txt | クロールの量を減らす目的。正規化には使わない |
| ページが不要で、後継もない | 削除(404・410) | canonicalで残す理由がない |
Googleは、正規化の目的でrobots.txtを使わないよう説明しています。ブロックしたURLは中身が読めず、重複かどうかを判断できないためです。また、同じサイト内で正規URLの選択を防ぐ目的でnoindexを使うことも勧めていません。noindexは「検索結果から外す」指定で、評価をまとめる働きはありません(noindexとは)。1つのページにnoindexと、別のURLを指すcanonicalを同時に付けると、「外してほしい」と「こちらと同じ」という矛盾した信号になります。どちらか一方にします。URLを移すときの手順は「301リダイレクトとは」で説明しています。
Googleが選んだ正規URLを確かめる方法
canonicalは「ヒント」であり、Googleが必ず従う命令ではありません。リダイレクト、内部リンク、サイトマップ、httpsかどうかなど、ほかのシグナルもあわせて判断されます。指定と矛盾するシグナルが多いと、Googleが別のURLを正規URLに選ぶことがあります。
1. HTMLとヘッダーを見る
ページのソースを開き「canonical」で検索して、1つだけか、指す先が正しいかを見ます。ヘッダーで指定している場合は、ターミナルで確認します。
curl -I https://example.com/files/guide.pdf
結果のLink:の行に、正規URLとrel="canonical"があれば指定されています。
2. Search ConsoleのURL検査
- Search ConsoleのURL検査に、確かめたいURLを入力します。
- 「ページのインデックス登録」を開き、「ユーザーが指定した正規 URL」と「Google が選択した正規 URL」を見比べます。
- 修正した直後は「公開URLをテスト」で、今のHTMLに正しいcanonicalがあるかを確認します。なお、「Google が選択した正規 URL」はテストでは分からず、インデックスされた結果にだけ表示されます。
3. ページのインデックス登録レポート
「インデックス作成」→「ページ」で、インデックスされていない理由を見ます。canonicalに関係する主な理由は次のとおりです。
- 代替ページ(適切な canonical タグあり):指定どおり、別のURLが正規として扱われています。意図した重複URLなら対応は不要です。
- 重複しています。ユーザーにより、正規ページとして選択されていません:canonicalの指定はないものの、Googleが重複と判断しました。正規URLを明示します。
- 重複しています。Google により、ユーザーがマークしたページとは異なる正規ページが選択されました:指定とGoogleの判断が食い違っています。内部リンクやサイトマップが、指定と違うURLを指していないかを見直します。
よくある失敗と直し方
| 起きること | 原因 | 直し方 |
|---|---|---|
| 一覧の2ページ目以降に載る記事が見つかりにくい | ページ分割の2ページ目以降のcanonicalを1ページ目に向けている | 内容が違うページなので重複ではない。各ページに自己参照canonicalを付ける |
| 英語版のページが検索結果に出ない | 英語版のcanonicalが日本語版を指している | 翻訳したページは重複ではない。各言語のページは自分自身を指し、言語の対応はhreflangで伝える |
| 正規URLが「存在しないページ」と扱われる | canonicalが404やリダイレクト元のURLを指している | 正常に表示される最終URLを指す |
| 指定が無視される | テーマとSEOプラグインの両方がcanonicalを出し、2つある | どちらかの出力を止め、1つにする |
| 本番のページが、テスト環境のURLを指している | テスト環境からデータを移したときに、URLの設定が残った | サイトのURL設定と記事ごとの正規URL欄を本番のドメインに直す |
| Googleが別のURLを正規に選ぶ | 内部リンクやサイトマップがパラメータ付きURLを使っている | サイト内のリンクとサイトマップを正規URLにそろえる |
ページ分割について、Googleは「最初のページを正規ページとして使わず、各ページに独自の正規URLを付ける」よう説明しています。多言語については、hreflangを使う場合、正規URLは同じ言語(無ければ最も近い代替言語)のページにするよう案内しています。詳しくはhreflangとはを参照してください。
当サイト(seoagent.jp)での実例
当サイト(seoagent.jp)では、記事一覧/ja/blog/のcanonicalが、/ja/blog/ja/という存在しないURLを指していました。多言語プラグインがURLに言語のパスを付け足す処理と、一覧ページのcanonicalを作る処理が重なったことが原因です。
- 行ったこと:canonicalをページ自身のURLに直す処理を追加
- 確認方法:seo-check(全ページのHTMLを取得して確認する仕組み)で、全ページのcanonicalが自分自身を指すことを確認
この不具合は、管理画面の設定を見ても分かりませんでした。公開されたHTMLを直接見て初めて気づけます。プラグインを追加・更新したときは、記事・一覧・トップなど種類の違うページを数枚選び、canonicalの値を確かめることをおすすめします。
また、日本語と英語のURLを分けた際(現在は日本語がトップ /、英語が /en/)は、翻訳がある組だけにhreflangを付け、x-defaultはトップページだけにしました。言語の違うページ同士をcanonicalでまとめず、それぞれが自分を指す形にしています。ほかの技術的な記事は「テクニカルSEOの記事一覧」にまとめています。
よくある質問
canonicalを直したら、どのくらいで反映されますか。
Googleがそのページを再びクロールし、処理したあとに反映されます。かかる時間はサイトやページによって異なります。急ぐページは、URL検査で「公開URLをテスト」して新しい指定を確かめたうえで、インデックス登録をリクエストできます。
canonicalで指定された側でないページ(重複URL)は、削除したほうがよいですか。
利用者がそのURLを使っているなら残します。並び替えや計測パラメータのURLのように、読者にとって意味のある重複はcanonicalでまとめるための仕組みです。もう使わないURLであれば、削除ではなく正規URLへの301リダイレクトを選びます。
canonicalを付けたのに、重複URLの方が検索結果に出ることはありますか。
あります。canonicalはヒントなので、内部リンクやサイトマップが別のURLを指していると、Googleがそちらを正規URLに選ぶことがあります。URL検査で「Google が選択した正規 URL」を確かめ、シグナルを指定と同じURLにそろえます。
canonicalを設定すると順位は上がりますか。
canonicalは順位を上げる設定ではありません。重複したURLに分かれていたリンクなどのシグナルが正規URLにまとまりやすくなり、検索結果に出るURLが意図どおりになることが主な効果です。
SEOAGENTでできること
SEOAGENTでは、Search Consoleと連携して記事ごとの検索データを確認し、内容が重なっている記事の整理や、記事同士の内部リンクの見直しを進められます。canonicalの出力は、WordPress側のテーマやSEOプラグインの設定で行います。


