2026年7月3日
2026年7月3日
SEOPressでcanonicalタグが重複するときの原因の特定と修正手順
SEOPressを使っているページのソースに <link rel="canonical"> が2つ以上出ている場合、原因の多くは「SEOPress以外の誰かもcanonicalを出力している」ことです。別のSEOプラグイン、テーマの header.php への直書き、コード挿入プラグインなどが典型で、出力元を1つずつ突き止めて、SEOPress側に一本化すれば解消します。この記事では、重複の確認方法、出力元の見分け方、出力元ごとの止め方、修正後の確認までを順に説明します。
canonicalの重複がなぜ問題になるのか
canonical(正規URL)は「このページの正式なURLはこれです」と検索エンジンに伝えるヒントです。1ページに1つだけ置くのが前提で、同じURLが2回出ているだけなら実害は小さいものの、異なるURLを指すcanonicalが複数あると、Googleはどちらも採用せず、canonicalの指定自体を無視することがあります。その結果、パラメーター付きURLやページ分割の2ページ目などが正規URLとして扱われ、評価が分散する原因になります。
「同じURLが2つ」でも放置しない方がよい理由は、片方がテーマや別プラグイン由来だと、設定を変えたときにだけ食い違いが生まれるからです。SEOPressでカスタムのcanonicalを指定した瞬間に、もう一方が古いURLのまま残る、という形で問題が表面化します。
手順1:重複を正しく確認する
まずは本当に重複しているかを、キャッシュの影響を避けて確認します。
- ブラウザで対象ページを開き、ページのソースを表示(Windowsは Ctrl+U、Macは Command+Option+U)して「canonical」で検索する
- 開発者ツールの「要素」タブではなく、ソース表示で確認する(JavaScriptで後から挿入されたタグは要素タブにしか出ないため、どちらで見えるかも手がかりになります)
- ログアウトした状態、またはシークレットウィンドウで確認する
サーバーに入れる場合や、コマンドが使える環境なら curl で生のHTMLを取るのが確実です。
curl -s https://example.com/sample-page/ | grep -i 'rel="canonical"'
ページキャッシュ(キャッシュプラグインやサーバーのキャッシュ、CDN)が効いていると、修正前の古いHTMLが返ってくることがあります。調査中はキャッシュを削除してから確認し、修正後にも再度削除してください。
手順2:出力元を見分ける
重複が確認できたら、それぞれのタグがどこから出ているかを特定します。ソース上の位置と周辺のHTMLコメントが一番の手がかりです。
- 前後に別のSEOプラグインのコメントがある:Yoast SEO、Rank Math、All in One SEO などは、出力ブロックの前後に自分のプラグイン名を含むコメントを入れることが多く、その範囲内にあるcanonicalはそのプラグイン由来です
- **
<head>の先頭近く、titleタグやmeta charsetのすぐ近くに単独である**:テーマの header.php に直接書かれている可能性が高い - トラッキングタグやGoogleの確認コードと並んでいる:WPCode などのコード挿入プラグインや、テーマの「head内にコードを追加」設定に貼り付けられている可能性があります
- ソース表示には無く、要素タブにだけある:JavaScriptでの挿入です。タグマネージャーや一部のページビルダー・AMP系の処理を疑います
位置だけで判断できない場合は、開発用のプラグイン「Query Monitor」が役立ちます。Query Monitorの「Hooks & Actions」パネルで wp_head に登録されている関数を一覧でき、どのプラグイン・テーマのコールバックが動いているかが分かります。本番環境で使う場合は、調査が終わったら無効化しておきます。
もう1つの確実な方法は、プラグインを切り分けることです。ステージング環境があればそちらで、SEOPress以外のプラグインを1つずつ無効化し、canonicalが1つになった時点のプラグインが出力元です。本番でしか試せない場合は、アクセスの少ない時間帯に行い、事前にバックアップを取っておいてください。
手順3:出力元ごとに止める
別のSEOプラグインが有効になっている
最も多い原因です。Yoast SEO や Rank Math から SEOPress へ乗り換えた際に、旧プラグインを無効化し忘れているケースや、「サイトマップ機能だけ使う」つもりで残しているケースがあります。SEOプラグインはcanonical、メタディスクリプション、OGPなどをまとめて出力するので、2つ同時に有効だとcanonical以外も重複します。
SEOPressには他のSEOプラグインの設定を取り込む移行ツールが用意されています(SEOPressの「ツール」系の画面にあります。表示名はバージョンで変わることがあります)。移行を済ませてから旧プラグインを無効化し、問題がなければ削除します。削除前にデータベースのバックアップを取っておくと、取り込み漏れがあった場合に戻せます。
テーマの header.php にcanonicalが直書きされている
古いテーマや自作テーマでは、header.php に次のような行が書かれていることがあります。
<link rel="canonical" href="<?php the_permalink(); ?>">
この行はSEOPressの設定とは無関係に全ページで出力されるため、カテゴリーやページ分割でも単一記事のURLを指すなど、内容も不正確になりがちです。親テーマを直接編集するとテーマ更新で元に戻るので、子テーマに header.php をコピーし、子テーマ側で該当行を削除します。テーマの「SEO設定」「head出力」などの項目で切り替えられるテーマなら、そちらでオフにする方が保守は楽です。
WordPressコアのcanonicalが残っている
WordPressコアも、個別投稿や固定ページでは rel_canonical() を wp_head にフックしてcanonicalを出力します。SEOプラグインは通常これを外してから自分のcanonicalを出しますが、テーマや他のプラグインの処理順の都合で外れていない場合があります。その場合は子テーマの functions.php、またはコードスニペット系プラグインで次のように外します。
<?php
// WordPressコアが出力する canonical を止める(SEOPress側の出力に一本化するため)
add_action( 'init', function () {
remove_action( 'wp_head', 'rel_canonical' );
} );
remove_action() は「登録したときと同じ優先度」で呼ばないと外れません。コアは既定の優先度で登録しているため上の書き方で外れますが、テーマが独自に add_action( 'wp_head', 'rel_canonical', 5 ) のように登録し直している場合は、その優先度を指定する必要があります。
コード挿入プラグインや計測タグに含まれている
WPCode などで head に貼ったコードの中に、他サイトからコピーしたcanonicalが紛れていることがあります。スニペット一覧を「canonical」で検索し、該当部分を削除します。タグマネージャー経由でJavaScript挿入している場合は、タグマネージャー側のタグを止めます。JavaScriptで差し込まれたcanonicalは、検索エンジンがレンダリング後に読むかどうかで扱いが変わり、意図しない挙動の原因になるため、canonicalは HTML の段階で1つにしておくのが安全です。
SEOPress側を止めたい場合
多言語プラグインなどが正しいcanonicalを出していて、SEOPress側を止めたいケースもまれにあります。SEOPressには出力を変更する開発者向けフィルターがありますが、名前や引数はバージョンで変わりうるため、公式ドキュメントで確認してから使ってください。通常はSEOプラグイン側に一本化する方が管理は楽です。
手順4:SEOPressのcanonical設定を見直す
重複を解消したら、残ったSEOPressのcanonicalが正しいURLを指しているかも確認します。
- 投稿・固定ページの編集画面にあるSEOPressのメタボックス(詳細設定のタブ)には、そのページ用のcanonical URLを手動で入れる欄があります。空欄ならSEOPressが自動で正規URLを出力します。過去に手入力したURLが残っていて、URL変更後も古いURLを指している例がよくあるので、心当たりのあるページは確認してください
- 「設定」→「パーマリンク」やサイトURL(http/https、wwwの有無)が実際の公開URLと一致しているかを見ます。ここがずれていると、canonicalもずれたURLで出力されます
- ページ分割した一覧ページの2ページ目以降は、各ページ自身のURLがcanonicalになっているのが一般的な形です。すべて1ページ目を指していないか確認します
修正後の確認方法
- キャッシュプラグイン、サーバーのキャッシュ、CDNのキャッシュを削除する
- 手順1と同じ方法(ソース表示や curl)で、canonicalが1つだけになっているか確かめる
- 投稿、固定ページ、カテゴリー、トップページ、検索結果など、テンプレートが異なるページを数種類チェックする(テンプレートによって出力元が違うことがあるため)
- Google Search Console の URL 検査で、「ユーザーが指定した正規 URL」と「Google が選択した正規 URL」を確認する。修正直後は古い情報のままなので、再クロール後に一致しているかを見ます
上記の表記は(2026年10月現在)のSearch Consoleのものです。画面表記はGoogle側の更新で変わることがあります。
まとめ
- SEOPressでcanonicalが重複する原因は、SEOPress以外の出力元(別のSEOプラグイン、テーマの直書き、コアの
rel_canonical、コード挿入)であることがほとんど - ソース表示や curl で生のHTMLを確認し、周辺のコメントや Query Monitor で出力元を特定する
- 出力元ごとに止め方が違う。別SEOプラグインは移行後に無効化、テーマは子テーマで修正、コアは
remove_action()で外す - 重複を消した後は、残ったcanonicalが正しいURLを指しているか、複数のテンプレートとSearch Consoleで確認する
- 作業前のバックアップと、確認時のキャッシュ削除を忘れない