canonical URLとは?意味と設定方法

rel canonicalとは何か、なぜ検索エンジンに必要か、HTML・HTTPヘッダー・主要CMSでcanonicalタグを設定する方法を解説します。

正規URL(canonical URL)とは

正規URL(rel canonical)は、検索エンジンに「このページの複数のバージョンのうち、これがメインです」と伝えるHTMLタグです。同じコンテンツが複数のアドレスで見られる重複コンテンツという、SEOで最も多い問題の1つを解決します。

canonicalがないと、どのバージョンをメインにするかは検索エンジンが自分で決めます。インデックスに入れたくないほうが選ばれることも少なくありません。このタグがあれば、優先するURLを明示できます。GoogleもYandexも、たいていはこのヒントに従います。

canonicalは、重複ページのシグナルを1つのメインバージョンにまとめます。検索結果に表示されるのは、そのバージョンです。

数字で見るcanonical

2009

導入された年

Google、Yahoo、Bingがrel canonicalへの対応を共同で発表。業界横断で初めてのSEO標準です

~60%

重複があるサイト

Ahrefsによると、約60%のサイトに、canonicalが必要な重複コンテンツのページがあります

3

対応する検索エンジン

Google、Yandex、Bingがrel canonicalに対応。指示ではなくヒントなので、検索エンジンが従うのはほとんどの場合で、すべてではありません

≠ 301

リダイレクトではない

canonicalは検索エンジンへのヒントで、ユーザーのリダイレクトではありません。重複ページは元のURLのままアクセスできます

canonicalの意味と基本の考え方

「canonical」という言葉は、数学と論理学からWebに入ってきました。標準形とは、対象をもっとも単純で標準的に表した形のことです。URLの文脈では、正規URLは検索エンジンがランキングとインデックス登録に使う「公式」のリンクで、ほかのバージョンはすべて重複として扱われます。

canonicalと301リダイレクトは、よく混同されます。大きな違いは、リダイレクトが指示で、canonicalがヒントであることです。リダイレクトはユーザーを新しいURLに実際に移動させます。canonicalはユーザーを元のページに残したまま、インデックスではどのURLをメインとして扱うかを検索エンジンに伝えます。

比較項目rel="canonical"301リダイレクト
シグナルの種類ヒント指示
ユーザーに表示されるもの重複ページのURL移動先(メイン)のURL
検索エンジンがインデックスに登録するもの正規URLのみ移動先のURLのみ
リンク評価の引き継ぎ一部(100%ではない)ほぼ全部(約99%)
両方のURLにアクセスできるかできるできない(重複URLは301を返す)
使う場面重複、フィルター、ページネーションページの恒久的な移転

canonicalタグの追加方法

canonicalタグは、重複ページの<head>内に置きます。構文は2009年から変わっていません。空要素の<link>が1つあるだけです。href属性には、完全な絶対URLを書く必要があります。

html
<head>
  <meta charset="UTF-8">
  <title>Laptops — buy at TechShop</title>
  <link rel="canonical" href="https://example.com/catalog/laptops/">
</head>
よくある間違い: <meta rel="canonical">や<meta name="canonical">と書く例がありますが、そのようなタグはありません。正しい形は、<head>内の<link rel="canonical" href="...">だけです。meta形式は、検索エンジンに完全に無視されます。

PDFや画像など、HTMLの<head>がないファイルでは、LinkHTTPヘッダーでcanonicalを送れます。サーバーを自分で管理しているなら、次のnginx設定は、HTML以外のリソースにも通常のページにも使えます。

nginx
# nginx.conf — canonical via HTTP header
# For PDF and other non-HTML resources:
location ~* \.pdf$ {
    add_header Link '<https://example.com/docs/price-list.pdf>; rel="canonical"';
}

# For dynamic URLs with GET parameters:
location /catalog/ {
    add_header Link '<https://example.com/catalog/>; rel="canonical"';
}

最も破られやすいcanonicalのルールが5つあります。

  • 絶対URLだけを使う。常に完全なアドレスを書きます。/page/ではなくhttps://example.com/page/です。相対URLのcanonicalも技術的には使えますが、ドメインやプロトコルが変わると正しく動作しなくなります。
  • rel canonicalはhttps。 canonicalはページのhttps版を指します。サイトがHTTPSなのにcanonicalがhttp://を指していると、検索エンジンが正しく解決できない重複が生まれます。
  • 1ページにcanonicalは1つ。 hrefの値が異なる<link rel="canonical">が複数あると、検索エンジンはすべてを無視するか、どれか1つを任意に選びます。
  • canonicalの指す先にアクセスできる。 404や301のURLを指すタグは意味がありません。メインのページは200 OKを返す必要があります。
  • 末尾スラッシュを統一する。メインのURLが/catalog/(スラッシュあり)なら、canonicalにもスラッシュを付けます。表記が混在すると、新たな重複が生まれます。
