is_page()で固定ページ限定のCTA・計測タグを出し分ける方法|小売ECの問い合わせ導線とCVR改善

小売ECのコーポレートサイトやオウンドメディアでは、トップページ、商品カテゴリー、コラム記事、そして「問い合わせ」「資料請求」「LP(ランディングページ)」といった固定ページが同じテーマ・同じヘッダー/フッターの中に混在しています。これ自体は自然な構成ですが、問題はここから先です。すべてのページに同じCTA(Call To Action)文言、同じ計測タグを出していないでしょうか。トップページで有効なCTAが、問い合わせページでは的外れになったり、逆に問い合わせ完了後のサンクスページにコンバージョンタグを重ねて出稿してしまい、広告の成果が水増しされたりするケースは珍しくありません。

WordPressには、こうした「ページの種類ごとに出し分ける」ための条件分岐タグが標準で用意されています。その代表格がis_page()です。現在表示中のページが固定ページかどうか、さらに特定のIDやスラッグ、タイトルに一致する固定ページかどうかを判定できる関数で、テーマのテンプレートファイルやプラグイン、カスタムコードの中で頻繁に使われます。名前だけを見ると「固定ページかどうかを判定するだけの地味な関数」に見えますが、実務では、CTAの出し分け、計測タグの重複防止、LPごとの訴求切り替えなど、コンバージョン率に直結する場面で活躍します。

この記事では、is_page()の技術的な仕様を正確に押さえたうえで、小売ECサイトの問い合わせ導線を設計・改善する立場から、この関数をどう使えば成果につながるのかを、実装例・運用の落とし穴・判断軸・測定指標まで含めて網羅的に解説します。すでに公開しているsingle_term_title()やtaxonomy_exists()を扱った記事と同じ視点で、今回は「固定ページ単位の出し分け」というテーマに絞り込んでいます。

is_page()が小売ECの集客で重要になる理由

小売ECのオウンドメディアやコーポレートサイトは、コラム記事による集客と、問い合わせ・資料請求・LPによるコンバージョンという、性質の異なる2つの役割を同じWordPressサイトの中に同居させています。この構造自体は効率的ですが、放置すると次のような問題が起きやすくなります。

  • すべてのページで同じCTA文言を出してしまい、問い合わせページに来た「すでに検討段階にいるユーザー」に対して、コラム記事向けの弱いCTA(「資料はこちら」程度の控えめな導線)しか見せられていない
  • 広告のコンバージョンタグ(Google広告のコンバージョンタグ、Meta広告のピクセルイベントなど)を全ページ共通で読み込んでしまい、問い合わせ完了ページ以外でもコンバージョンとしてカウントされ、広告の成果指標が不正確になる
  • LPごとに異なる訴求(価格訴求のLP、事例訴求のLP、業種特化のLPなど)を用意しているのに、テーマ側のCTAブロックが共通で挿し込まれてしまい、LPの世界観と矛盾するCTAが混在する
  • 固定ページの追加・削除のたびにテーマファイルを手動で書き換えており、ページが増えるほど保守コストが積み上がる

これらはすべて「今表示しているのがどの固定ページなのか」をコード側が正しく判定できていないことに起因します。is_page()は、この判定をテンプレートタグ1つで実現できる、いわば出し分けロジックの入り口です。ページ単位でCTAや計測タグを制御できるようになれば、集客用のコラム記事とコンバージョン用の固定ページとで、それぞれに最適化した体験を提供できるようになり、結果として問い合わせ数・資料請求数の底上げにつながります。

is_page()の役割を実務目線で理解する

is_page()は、WordPressのコンディショナルタグ(条件分岐タグ)の1つで、現在のリクエストが単一の固定ページを表示しているかどうかを判定します。引数$pageは省略可能で、省略した場合は「固定ページ全般であるかどうか」を判定します。引数にページID(整数)、ページスラッグまたはタイトル(文字列)、あるいはこれらを混在させた配列を渡すと、「その特定の固定ページであるかどうか」を判定できます。

