― トップページとブログ一覧を分ける、本質的なSEO対策 ―


はじめに:なぜcanonicalが重要なのか?

WordPressでサイトを構築する際、構造設計とSEO設計を両立させることは非常に重要です。特に、

「このページの正規URLはこれです」と検索エンジンに伝えるための canonical タグ

は、重複コンテンツの回避検索評価の集中において、SEOの基礎中の基礎となります。

しかし、WordPress標準の挙動では、front-page.phphome.php(投稿一覧)が同じURLのcanonicalとして出力されてしまうという、見落としがちな問題が存在します。


よくある問題:トップページとブログ一覧のcanonicalが同一に?

WordPressの条件分岐関数を混同しているケースが非常に多いです。まずはこちらをご確認ください。

判定関数意味
is_front_page()トップページ(例:固定ページ)
is_home()投稿一覧ページ(ブログ)

たとえばこのような構成のサイト:

  • トップページ: https://example.com/(固定ページ)
  • ブログ一覧: https://example.com/news/(投稿ページ)

このような場合でも、is_front_page()is_home() も true になるケースがあり、結果的にどちらのページでも https://example.com/ が canonical として出力されてしまいます。


canonicalタグの誤出力が与える悪影響

  • ブログ一覧が正しくインデックスされない
  • Googleにページが重複していると判断される
  • 検索評価が分散、もしくは不正確に評価される
  • 内部リンク構造に矛盾が生まれ、クローラビリティが低下

これは見た目にはわかりにくい「静かなSEO障害」です。エンジニアリング視点の設計配慮が問われます。


解決策:状況に応じて canonical を動的に出力する関数

以下のコードは、フロントページとブログ一覧ページの違いを正確に判定し、適切なcanonicalタグを出力する処理です。


function mytheme_canonical_tag() {
// ページ送りは除外(/page/2 など)
if ( is_paged() ) return;

$url = '';

if ( is_front_page() && ! is_home() ) {
// トップページ(固定ページ)
$url = home_url('/');
} elseif ( is_home() ) {
// 投稿ページ(ブログ一覧)
$page_for_posts = get_option('page_for_posts');
$url = $page_for_posts ? get_permalink($page_for_posts) : home_url('/news/');
} elseif ( is_singular() ) {
$url = get_permalink();
} elseif ( is_category() ) {
$url = get_category_link( get_queried_object_id() );
} elseif ( is_tag() ) {
$url = get_tag_link( get_queried_object_id() );
} elseif ( is_tax() ) {
$term = get_queried_object();
if ( $term && ! is_wp_error($term) ) {
$url = get_term_link($term);
}
} elseif ( is_post_type_archive() ) {
$url = get_post_type_archive_link( get_post_type() );
} elseif ( is_author() ) {
$url = get_author_posts_url( get_queried_object_id() );
} elseif ( is_search() ) {
return; // 検索結果ページには出力しない
} else {
// それ以外(404など)
$url = home_url( add_query_arg( [], $GLOBALS['wp']->request ) );
}

if ( $url ) {
echo '<link rel="canonical" href="' . esc_url($url) . '">' . "\n";
}
}

実装手順

  1. 上記コードを functions.php に追加
  2. header.php<head> 内に以下を追加
<?php mytheme_canonical_tag(); ?>

これだけで、各ページ種別に正しくcanonicalが出力されるようになります。


設計ポイント:WordPressテーマの責任範囲としてのSEO

このような細やかな制御は、テーマ側で担うのが基本です。

canonical出力の正確性は「テーマの品質」と「構造設計」の指標

といっても過言ではありません。

特にフロントエンドとバックエンドが分業されているプロジェクトにおいては、裏側(ロジック・構造)でこのような設計的配慮があるかどうかが、最終的な運用品質を大きく左右します。


補足:SEOプラグインとの併用時の注意

All in One SEO や Yoast SEO を導入している場合、canonical出力が自動化されていることもありますが、front-pageとhomeの重複判定には弱いケースも存在します。

  • SEOプラグインを使う場合も、カスタムテーマ開発では上書き制御できるようにしておく
  • あるいは、SEOプラグイン側のcanonical出力を停止する(Yoastでは wpseo_canonical フィルターあり)

といった設計判断が必要です。


まとめ:裏側の設計が、SEOの未来を決める

WordPressサイトのSEO設計では、構造上の矛盾を丁寧に取り除くことで、将来的なコンテンツ評価・インデックス最適化がスムーズに進みます。

特にコーポレートサイトでは、次のような信頼構築にもつながります:

  • 正確な構造とURL設計で評価が安定
  • 運用時のリスク(重複・インデックス漏れ)を事前に排除
  • 将来の拡張やリニューアルにも柔軟に対応可能

ご相談受付中

「自社テーマの構造設計を見直したい」「SEO設計に不安がある」など、サイト設計に関する技術的なご相談も承っております。
ぜひお気軽に お問い合わせフォーム よりご連絡ください。