自己参照canonicalは普通のことで、むしろ推奨されます。ページのcanonicalは、そのページ自身を指せます。これは、このURLがメインだと検索エンジンに明示するシグナルです。メインのページを含め、サイトのすべてのページに自己参照canonicalを付けます。

canonicalを使う場面

canonicalが解決するコンテンツ重複の典型パターンは6つあります。それぞれ、実際のURLの例で見ていきます。

パターン1GETパラメーターとUTMタグ

/catalog/?sort=priceや/catalog/?utm_source=emailのようなURLは、/catalog/と同じコンテンツです。これらすべてのページのcanonicalは/catalog/を指します。ECサイトで最も多い重複の原因です。

パターン2canonicalとページネーション

/blog/page/2/や/blog/page/3/のようなページには固有のコンテンツがあります。そのため、ページネーションのcanonicalは、通常は各ページを自己参照にします。ページネーションの全ページを1ページ目に向けてはいけません。固有のコンテンツがインデックスされなくなります。

パターン3フィルターと並べ替え

フィルター付きのカテゴリページは、/shoes/?color=red&size=42のようなURLを何百も生成することがあります。フィルターページに固有のコンテンツと検索需要があるなら、インデックスに登録します。親カテゴリの重複なら、canonicalを/shoes/に向けます。

パターン4www、http/https、大文字小文字

ホームページには4つのバージョンがあります。http://example.com、https://example.com、http://www.example.com、https://www.example.comです。メインを1つ選び(できればwwwなしのhttps://example.com)、ほかのすべてからcanonicalと301を設定します。

パターン5クロスドメインのcanonical

自分の記事がパートナーサイトに転載されている場合(シンジケーションやミラー)は、元の記事を指すcanonicalを追加してもらいます。Googleはクロスドメインのcanonicalに対応しています。自分のドメインを元の情報源として扱い、リンク評価を引き継ぎます。

パターン6Non canonicalとアグリゲーター

自分が関与しないまま、ページが複数のアグリゲーターに掲載されている場合は、元のページに自己参照canonicalを追加します。重複の中からメインのバージョンを選ぶとき、Googleは自己参照canonicalが明示されたURLを優先します。

Non canonicalはエラーではなく、ステータスです。 Google Search Consoleの「代替ページ(適切なcanonicalタグあり)」というステータスは、Googleがcanonicalを受け入れ、重複ページをインデックスに登録していないことを示します。意図してcanonical化したページでは、期待どおりの結果です。

CMSでのcanonical:WordPress、Bitrix、Tilda

人気のCMSの多くは、canonicalを自動で生成するか、組み込みのツールを備えています。手動で設定が必要なのは、標準的でないケースや、CMSが正しく処理しない場合だけです。

WordPress

Yoast SEOとRank Mathのプラグインは、すべてのページと投稿に自己参照の<link rel="canonical">を自動で追加します。これらのプラグインを使っていない場合は、テーマのfunctions.phpに次のコードを追加します。

php
<?php
// functions.php — canonical without an SEO plugin
add_action('wp_head', function() {
    if (is_singular()) {
        echo '<link rel="canonical" href="' . esc_url(get_permalink()) . '">' . "\n";
    } elseif (is_home() || is_front_page()) {
        echo '<link rel="canonical" href="' . esc_url(home_url('/')) . '">' . "\n";
    }
}, 1);

Bitrix

1C-Bitrixでは、ページのプロパティでcanonicalを設定します。標準的な方法は、コンポーネントで値を代入し、メインテンプレートのheader.phpで出力することです。

php
<?php
// In a component or init.php: set the canonical
$canonicalUrl = 'https://' . SITE_SERVER_NAME . $APPLICATION->GetCurPage(false);
$APPLICATION->SetPageProperty('canonical', $canonicalUrl);

// In the template's header.php: output the tag
$canonical = $APPLICATION->GetPageProperty('canonical');
if ($canonical):
?><link rel="canonical" href="<?= htmlspecialchars($canonical, ENT_QUOTES, 'UTF-8') ?>">
<?php endif; ?>

Tilda

Tilda:各ページで、ページ設定 → SEOタブ → Canonical URLフィールドを開きます。Tildaがタグを<head>に自動で挿入します。クロスドメインのcanonicalや独自のケースでは、Zero Blockを使い、<head>にHTMLを挿入します。

エラーとGoogle Search Consoleでの確認

canonicalの状態を監視する主なツールは、Google Search Consoleです。インデックス登録 → ページのレポートには、canonicalに関するステータスがいくつか表示されます。

