WordPressで特定ページ、すべてのカテゴリー、投稿詳細ページからカノニカルタグを削除する方法

WordPressサイトを運営していると、SEOに関する細かい設定が求められることがあります。
たとえば、特定のページやカテゴリーアーカイブページ、
投稿詳細ページからカノニカルタグを削除したいケースがあるかもしれません。
本記事では、これらの設定をPHPコードで簡単に実現する方法を解説します。

カノニカルタグとは?

カノニカルタグ(<link rel="canonical">)は、
検索エンジンに「このページがオリジナルコンテンツである」と伝える役割を持つタグです。
特に重複するコンテンツが存在する場合、どのページを優先的に
インデックスするかを指定するために用いられます。
ただし、特定のページやカテゴリーアーカイブページにカノニカルタグを出力したくないケースもあります。

カノニカルタグの削除を設定するコード

以下のコードでは、特定のページIDや特定のカテゴリー、
さらにすべてのカテゴリーアーカイブページとすべての投稿詳細ページから
カノニカルタグを削除する方法を紹介します。
コードをテーマの functions.php に追加することで適用されます。

function remove_canonical_buffer($buffer) {
    // カノニカルタグを含む行を削除
    return preg_replace('/<link rel=[\'"]canonical[\'"].+?\/>/i', '', $buffer);
}

function remove_canonical_tag_for_specific_pages_and_all_categories_single() {
    $target_pages = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); // カノニカルタグを削除したいページIDを配列で指定
    $target_categories = array('news', 'event', 'voice'); // カノニカルタグを削除したいカテゴリーのスラッグを配列で指定
    
    if (is_page() && in_array(get_queried_object_id(), $target_pages)) {
        ob_start('remove_canonical_buffer');
    }
    // すべてのカテゴリーアーカイブと投稿詳細ページ、特定のカテゴリーに該当する場合
    elseif (is_category() || is_single() || (is_category() && in_array(get_queried_object()->slug, $target_categories))) {
        ob_start('remove_canonical_buffer');
    }
}
add_action('template_redirect', 'remove_canonical_tag_for_specific_pages_and_all_categories_single');

コードの解説

remove_canonical_buffer 関数

この関数は、カノニカルタグをHTML出力から削除するためのものです。
正規表現を使い、<link rel="canonical">タグを含む行を削除します。

remove_canonical_tag_for_specific_pages_and_all_categories_single 関数

この関数では、以下の条件に基づいてカノニカルタグを削除します。

特定のページID

$target_pages 配列に含まれるページIDに一致するページの場合、カノニカルタグを削除します。

特定のカテゴリー

$target_categories 配列に含まれるカテゴリーのスラッグ(news, event,voice)に
該当するカテゴリーアーカイブページの場合、カノニカルタグを削除します。

すべてのカテゴリーアーカイブページ

is_category()true を返すすべてのカテゴリーアーカイブページでカノニカルタグを削除します。

すべての投稿詳細ページ

is_single()true を返すすべての投稿詳細ページでカノニカルタグを削除します。

add_action(‘template_redirect’, ‘remove_canonical_tag_for_specific_pages_and_all_categories_single’);

この行は、template_redirectアクションフックにremove_canonical_tag_for_specific_pages_and_all_categories_single関数を
追加します。template_redirectは、テンプレートが読み込まれる前のタイミングで実行されるため、
カノニカルタグを削除するタイミングとして適切です。

注意点

キャッシュのクリア

コード変更後は、サーバーキャッシュやブラウザキャッシュを
クリアしてから変更が反映されているか確認してください。

SEOへの影響

カノニカルタグはSEOにおいて重要な要素の1つです。
設定を削除する際には、検索エンジンへの影響も考慮する必要があります。

まとめ

今回紹介した方法を使えば、特定のページ、すべてのカテゴリーアーカイブページ、
およびすべての投稿詳細ページからカノニカルタグを削除することができます。
特にSEO設定を細かく管理したい場合に役立つテクニックなので、ぜひ試してみてください。