canonicalとは?SEOでの正しい使い方【WordPress対応】

SEOにおける正規タグの使い方 wordpress引っ越し

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設定方法

以下のプラグインで自動設定されます。

・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評価を最大化することができます。

タイトルとURLをコピーしました