同じ内容のページが複数のURLで存在するとき、AIクローラはどのURLを「正規」と判断するのでしょうか。 この判断を誤ると、AI検索で自社コンテンツが引用されない、あるいは意図しないURLが引用される問題が起きます。
canonicalタグは、重複コンテンツの中から「このURLが正規版です」と宣言するためのHTMLタグです。 Google検索では長年使われてきた仕組みですが、AI検索においても同様の役割を果たすと考えられます。
canonicalタグの基本
canonicalタグは、HTMLの <head> 内に記述するlinkタグです。
<head>
<link rel="canonical" href="https://example.com/blog/article-1" />
</head>
この記述は「このページの正規URLは https://example.com/blog/article-1 です」という宣言です。
重複が発生する一般的なケース
https://example.com/blog/article-1
https://example.com/blog/article-1?utm_source=twitter
https://www.example.com/blog/article-1
http://example.com/blog/article-1
https://example.com/blog/article-1/
これらはすべて同じコンテンツを返しますが、クローラからは別々のページに見えます。 canonicalタグがなければ、クローラは独自に正規URLを推定しますが、その結果は予測できません。
AIクローラへの影響
重複排除への影響
LLMのトレーニングデータには重複排除(deduplication)の処理が含まれています。 同じ内容が複数URLで存在する場合、canonicalタグが設定されていれば正規URLが優先的に残ります。
RAGへの影響
AI検索の多くはRAG(Retrieval-Augmented Generation)で動いています。 RAGの検索結果に重複ページが混在すると、1つの情報源が複数枠を占有してしまいます。
canonicalで正規化しておくことで、引用URLが安定します。
自己参照canonicalの重要性
自己参照canonicalとは、ページが自身のURLをcanonicalに指定することです。
<!-- https://example.com/blog/article-1 のページ -->
<link rel="canonical" href="https://example.com/blog/article-1" />
「自分自身を指すなら不要では」と思われがちですが、パラメータ付きURLの正規化に効果があります。
ユーザーが ?utm_source=twitter 付きのURLでアクセスしても、canonicalタグがあれば正規URLが伝わります。
フレームワーク別の実装
// Next.js App Router
import { Metadata } from "next";
export async function generateMetadata({ params }): Promise<Metadata> {
return {
alternates: {
canonical: `https://example.com/blog/${params.slug}`,
},
};
}
---
// Astro
const canonicalUrl = new URL(Astro.url.pathname, Astro.site).href;
---
<link rel="canonical" href={canonicalUrl} />
設定パターン
www有無の正規化
<!-- www.example.com のページでも non-www をcanonicalに指定 -->
<link rel="canonical" href="https://example.com/blog/article-1" />
サーバー側でも301リダイレクトを設定します。
server {
server_name www.example.com;
return 301 https://example.com$request_uri;
}
末尾スラッシュの統一
サイト全体でどちらかに統一し、canonicalタグ、サイトマップ、内部リンクのすべてで同じ形式を使います。
コンテンツシンジケーション
自社記事が他メディアに転載される場合、転載先に自社URLをcanonicalとして設定してもらいます。
<!-- 転載先のページ -->
<link rel="canonical" href="https://example.com/blog/original-article" />
AIが転載記事を見つけた場合でも、引用元は自社URLになります。
HTTPヘッダーでのcanonical
PDFなどHTML以外のコンテンツには、HTTPヘッダーでcanonicalを指定します。
HTTP/1.1 200 OK
Link: <https://example.com/docs/whitepaper.pdf>; rel="canonical"
location ~ \.pdf$ {
add_header Link '<https://example.com$request_uri>; rel="canonical"';
}
よくある設定ミス
相対URLの使用。 canonicalタグには絶対URLを使ってください。 相対URLでも動作しますが、プロトコルやドメインの解釈がクローラによって異なるリスクがあります。
canonicalタグの重複。 CMSプラグインとテーマの両方が出力しているケースがあります。 複数存在すると、クローラはどちらを正規と判断すべきかわかりません。
noindexページへのcanonical。 noindexのページをcanonicalの参照先にすると、正規版がインデックスから除外される矛盾が生じます。
存在しないURLへのcanonical。 削除されたページのURLを指定しても、クローラは404を受け取るため機能しません。
リダイレクト先とcanonicalの矛盾。 リダイレクト先のページのcanonicalは、そのページ自身を指すべきです。
確認方法
# ページのcanonicalタグを抽出
curl -s https://example.com/blog/article-1 \
| grep -i 'rel="canonical"'
# HTTPヘッダーのcanonicalを確認
curl -sI https://example.com/blog/article-1 \
| grep -i "link:.*canonical"
複数ページの一括チェック
import requests
from bs4 import BeautifulSoup
def check_canonical(url: str) -> dict:
try:
r = requests.get(url, timeout=10)
soup = BeautifulSoup(r.text, "html.parser")
tag = soup.find("link", rel="canonical")
canonical = tag["href"] if tag else None
return {
"url": url,
"canonical": canonical,
"is_self_referencing": canonical == url if canonical else False,
}
except requests.RequestException as e:
return {"url": url, "error": str(e)}
urls = [
"https://example.com/blog/article-1",
"https://example.com/blog/article-1?utm_source=twitter",
"https://www.example.com/blog/article-1",
]
for url in urls:
result = check_canonical(url)
print(f"{url} → {result.get('canonical', 'None')}")
サイトマップとの一貫性
サイトマップのURLとcanonicalタグのURLは一致させてください。
# 一貫性のある設定
サイトマップ: https://example.com/blog/article-1
canonical: https://example.com/blog/article-1
内部リンク: https://example.com/blog/article-1
# 問題のある設定
サイトマップ: https://example.com/blog/article-1/ ← スラッシュあり
canonical: https://example.com/blog/article-1 ← スラッシュなし
運用チェックリスト
- すべてのページに自己参照canonicalが設定されているか
- canonicalのURLとサイトマップのURLが一致しているか
- canonicalのURLが200を返すか
- canonicalタグが重複していないか
- HTTP/HTTPS、www有無が統一されているか
サイトリニューアル時にcanonicalタグが消失したり、URLの変更に追従できていないケースは少なくありません。 定期的な確認が必要です。
まとめ
canonicalタグは、AIクローラに「このURLが正規版です」と宣言する最も直接的な手段です。 AI検索における引用URLの安定性と、重複排除の精度に影響します。
最低限の対応として、すべてのページに自己参照canonicalを設定してください。 その上で、パラメータ付きURL、www有無、末尾スラッシュの正規化を統一し、サイトマップとの一貫性を保つことがGEO対策としてのcanonical運用の基本です。