2026年8月22日
2026年8月22日
WordPressのカノニカルURL(rel=”canonical”)を正しく設定して重複コンテンツを防ぐ
WordPressは個別の投稿や固定ページに rel="canonical" を自動で出力するため、多くのサイトでは「設定を足す」より「矛盾する信号を減らす」ことのほうが効果的です。この記事では、WordPressで重複URLが生まれる典型的な原因、コアとSEOプラグインがそれぞれどこでカノニカルを出しているか、個別に正規URLを指定する方法、そしてSearch Consoleで正しく伝わっているかを確認する手順までを順に説明します。
カノニカルURLは「指示」ではなく「強いヒント」
カノニカルURL(正規URL)は、内容がほぼ同じページが複数のURLで表示されるときに「代表として扱ってほしいURLはこれです」と検索エンジンに伝える仕組みです。HTMLの <head> 内に次のような1行を置きます。
<link rel="canonical" href="https://example.com/sample-post/" />
Googleの公式ドキュメント(Search Central)では、正規化の方法としてリダイレクト、rel="canonical"、サイトマップへの掲載が挙げられており、前の2つは強いシグナル、サイトマップは弱いシグナルという位置づけです。重要なのは、どれもGoogleにとっては参考情報であり、ほかのシグナル(内部リンク、サイトマップ、リダイレクト、HTTPSかどうか等)と食い違っていると、Googleは別のURLを正規URLとして選ぶことがある点です。
なお、重複コンテンツがあるだけで手動対策のようなペナルティを受けるわけではありません。問題は、評価やクロールが複数URLに分散することと、検索結果に意図しないURLが表示されることです。
WordPressで重複URLが生まれる主な原因
まず自分のサイトで同じ内容がどんなURLで開けてしまうかを把握します。WordPressでよく見かけるのは次のパターンです。
http://とhttps://、wwwありとなしが両方とも表示できる- 末尾スラッシュの有無(
/sample-postと/sample-post/)で両方とも200を返す ?utm_source=...などの計測用パラメータ付きURLが外部から大量にリンクされる- 添付ファイルページ(画像ごとの個別ページ)が残っている
- 同じ商品説明や定型文をほぼそのまま使った記事が複数ある
このうち上の2つは、カノニカルではなく301リダイレクトで1つに統一するのが基本です。「設定」→「一般」の「WordPressアドレス」と「サイトアドレス」を正しいプロトコル・ホスト名にしたうえで、サーバー側でも旧URLから新URLへリダイレクトさせます。リダイレクトはユーザーも検索エンジンも同じURLにたどり着くため、カノニカルよりも確実性の高い統一方法です。
添付ファイルページについては、WordPress 6.4以降の新規インストールでは既定で無効になり、添付ファイルのURLはファイル本体へリダイレクトされるようになりました。古くから運用しているサイトでは有効なままのことがあるため、SEOプラグインの設定などで無効化やリダイレクトの状態を確認しておくとよいでしょう。
計測パラメータ付きURLは、後述のとおりWordPressのカノニカルがパラメータを含まないURLを指すため、通常は特別な対応は要りません。
コアとSEOプラグイン、どちらがカノニカルを出しているか
WordPressコアは、wp_head アクションに登録された rel_canonical() で、投稿・固定ページなどの個別ページ(is_singular() が真になるページ)にだけカノニカルを出力します。値は wp_get_canonical_url() が返すパーマリンクで、本文を <!--nextpage--> で分割した2ページ目以降やコメントのページ番号は反映されますが、?utm_source= のような任意のクエリ文字列は含まれません。一方、カテゴリーやタグなどのアーカイブページには、コアはカノニカルを出力しません。
Yoast SEO、Rank Math、All in One SEO といったSEOプラグインを有効化すると、多くの場合コアの出力は止められ、プラグインが独自にカノニカルを出力します。プラグイン側はアーカイブページやページ送り(2ページ目以降)にも出力するのが一般的です。
ここでつまずきやすいのが「カノニカルが2本出ている」状態です。テーマが独自に <link rel="canonical"> を直書きしている、あるいはSEOプラグインを2種類同時に有効にしていると、異なるURLを指すタグが重複し、Googleがどちらも無視する原因になります。ブラウザでページを開いてソースを表示し、rel="canonical" で検索して、1本だけかどうかを確かめてください。コマンドラインなら次のように確認できます。
curl -s https://example.com/sample-post/ | grep -i 'rel="canonical"'
キャッシュプラグインを使っている場合は、ログアウトした状態の表示(キャッシュされたHTML)でも確認しておくと安心です。
個別ページで正規URLを指定する方法
SEOプラグインの投稿編集画面から指定する
内容が重複する記事のうち、残したい側を正規URLにしたい場合は、SEOプラグインの投稿ごとの設定を使うのが手軽です。Yoast SEOでは投稿編集画面のYoast SEO欄の「高度な設定」に、Rank Mathでは「Advanced」タブに、カノニカルURLを入力する欄があります(2026年10月現在)。項目名や配置はバージョンによって変わることがあります。空欄のままなら、そのページ自身のURLが自己参照カノニカルとして出力されます。
入力するURLは https:// から始まるドメイン込みのフルURLにします。Googleは相対パスも解釈しますが、ドメインの書き間違いやステージング環境のURLが混入する事故を防ぐ意味でも、フルURLで書くほうが安全です。
コードでコアのカノニカルを変更する
SEOプラグインを使っていない場合は、コアの get_canonical_url フィルターで値を差し替えられます。子テーマの functions.php か小さな自作プラグインに書き、編集前にはファイルのバックアップを取ってください。
<?php
// 投稿ID 123 の正規URLを、内容の元になった記事に向ける例
add_filter( 'get_canonical_url', function ( $canonical_url, $post ) {
if ( 123 === $post->ID ) {
return 'https://example.com/original-article/';
}
return $canonical_url;
}, 10, 2 );
このフィルターはコアの rel_canonical() が出力するときにだけ効きます。SEOプラグインがカノニカルを出している環境では反映されないため、その場合はプラグインの画面か、プラグインが用意しているフィルター(Yoast SEOの wpseo_canonical など)を使います。
やってはいけない設定と、矛盾する信号
カノニカルの効果を打ち消してしまう代表的な設定を挙げます。
- ページ送りの2ページ目以降を1ページ目に向ける:カテゴリー一覧の2ページ目以降は内容が違うため、各ページが自分自身を正規URLにするのがGoogleの推奨です。1ページ目に向けると、2ページ目以降にしか載っていない記事が見つかりにくくなります。
- noindexとカノニカルを同時に使う:「このページは正規URLの複製」と「インデックスしないで」を同時に伝えると、意図が曖昧になります。重複の統合が目的ならカノニカルだけにします。
- robots.txtでブロックしたURLをカノニカルの代わりにする:クロールを止めるとGoogleはカノニカルタグ自体を読めません。robots.txtは重複対策の手段ではありません。
- リダイレクトしているURLやnoindexのURLを正規URLにする:正規URLは200を返し、インデックス可能なページである必要があります。
- サイトマップや内部リンクが正規でないURLを指している:サイトマップには正規URLだけを載せ、メニューや本文中のリンクも正規URLにそろえます。
Search Consoleで正しく伝わっているか確認する
設定後は、Search Consoleの「URL検査」で対象URLを調べます。結果の中に、サイト側が指定した正規URL(ユーザー指定)と、Googleが選んだ正規URLが並んで表示されるので、両者が一致しているかを見ます。一致していなければ、上の「矛盾する信号」のどれかに当てはまっていないかを点検します。
サイト全体の傾向は「ページのインデックス登録」レポートで確認できます。「代替ページ(適切な canonical タグあり)」は意図どおり重複側が除外されている状態なので、通常は対応不要です。「重複しています。Google により、ユーザーがマークしたページとは異なる正規ページが選択されました」に入っているURLは、指定とGoogleの判断が食い違っているため、内容の差別化か、統合とリダイレクトを検討します(表記はSearch Consoleの更新で変わることがあります)。
反映には再クロールが必要なため、数日から数週間かかるのが普通です。URL検査の「インデックス登録をリクエスト」は重要なページに絞って使ってください。
まとめ
- WordPressコアは個別ページに自己参照カノニカルを自動出力し、SEOプラグインを入れるとプラグイン側の出力に切り替わる
- プロトコルやwwwの違いはカノニカルではなく301リダイレクトで統一する
- カノニカルタグがページ内に1本だけかをソースで確認する
- 個別指定はSEOプラグインの投稿設定か
get_canonical_urlフィルターで行い、フルURLで書く - ページ送りの1ページ目への集約、noindexとの併用、robots.txtでのブロックは避ける
- URL検査でユーザー指定とGoogle選択の正規URLが一致しているかを確かめる