<?php
// 固定ページ全般の判定
if ( is_page() ) {
    // 何らかの固定ページを表示中
}

// IDで特定の固定ページを判定(問い合わせページがID=42の場合)
if ( is_page( 42 ) ) {
    // 問い合わせページ専用のCTA・計測タグをここに出力
}

// スラッグまたはタイトルの配列で複数ページをまとめて判定
if ( is_page( array( 'contact', 'lp-spring-sale', 'lp-autumn-fair' ) ) ) {
    // 問い合わせページと複数のLPをまとめて対象にする
}
?>

もう1つ、実務でよく使うのが「特定ページを除外する」パターンです。サンクスページだけコンバージョンタグを出し、それ以外の固定ページでは出さない、といった制御は次のように書けます。

<?php
// サンクスページ(ID=88)でのみコンバージョンタグを出力する
if ( is_page( 88 ) ) {
    ?>
    <script>
    // 広告プラットフォームのコンバージョンイベント発火
    </script>
    <?php
}
?>

注意すべき点は主に2つあります。1つ目は「ループの中で使うと動作が不安定になる」ことです。is_page()はグローバルな$wp_queryを参照して判定するため、カスタムループ(WP_Queryやget_posts()による二重ループ)の中で呼び出すと、メインクエリとは異なる結果を返したり、意図しない挙動になったりすることがあります。ループの中で判定結果を使いたい場合は、ループに入る前に変数へ結果を代入しておき、ループ内ではその変数を参照するのが安全です。2つ目は「メインクエリが確定する前(wpフックより前)に呼び出しても正しい判定にならない」点です。functions.phpの直下やプラグインの初期化処理など、早いタイミングでis_page()を呼んでしまうアンチパターンは非常によく見かけますが、これは高確率で常にfalseを返す、あるいは意図しないページでtrueを返す原因になります。CTAや計測タグの出し分けは、テンプレートファイル内(header.php、footer.php、固定ページ用テンプレート内)や、wp_head・wp_footerフックの中で行うのが基本です。

運用イメージ(架空パターン)

実際の運用イメージをつかむために、架空の小売事業者A社を例に考えてみます。A社は台所用品を扱うECサイトを運営しており、コーポレートサイトには「コラム記事」「問い合わせページ」「法人向け卸取引LP」「季節キャンペーンLP」の4種類のページが混在しているとします。

仮に、A社がこれまでテーマの共通フッターにCTAブロックとコンバージョンタグをまとめて埋め込んでいたとします。この状態では、コラム記事にも法人向け卸取引LPにも同じ「お問い合わせはこちら」というCTAしか出せず、法人担当者向けの「取引条件について相談する」という訴求ができていない、という課題があったと仮定します。また、コンバージョンタグがすべてのページで発火してしまうため、広告の管理画面上のコンバージョン数と、実際にフォームから届いた問い合わせ件数が一致せず、広告担当者が正確な費用対効果を把握できていない、という状態も想定できます。

ここでis_page()を使い、ページIDとCTA内容・計測タグの対応表を1つのファイルにまとめる形で実装を整理したとします。法人向け卸取引LPには「取引条件について相談する」という専用CTAを、季節キャンペーンLPにはキャンペーン内容に応じたCTAを、そしてサンクスページにのみコンバージョンタグを出す構成に変更します。こうした整理を行うことで、少なくとも構造上は「ページの意図とCTAが一致していない」「計測タグが不要なページでも発火する」という2つの課題が解消される、という設計上の効果が期待できます。もちろん、これはあくまで架空の設計例であり、実際の効果はサイトの状況やユーザー層によって異なります。

実装・運用の進め方

  • まず現状の固定ページを一覧化し、それぞれのページの役割(集客/コンバージョン/会員限定など)を分類する
  • ページIDとCTA内容・計測タグの対応関係を1つの設定ファイルまたは配列にまとめる
  • is_page()の判定はテンプレートのwp_head・wp_footer、または専用テンプレートファイルに集約する
  • ループ内では判定結果を変数にキャッシュしてから使う
  • 本番反映前にステージング環境で全固定ページを目視確認する
  • 固定ページ追加時のチェックリストに「出し分け設定への追記」を加えておく

