2026年7月9日
2026年7月9日
WordPressのcanonical(正規URL)をwp_headから削除・変更する方法と注意点
WordPress コアが出力する canonical タグは、remove_action( 'wp_head', 'rel_canonical' ); の1行で削除できます。ただし、canonical を消す必要がある場面はかなり限られており、多くの場合は「削除」ではなく「URLの変更」か「重複の解消」が正しい対処です。この記事では、canonical がどこから出力されているかの確かめ方、コア・SEOプラグインそれぞれの止め方と変え方、そして作業前に知っておきたい SEO 上のリスクを説明します。
canonical タグとは何か
canonical タグ(<link rel="canonical" href="...">)は、同じ内容を表示する URL が複数あるときに「このページの代表となる URL はこれです」と検索エンジンに伝えるための要素です。パラメーター付きの URL、末尾スラッシュの有無、印刷用ページなど、内容がほぼ同じ URL が生まれるのは珍しいことではありません。canonical はそれらの評価を代表 URL にまとめてもらうための手がかりになります。
ここで押さえておきたいのは、canonical は検索エンジンへの「指示」ではなく「ヒント」だという点です。Google は canonical タグ以外にも、リダイレクトやサイトマップ、内部リンクなどを総合して代表 URL を選びます(2026年10月現在)。これは Google の公開情報に基づく説明です。canonical を変更・削除したからといって、検索順位がどうなるかを約束できるものではありません。
WordPress コアの canonical 出力の仕組み
WordPress は標準で、wp_head アクションに rel_canonical() という関数を登録しています。テーマのヘッダーで wp_head() が呼ばれると、この関数が canonical タグを出力します。
- 出力されるのは、個別の投稿・固定ページなどの単一ページ表示(
is_singular()が真になるページ)だけ。トップの記事一覧、カテゴリーアーカイブ、検索結果などではコアは canonical を出さない - URL は
wp_get_canonical_url()で組み立てられ、基本はその投稿のパーマリンク。改ページした投稿の2ページ目やコメントページでは、それに応じた URL になる - 組み立てられた URL は
get_canonical_urlフィルターを通るため、ここで書き換えられる
つまり、コアの canonical は「単一ページで、そのページ自身のパーマリンクを指す」という控えめな動作です。これが原因で問題が起きることは多くありません。
まず、どこが出力しているかを確かめる
削除のコードを書く前に、いま canonical タグがいくつ、どこから出ているかを確認します。
- 対象のページをブラウザで開き、ページのソースを表示する(Windows の Chrome なら Ctrl+U)
- ソースの中で
canonicalを検索し、件数と href の値を確認する - 近くにある HTML コメント(SEO プラグインは自分の出力をコメントで囲むことが多い)から、出力元のあたりをつける
コマンドラインで確認する場合は次のようにします。
curl -s https://example.com/sample-post/ | grep -i 'canonical'
ここで canonical が2つ以上出ていたら、それが一番の問題です。canonical が複数あり、しかも指す URL が異なると、検索エンジンはどちらを信じればよいか判断できず、両方とも無視される可能性があります。「削除したい」の本当の目的が、この重複の解消であることは少なくありません。
コアの canonical を削除する
サイト全体で削除する
テーマのヘッダーに canonical を独自に書いている、自前の SEO 処理で出力しているなど、コアの出力が重複の原因になっている場合は、次のコードでコアの出力を止めます。子テーマの functions.php か mu-plugin に書きます。編集前にはファイルのバックアップを取ってください。
<?php
// WordPress コアが wp_head で出力する canonical タグを止める
remove_action( 'wp_head', 'rel_canonical' );
remove_action() は、登録時と同じフック名・関数名・優先度を指定したときだけ効きます。コアは優先度を省略(標準の10)で登録しているため、上のように省略して問題ありません。
ただし、テーマのヘッダーに canonical を直書きしている場合は、コアを止めるより、テーマ側の直書きを消してコアの出力を活かすほうが安全です。直書きは URL の組み立てが雑なことが多く、すべてのページで同じ URL を指しているといった事故の原因になります。
特定のページだけ削除する
ランディングページなど一部のページだけ止めたい場合は、条件分岐タグが使えるタイミングで remove_action() を呼びます。
<?php
add_action( 'template_redirect', function () {
// スラッグが landing の固定ページでは、コアの canonical を出力しない
if ( is_page( 'landing' ) ) {
remove_action( 'wp_head', 'rel_canonical' );
}
} );
template_redirect は表示するページが確定した後、wp_head より前に実行されるため、ここで判定すれば is_page() などが正しく動きます。
削除より「変更」を検討する
canonical を消したい理由が「別の URL を代表にしたい」なら、削除ではなく get_canonical_url フィルターで URL を書き換えるのが適切です。例えば、他サイトに先に掲載した記事を転載していて、元記事を代表にしたい場合は次のようにします。
<?php
add_filter( 'get_canonical_url', function ( $canonical_url, $post ) {
// 投稿ID 123 は転載記事なので、元記事の URL を canonical にする
if ( 123 === $post->ID ) {
return 'https://example.com/original-article/';
}
return $canonical_url;
}, 10, 2 );
canonical を消すと、パラメーター付き URL などの重複が起きたとき、検索エンジンが代表 URL を自力で推測することになります。代表にしたい URL がはっきりしているなら、それを明示しておくほうが意図どおりに扱われやすくなります。
SEO プラグインを使っている場合
Yoast SEO、All in One SEO、Rank Math などの SEO プラグインは、コアの canonical の代わりに独自の canonical を出力します。多くの場合、プラグインはコアの出力を止めたうえで自分のタグに置き換えるため、remove_action( 'wp_head', 'rel_canonical' ) を書いてもプラグインの canonical は残ります。
プラグインの canonical を変更・削除したい場合は、まず各プラグインの設定画面(投稿ごとの詳細設定欄に canonical URL の入力欄があることが多い)で対応できないかを確認します。コードで制御する場合は、プラグインが用意しているフィルターを使います。
- Yoast SEO:
wpseo_canonicalフィルター。URL を返せば変更、falseを返せば出力を止められる - Rank Math:
rank_math/frontend/canonicalフィルター - All in One SEO:
aioseo_canonical_urlフィルター
フィルター名や引数はプラグインの更新で変わることがあるため、使う前に各プラグインの公式ドキュメントで確認してください。また、SEO プラグインを2つ同時に有効にすると canonical が重複する典型的な原因になります。SEO プラグインは1つに絞るのが基本です。
削除してよい場面・避けたい場面
削除が妥当な場面は、例えば次のようなケースです。
- ヘッドレス構成で、表示側(フロントエンド)のアプリケーションが canonical を出力しており、WordPress 側の出力が重複する
- CDN やサーバー側で HTTP ヘッダー(Link ヘッダー)として canonical を送っており、HTML 側と二重になる
- 独自の SEO 処理を実装しており、コアの出力と置き換えたい
一方、「なんとなく不要そう」「サイトが速くなりそう」といった理由での削除はおすすめしません。canonical タグ1行の削除で表示速度が変わることはほぼなく、重複 URL の扱いを検索エンジン任せにするリスクだけが残ります。
変更後の確認
作業後は、次の点を確認します。
- ページのソースで canonical が0件または1件になっているか、1件なら href が意図した URL か
- 投稿・固定ページ・トップ・アーカイブなど、ページの種類ごとに確認したか
- キャッシュ系プラグインやサーバーキャッシュを削除してから確認したか
- Google Search Console の URL 検査で、指定した canonical と Google が選んだ canonical がどうなっているか
Search Console の結果は、再クロールされるまで反映されません。数日から数週間単位で様子を見てください。
まとめ
- コアの canonical は
wp_headに登録されたrel_canonical()が単一ページでのみ出力し、remove_action( 'wp_head', 'rel_canonical' )で止められる - まずソースで件数と出力元を確認する。複数の canonical が出ている重複状態の解消が最優先
- 代表 URL を変えたいなら、削除ではなく
get_canonical_urlフィルターで変更する - SEO プラグインの canonical はプラグインの設定かフィルターで扱い、フィルター名は公式ドキュメントで確認する
- canonical の削除が必要な場面は限られる。変更後は Search Console で推移を確認する