SEO対策をしていると「canonical(カノニカル)」という言葉を見かけることがあります。
canonicalは、重複コンテンツを防ぐための非常に重要な設定であり、正しく使わないと検索順位に悪影響を与える可能性があります。
特にWordPressでは、URLの違いによって同じ内容のページが複数存在するケースが多く、canonicalの理解は必須です。
この記事では、初心者でも分かるように、canonicalの基本から設定方法、SEOでの正しい使い方までプロ目線で解説します。
WordPress canonicalとは?(カノニカル)とは?
canonicalとは、「正規URL」を検索エンジンに伝えるための設定です。
同じ内容のページが複数ある場合、どのURLを評価すべきかをGoogleに伝える役割があります。
なぜcanonicalがSEOに重要なのか
canonicalを設定しないと、以下の問題が発生します。
・重複コンテンツと判断される
・検索順位が分散する
・評価が正しく反映されない
canonicalを正しく設定することで、SEO評価を1つのURLに集約できます。
canonicalが必要になるケース
URLが複数存在する場合
例:
・https://example.com/page
・https://example.com/page/
・https://example.com/page?utm=xxx
これらは同じ内容でも別URLとして認識されるため、canonicalが必要です。パラメータ付きURL
広告や計測URL(?utmなど)はcanonicalで正規URLを指定します。記事の重複
似た内容の記事や、カテゴリ・タグページなども対象です。WordPressでのcanonical設定方法
SEOプラグイン(おすすめ)
以下のプラグインで自動設定されます。
・All in One SEO(AIOSEO)
・Yoast SEO
通常は自動で正規URLが設定されるため、初心者は特に設定不要です。
手動で設定する場合
テーマや「functions.php」でカスタマイズ可能です。
AIOSEOなどのSEOプラグインを使用している場合は、
functions.phpで無理に追加しない方が安全です。
重複出力になると逆効果となりますので、注意してください。
まず大前提
canonical は通常、<head> 内にこのように出します。
<link rel="canonical" href="https://example.com/sample-page/" />WordPress で functions.php から出す場合は、wp_head フックを使います。
子テーマ(親テーマを使用してる場合は親テーマ)の functions.php に追加します。
<?php
/**
* Canonical tag を head に出力する
* 注意:
* - AIOSEO / Yoast などが canonical を出力している場合は重複するため使わない
* - 子テーマの functions.php に追加する
*/
function ms_output_canonical_tag(): void {
// 管理画面では出力しない
if ( is_admin() ) {
return;
}
// 検索結果ページや404ページには canonical を出さない方が無難
if ( is_search() || is_404() ) {
return;
}
// 現在ページの正規URLを取得
$canonical_url = '';
if ( is_singular() ) {
$canonical_url = get_permalink();
} elseif ( is_home() || is_front_page() ) {
$canonical_url = home_url( '/' );
} elseif ( is_category() || is_tag() || is_tax() ) {
$term = get_queried_object();
if ( $term instanceof WP_Term ) {
$canonical_url = get_term_link( $term );
}
} elseif ( is_post_type_archive() ) {
$canonical_url = get_post_type_archive_link( get_post_type() );
} elseif ( is_author() ) {
$author = get_queried_object();
if ( $author instanceof WP_User || isset( $author->ID ) ) {
$canonical_url = get_author_posts_url( (int) $author->ID );
}
} elseif ( is_date() ) {
$canonical_url = get_permalink();
}
// URLが取れなければ何もしない
if ( empty( $canonical_url ) || is_wp_error( $canonical_url ) ) {
return;
}
// 出力
echo '<link rel="canonical" href="' . esc_url( $canonical_url ) . '">' . "\n";
}
add_action( 'wp_head', 'ms_output_canonical_tag', 1 );子テーマ(親テーマを使用してる場合は親テーマ)の functions.php に追加します。
このコードで何をしているか、これで次を自動判定しています。
- 投稿ページ
- 固定ページ
- トップページ
- カテゴリ
- タグ
- カスタムタクソノミー
- 投稿タイプアーカイブ
- 著者ページ
一方で、次は出さない設定です。
- 管理画面
- 検索結果ページ
- 404ページ
この方が初心者には安全です。
例えば、ある固定ページだけ別URLを正規URLにしたい場合です。
<?php
function ms_custom_canonical_for_specific_page(): void {
if ( is_admin() ) {
return;
}
if ( is_page( 'sample-page' ) ) {
echo '<link rel="canonical" href="' . esc_url( 'https://example.com/master-page/' ) . '">' . "\n";
}
}
add_action( 'wp_head', 'ms_custom_canonical_for_specific_page', 1 );使いどころ
- LPの複製ページ
- 内容がほぼ同じページを1本に評価集約したい時
カテゴリ2ページ目、3ページ目まで全部1ページ目に canonical すると、逆にまずいことがあります。
ページ分割がある場合は、そのページ自身のURLを canonical にするのが基本です。
例として、カテゴリのページ番号も含めて正規URLを出すなら下記のようになります。
<?php
function ms_category_canonical_with_pagination(): void {
if ( ! is_category() ) {
return;
}
$term = get_queried_object();
if ( ! ( $term instanceof WP_Term ) ) {
return;
}
$paged = max( 1, get_query_var( 'paged' ) );
$url = get_term_link( $term );
if ( is_wp_error( $url ) ) {
return;
}
if ( $paged > 1 ) {
$url = trailingslashit( $url ) . 'page/' . $paged . '/';
}
echo '<link rel="canonical" href="' . esc_url( $url ) . '">' . "\n";
}ただし、これも SEOプラグインが出しているなら不要です。
例えばこういうURLです。
?utm_source=x?fbclid=xxx?replytocom=123
こうしたパラメータを除いたURLを canonical にしたい場合の考え方です。
<?php
function ms_clean_canonical_url( string $url ): string {
$parsed = wp_parse_url( $url );
if ( empty( $parsed['scheme'] ) || empty( $parsed['host'] ) ) {
return $url;
}
$clean_url = $parsed['scheme'] . '://' . $parsed['host'];
if ( ! empty( $parsed['path'] ) ) {
$clean_url .= $parsed['path'];
}
return $clean_url;
}
function ms_output_clean_canonical(): void {
if ( is_admin() || is_search() || is_404() ) {
return;
}
if ( ! is_singular() ) {
return;
}
$url = get_permalink();
$url = ms_clean_canonical_url( $url );
echo '<link rel="canonical" href="' . esc_url( $url ) . '">' . "\n";
}
add_action( 'wp_head', 'ms_output_clean_canonical', 1 );ただし、通常の WordPress 投稿URLなら get_permalink() 自体がきれいなURLを返すので、そこまで必要ないことが多いです。
functions.phpで設定する時の注意点。かなり重要です。
1. 親テーマではなく子テーマで編集
親テーマ更新で消えます。
2. 既存のSEOプラグインと重複させない
canonical の二重出力は避ける。
3. 404・検索結果に無理に出さない
誤設定しやすいです。
4. アーカイブのページ分割に注意
全部1ページ目へ寄せない。
5. 編集前にバックアップ
functions.php のミスはサイト表示不具合につながります。
実務でよくある使い分け
| AIOSEO 任せでいいケース | functions.php で触るケース |
|---|---|
| 通常の投稿 固定ページ カテゴリ タグ 基本的なアーカイブ | LP複製ページ 広告流入専用URL パラメータ付き独自ページ 特殊テンプレート |
canonicalとリダイレクトの違い
canonicalとリダイレクトは似ていますが、役割が異なります。
| 項目 | canonical | リダイレクト |
|---|---|---|
| 役割 | 正規URLを伝える | 強制転送 |
| ユーザー | そのまま閲覧 | 別URLへ移動 |
| SEO | 評価を集約 | 評価を引き継ぐ |
よくあるミスと注意点
canonicalの設定漏れ
重複ページに設定しないとSEO評価が分散します。
間違ったURL指定
存在しないURLを指定すると評価が落ちます。
noindexとの混同
canonicalとnoindexは別物です。
SEOでの正しい使い方(プロ視点)
canonicalはSEO戦略として活用できます。
評価を1ページに集中
類似ページの評価をまとめる
不要なURLの整理
タグ・アーカイブの整理
EC・LP対策
商品ページの重複回避
最後に
canonicalは、SEO対策において非常に重要な設定です。
特にWordPressでは、URLの違いによる重複が発生しやすいため、正しく理解しておく必要があります。
初心者の方は、
・通常はAIOSEOに任せる
・特殊ケースだけfunctions.phpで制御する
これが望ましいかと思います。
適切に設定することで、検索順位を安定させ、SEO評価を最大化することができます。