社内で持つべき判断軸

  • そのページの主目的は「集客」か「コンバージョン」か、明確に分類できているか
  • CTAや計測タグの出し分けロジックが、担当者以外にも把握できる形で文書化されているか
  • 固定ページの新規作成・削除のフローに、出し分け設定の更新が組み込まれているか
  • 広告のコンバージョン計測が、実際の問い合わせ件数と定期的に突き合わされているか
  • LPやCTAの変更を、開発者を介さず更新できる範囲を決めているか

成果測定で見るべき指標

  • 固定ページ別のCTAクリック率(問い合わせページ・LP別に分けて計測する)
  • フォーム到達率とフォーム完了率(どの流入元・どのページ経由かで比較する)
  • 広告経由のコンバージョン数と、実際に届いた問い合わせ件数の差分
  • LPごとの直帰率・平均滞在時間の変化(CTA出し分け前後で比較する)
  • 問い合わせ完了ページの表示回数と、実際のフォーム送信数の整合性

よくある質問

is_page()とis_singular()はどう違いますか

is_page()は固定ページ(post typeがpage)であるかどうかのみを判定します。一方is_singular()は投稿・固定ページ・カスタム投稿タイプを含む「単一の投稿系ページ全般」を判定できる、より広い条件分岐タグです。固定ページに限定した出し分けを行いたい場合はis_page()を、投稿タイプを問わず単一ページかどうかを判定したい場合はis_singular()を使い分けます。

子ページ(階層構造の下位ページ)も判定できますか

is_page()に子ページ自身のID・スラッグ・タイトルを指定すれば判定できます。親ページを指定しても子ページではtrueになりません。親子関係をまとめて判定したい場合は、対象となる子ページのIDを配列で列挙する必要があります。

プラグインが生成した固定ページでも動作しますか

投稿タイプがpageであれば、プラグインが自動生成したページ(決済プラグインのカート・購入完了ページなど)でも同様に判定できます。ただし、プラグインによっては固定ページではなく独自の投稿タイプやテンプレートを使う場合があるため、事前に投稿タイプを確認してください。

is_page()の判定はキャッシュに影響しますか

is_page()自体はページキャッシュの挙動に直接影響しませんが、出し分けたCTAや計測タグをキャッシュプラグインが静的に保存してしまうと、キャッシュクリア前は古い出し分け結果が表示され続けることがあります。出し分けロジックを変更した際は、対象ページのキャッシュを個別にパージすることを忘れないようにしてください。

WooCommerceのショップページやカートページでも使えますか

WooCommerce導入時、ショップページは通常固定ページとして扱われるためis_page()で判定可能です。ただし商品詳細ページは固定ページではなく独自の投稿タイプのため、is_page()では判定できません。商品詳細ページの出し分けにはWooCommerce側の専用コンディショナルタグ(is_product()など)を使う必要があります。

複数の条件を組み合わせて判定したい場合はどうすればよいですか

is_page()の戻り値はtrue/falseのため、他のコンディショナルタグ(is_user_logged_in()など)と論理演算子で組み合わせて条件分岐できます。たとえば「特定の固定ページかつ非ログイン状態」といった複合条件も、通常のPHPのif文の中で自然に表現できます。

まとめ

is_page()は「現在表示中のページが固定ページかどうか」を判定するシンプルな関数ですが、問い合わせページやLP、サンクスページといったコンバージョンに直結する固定ページを正確に見分けられることは、小売ECのインバウンド集客において大きな意味を持ちます。CTAの温度感の出し分け、広告コンバージョンタグの正確な計測、LPごとの訴求切り替え、会員限定ページの導線制御など、実務での活用範囲は多岐にわたります。ループ内での不安定な挙動や、判定タイミングの誤りといった落とし穴を避けつつ、ページIDとCTA・計測タグの対応関係を一元管理する設計を採用すれば、固定ページが増えても保守性を保ったまま、コンバージョン導線を最適化し続けることができます。

コメント

タイトルとURLをコピーしました