Contact Form 7だけで診断は作れる?

すでにContact Form 7(以下CF7)を使っているサイトで、新しくプラグインを足す前に「これで診断も作れないか」と考える人は多いです。問い合わせフォームとして実績のあるプラグインなので、設問を並べて分岐させれば診断の代わりになりそうに見える。
結論から言うと、数問程度の簡単な質問と分岐ならCF7だけでも無理やり形にはできます。ただ、回答の組み合わせで結果を出し分けたい、結果画面を作り込みたい、どこで離脱したか見たい——このあたりが入ってくると、CF7単体ではかなり苦しくなります。

この記事は、CF7でどこまでやれてどこから別の仕組みが要るのかを正直に整理したものです。CF7を貶めたいわけではなく、得意な仕事と不得意な仕事を分けて考えると運用が楽になる、という話です。

目次

CF7が本当に得意なのは「送信させる」こと

CF7は入力を受け取って送信する部分が堅牢で、問い合わせ・資料請求・予約のような用途では今でも第一候補になります。reCAPTCHAやTurnstileといったスパム対策との連携も枯れていて、安心して任せられる。
診断まわりで言えば、診断の結果を見せたあとに置く相談フォーム・申込みフォームとして使うのが一番素直な使い方です。

逆に、CF7はもともと「回答に応じて画面の中身を組み替える」ことを目的に作られていません。条件表示のアドオンやJavaScriptを足せば設問の出し分けくらいはできますが、それは送信フォームを無理に診断ツールに寄せている状態で、要件が増えるほど辛くなりやすいです。

CF7でフォームのカスタムの依頼を対応してきた私からすると、少なくても項目が変動するような場合は使いづらいという印象です。
途中でフォームの項目を変動させたり、サーバーと連携させたりするのは大変な印象でした。

分岐が増えた瞬間に管理が崩れる

簡単な数問なら工夫で形になります。問題は、現実の診断で必要になる要件がたいてい「組み合わせ」を含むことです。たとえば「利用人数が1〜3人」かつ「予算が低め」ならライトプランを出す、といった具合に、複数の回答を見て結果を決めたくなる。CF7で条件分岐の表示制御を積み重ねてこれをやろうとすると、条件が増えるほど自分でも全体を追えなくなります。よくあるのは、最初は軽く作れたのに、結果のパターンが5つ6つと増えたあたりで「どの条件がどの結果につながるのか」が分からなくなるパターンです。

結果画面の作り込みも弱点になりやすいところです。診断の結果は、見出し・説明・画像・ボタンを組み合わせたコンテンツとして見せたいことが多いのに、CF7のメッセージ領域はそこまで自由が利きません。
さらに、どの設問で抜けられたか、どの結果に偏っているかといった数字も、CF7単体では取れない。診断は公開してからの改善が本番になりやすいので、ここが見えないのは後から効いてきます。別サイトへ持っていきたいときの移行も、フォーム定義をコピーして条件を組み直す手作業になりがちです。

棲み分けで考えると無理がない

整理すると、CF7と診断専用ツールは競合というより役割が違います。

Contact Form 7 単体診断シミュレーションPro
得意なこと入力の受付と送信回答に応じた結果の出し分け
結果の見せ方メッセージ領域中心で作り込みは限定的ブロックエディタで自由に作成
組み合わせ条件増えると管理が崩れやすい回答マトリクスでAND判定・不問を整理
計測基本は別途用意が必要完了率・離脱率・結果分布を本体で集計
別サイトへの移行手作業になりやすいJSONでエクスポート/インポート

診断シミュレーションProでは、結果のほうに「この設問でこの選択肢が選ばれたら表示する」という条件を持たせます。選んだ選択肢から結果へ線を引くのではなく、結果コンテンツ側が表示条件を抱える形です。

設定した条件をすべて満たしたとき(AND判定)に表示され、条件に入れなかった設問はその結果にとって不問になります。条件に一致する結果が複数あればまとめて表示されるので、たとえばスキンケアの診断で「敏感肌向け」はQ1の肌悩みだけを条件にしてケア時間や予算は不問にする、といった作り方ができます。選択肢には安定IDが振られるため、あとから設問や選択肢を並べ替えても分岐は壊れません。CF7で条件を手で積み上げる構成だと、ここが崩れやすいところです。

結果はブロックエディタで作るので、その中にCF7のフォームをそのまま置けます。診断の代わりにCF7を使うのではなく、診断の結果コンテンツの中でCF7に問い合わせを任せる、という組み合わせが現実的です。

結果コンテンツの中にCF7を置くときの実際

ここで誤解されやすい点を先に潰しておきます。結果コンテンツの中にCF7のフォームを置くだけなら、特別な連携を有効化しなくても表示も送信もできます。 CF7 6.x はフロントの全ページでJS/CSSを自動的に読み込むためで、AJAXで結果として注入されたフォームでも、reCAPTCHAやTurnstileは通常どおり動きます(AJAXで差し込まれたウィジェットはプラグイン側が描き直します)。設置自体は、設問セットを作るとIDが振られるので固定ページに次の1行を貼るだけです。

[mqs_simulator id="設問セットID"]

id には自分の設問セットのIDを入れます。ブロックエディタなら「診断シミュレーション」ブロックを選んでも置けます。

連携設定のほうは、あくまで救済のための機能で、常に必要なものではありません。診断シミュレーションProの「誤判定救済モード」は、AkismetやWordPress標準のコメント禁止リストといった内容ベースのスパム判定が、診断結果用のフォーム送信を誤って弾いてしまう場合にだけ使います。診断結果用と明示したフォームの送信に限って内容ベースの判定をスキップする、という限定的な役割です。reCAPTCHA・Turnstile・CF7のセキュリティ機能・Stripe判定・通常のお問い合わせフォームには影響しません。CAPTCHAがスコア不足で正しく拒否した送信を無理に通すものでもないので、「連携を入れればスパム対策が緩む」と心配する必要はないです。要するに、普段はそのまま使えて、内容判定に誤検知された一部の送信だけを救う設定だと考えてください。

なお組み合わせの前提として、CF7は6.0以上が必要です。CF7 6.x はWordPress 6.7以上を要求する点も合わせて確認しておくと安全です。

どう使い分けるか

問い合わせ・資料請求・相談予約のような「集めて送る」だけの用途なら、CF7単体で十分です。診断の結果を見せたあとに置く相談フォームとしても相性がいい。
一方で、回答の組み合わせで結果を出し分けたい、結果をきちんとしたコンテンツとして見せたい、完了率や離脱率を見ながら直していきたい、複数サイトへ展開したい——このあたりが目的なら、診断側は専用の仕組みに任せて、送信部分だけをCF7に持たせるほうが無理がありません。

「フォームひとつで診断も問い合わせも全部」とまとめたくなりますが、実際は診断で候補を絞り、その後の送信だけCF7に渡す分け方のほうが、後から条件を足しても崩れにくいです。

目次