GSCのステータス意味対処
代替ページ(適切なcanonicalタグあり)Googleがcanonicalを受け入れた状態です。重複ページはインデックスに登録されず、リンク評価はメインのページに渡ります問題なし。期待どおりの動作です
重複、Googleが選択したcanonicalがユーザーの選択と異なるGoogleがcanonicalを無視し、別のURLをメインに選びました絶対URLか、301がないか、両ページのコンテンツが同一かを確認します
重複、ユーザーによりcanonicalとして選択されていないcanonicalのない類似ページが見つかりました重複ページのすべてにcanonicalタグを追加します
登録済みページがメインとしてインデックスに登録されました(自己参照canonical、または明示的に選択)メインのページでは正常です

GSCに加えて、HTTPレスポンスの段階でもcanonicalを確認します。ツールなしで最も手早いのは、ブラウザーのソース表示(Ctrl+U → canonicalを検索)かcurlです。

bash
# Check canonical in HTTP header:
curl -sI https://example.com/catalog/?sort=price | grep -i link

# Check canonical in HTML (first 2000 bytes of response):
curl -s https://example.com/page/ | head -c 2000 | grep -i canonical
canonical設定でよくある間違い:
  • canonicalチェーン。ページA → canonical B → canonical Cのような連鎖です。検索エンジンは直接の指定を好みます。canonicalは、中継なしで最終的なメインURLに向けます。
  • リダイレクトを指すcanonical。 301のURLを指すcanonicalは、あいまいなシグナルになります。検索エンジンは連鎖をたどる必要があるので、最終URLを直接指すほうが確実です。
  • noindexとcanonicalの併用は矛盾。 noindexとcanonicalの両方があるページは、相反するシグナルを送ります。どちらか一方にします。ページをnoindexにするか、メインのURLへのcanonicalを設定するかです。
  • JavaScriptで挿入するcanonical。 GoogleはJSで挿入されたcanonicalタグも処理できますが、遅く、確実性も下がります。HTMLの<head>に静的な<link>を置くのが基本です。
ツールなしの簡単な確認:任意のページを開き、Ctrl+U(ページのソース)を押してcanonicalを検索します。タグが<head>内になければ、テンプレートに問題があります。canonicalが404や想定外の外部ドメインを指しているなら、重大な設定ミスです。

FAQ

SEO監査でよく出てくる、canonicalについての質問に答えます。

まとめ

rel=canonicalを使う場面と、実際の使い方。

canonicalタグは、テクニカルSEOの基本的なツールの1つです。実装は簡単ですが、URLを動的に生成するサイトで設定を誤ったり、タグがなかったりすると、深刻なインデックス登録の問題をたびたび引き起こします。絶対URL、rel canonicalはhttps、チェーンなし。この3つの基本ルールで、起こりうるエラーの80%は解消します。

まず現状を確認します。GSC → ページのレポートで、「重複」と「未登録」のステータスで絞り込みます。canonicalが欠けている箇所や、検索エンジンに上書きされている箇所がすぐにわかります。

canonicalと301リダイレクトの違いは何ですか?
301は指示です。ユーザーも検索エンジンも新しいURLに実際に移動し、古いURLはなくなります。canonicalはヒントです。ユーザーは現在のURLに留まり、検索エンジンはインデックス登録のためにだけ正規URLを数えます。ページが恒久的に移転したなら301を使います。同じコンテンツを意図的に複数のURLで同時に公開するなら、canonicalを使います。
canonicalを別ドメインのページに向けられますか?
できます。クロスドメインのcanonicalは、GoogleもYandexも対応しています。たとえば、自分の記事がパートナーサイトに転載された場合は、パートナーに<link rel="canonical" href="https://your-site.com/article/">を追加してもらいます。Googleはリンク評価とコンテンツの帰属先を、自分のドメインに移します。
Googleがcanonicalを無視するのはなぜですか?
検索エンジンがcanonicalを無視する理由はいくつかあります。(1)正規URLと重複ページでコンテンツが異なる。(2) canonicalがリダイレクトやアクセスできないURLを指している。(3)被リンクの大半が、正規URLではなく重複URLに向いている。(4) wwwありとなしの両方でアクセスでき、メインのバージョンへの301リダイレクトがない。
クローラーなしでcanonicalを確認するには?
方法は3つあります。(1)ページのソース:Ctrl+Uでcanonicalを検索。(2) Chrome DevTools:Elementsタブで<link relを検索。(3) Google Search Console:ページのレポートでURLをクリックすると、サイドパネルに「Googleが選択したcanonical」と「ユーザーが宣言したcanonical」の両方が表示されます。
GSCの「代替ページ(適切なcanonicalタグあり)」のステータスは、どう修正しますか?
このステータスは修正不要です。canonicalが正しく機能していて、Googleがそのページを重複と認識し、インデックスに登録していないことを意味します。そのページを単独でインデックスさせたいなら、canonicalを削除するか、自己参照canonical(自分自身を指す)に置き換えます。

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it