cja-funnel-health-check について
Customer Journey Analytics で、説明されたファネルを段階ごとのコンバージョンと離脱の分析に変換するスキルです。最も大きな離脱箇所を特定し、オーディエンスやチャネル別に結果を分けて HTML レポートを作成します。
主な機能
- 01ファネルの説明を測定可能な段階に変換
- 02各段階の訪問者数やセッション数を計測
- 03コンバージョン率と離脱率を算出
- 04最大の離脱箇所を特定
- 05ディメンションやセグメント別に分析
- 06HTML ファネルレポートを生成
活用シーン
- 01チェックアウトのどの段階で離脱するかを特定
- 02登録やオンボーディングの完了状況を測定
- 03デバイスやチャネル別にファネル離脱を比較
MCP 対応
Customer Journey Analytics の MCP ツールを使い、ディメンションと指標を特定し、ディメンション値を検索してアドホックセグメント付きレポートを実行します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ adobe/ skills --skill cja-funnel-health-checkインストール後、Claude Code で/cja-funnel-health-checkを入力して読み込まれたか確認します。
同梱ファイルevals/evals.json
詳細
ファネル健全性チェック(カスタマージャーニー分析)
平易な英語で記述されたファネルを、定量化されたステップごとの コンバージョン分析に変換します。出力では、ファネルで最も大きな離脱ポイントを特定し、 どのオーディエンスまたはチャネルで離脱が最も多いかを示す、ディメンション別の内訳を提供します。
ファネルの健全性チェックは、チームが特定のステップに問題があると考えているものの、 定量化できていない場合に最も役立ちます。このスキルでは、1 回の会話で定量化を行います。
使用する CJA MCP ツール
findDimensions— ページ名、イベント、その他のディメンションを解決し、ステップのフィルタリングに使用しますfindMetrics— 測定する基本指標(セッション、訪問者、イベント)を取得しますsearchDimensionItems— ステップ名に対応する正確なディメンション値を検索しますrunReport(adhocSegmentsと併用)— ファネルの各ステップにおける訪問者数を測定しますfindSegments— 該当する場合、既存のセグメントをファネルステップのフィルターとして使用しますdescribeSegment— ファネルステップとして適用する前に、セグメントのロジックを確認します
フェーズ 0 — セットアップ
findDataViewsを呼び出して、利用可能なデータビューを一覧表示します。- ユーザーがデータビューを指定していない場合は、一覧を提示して、どれを使用するか尋ねます。
- 選択した ID を指定して
setDefaultSessionDataViewIdを呼び出します。 - まだ指定されていない場合は、ファネルのステージを定義するようユーザーに尋ねます(例:「分析したいファネルのステップを教えてください。」)。
フェーズ 1 — ファネルステップの定義
1.1 ユーザーのファネルの説明を解析する
ユーザーの平易な英語による説明から、ステップの順序を抽出します。
- 「ホームページ → 商品ページ → カート → 購入」
- 「登録 → オンボーディングステップ 1 → オンボーディングステップ 2 → アクティベーション」
- 「ランディングページ → リードフォーム → サンクスページ」
各ステップは、CJA で測定可能な条件に解決できる必要があります。ステップには次のものを指定できます。
- ページビュー:ユーザーが特定のページを閲覧した(ページ名ディメンションで解決)
- イベント/指標:ユーザーが特定のアクションを実行した(例:「カートに追加」)
- セグメントへの所属:ユーザーが事前に作成されたセグメント条件を満たす
1.2 曖昧なステップを明確にする
曖昧なステップ(例:ページ名を指定せずに「チェックアウト」とする)がある場合は、質問を 1 つ尋ねます。
「『チェックアウト』のステップについて、URL に『checkout』を含むページを訪問したユーザーと、 『カートに追加』のような特定のイベントを発生させたユーザーの、どちらを確認すればよいですか?」
一度に複数の確認質問をしないでください。
1.3 ページ名をディメンション値に解決する
ページベースのステップでは、searchDimensionItems を呼び出して、ステップ名に一致する正確なディメンション
値を検索します。まず、"page name url" のようなセマンティック検索で findDimensions を呼び出し、正しいディメンション ID を確認します。ほとんどの
CJA データビューでは、これは variables/page ではなく variables/web.webPageDetails.name です。
searchDimensionItems(
dimensionId: "variables/web.webPageDetails.name",
searchAnd: "<step page name>",
startDate: "<period start>",
endDate: "<period end>",
page: 0,
limit: 10
)
候補が複数ある場合は、一致した項目をユーザーに提示します。
「『checkout』に一致するページが見つかりました:/checkout/start、/checkout/payment、 /checkout/review。チェックアウトステップへの入口として『/checkout/start』を使用しますか?」
フェーズ 2 — 各ステップの測定
各ファネルステップについて、そのステップに到達した訪問者/セッションを絞り込むアドホックセグメントを 作成します。次に、そのセグメントを適用して、基本指標(通常はユニーク訪問者数またはセッション数)を測定するレポートを実行します。
2.1 各ステップのアドホックセグメントを作成する
「ステップ N に到達した」アドホックセグメントは、次のとおりです。
- コンテナー:訪問または人物(セッションレベルのファネルには訪問を、複数の訪問にまたがるジャーニーには 人物を使用)
- 条件:ページ名が「<ステップのページ値>」と一致する、またはイベントが発生した
2.2 各ステップのレポートを実行する
アドホックセグメントを適用して、ステップごとに runReport を 1 回実行します。adhocSegments
パラメーターには、簡略化された省略形式ではなく、完全な CJA セグメント定義オブジェクトを渡します。正しい構造は次のとおりです。
runReport(
dimensionIds: "variables/web.webPageDetails.name",
metricIds: "metrics/visitors",
startDate: "<period start>",
endDate: "<period end>",
page: 0,
limit: 1,
adhocSegments: [{
"func": "segment",
"version": [1, 0, 0],
"container": {
"func": "container",
"context": "visitors",
"pred": {
"func": "streq",
"val": { "func": "attr", "name": "variables/web.webPageDetails.name" },
"str": "<step page value>"
}
}
}]
)
訪問をまたぐファネルには context: "visitors"(ユーザーレベル)を使用します。セッション内のファネルには
context: "visits"(セッションレベル)を使用します。指標値はレスポンスの
summaryData.filteredTotals[0] から取得します。
述語で使用するディメンションと値は、Phase 1 で searchDimensionItems を使って見つけたものと一致させてください。返された正確な value 文字列を使用します。
重要:各ステップでは累積フィルターを使用します。「この期間にこのステップに到達したことがあるユーザー」を測定し、「このページだけを訪問したユーザー」は測定しません。これにより、一般的なファネルのウォーターフォールが得られます。
ステップ i について、i = 1 から N までの stepCount[i] を記録します。
Phase 3 — ファネル指標を計算する
ステップ間の各遷移について:
stepConversionRate[i→i+1]= stepCount[i+1] / stepCount[i] × 100dropOff[i→i+1]= stepCount[i] − stepCount[i+1]dropOffRate[i→i+1]= 100 − stepConversionRate[i→i+1]
ファネル全体:
overallConversionRate= stepCount[N] / stepCount[1] × 100biggestDropOffStep= argmax(dropOff[i→i+1]) — 最も多くのユーザーが離脱したステップ
Phase 4 — オプション:ファネルをセグメント化する
ユーザーがオーディエンスやチャネル間でファネルのパフォーマンスを比較したい場合は、 ディメンションまたはセグメントでフィルタリングして、同じステップレポートを実行します。
runReport(
dimensionIds: "variables/device_type",
metricIds: "metrics/visitors",
startDate: "<range start>",
endDate: "<range end>",
page: 0,
limit: 10,
adhocSegments: [{ /* step N filter — same structure as Phase 2 */ }]
)
注:searchQuery: "device type mobile desktop" を指定して findDimensions を使い、データビューのデバイスディメンション ID を確認します(多くの場合 variables/device_type です)。
これにより、ステップ N の訪問者数をデバイスタイプ(またはチャネル、 国)別に確認できます。あるセグメントで最も離脱が多いステップを通過するコンバージョン率が著しく低い場合、そのセグメントが最適化の対象です。
提案する一般的な比較項目:
- デバイスタイプ(モバイルとデスクトップではコンバージョン率に大きな差が出ることがよくあります)
- マーケティングチャネル(有料ユーザーとオーガニックユーザーではコンバージョン率が異なる場合があります)
- 新規ユーザーとリピーター
Phase 5 — HTML ファネルレポートを生成する
ファネルレポートをその場で生成し、
/tmp/cja_funnel_health_check_report_<YYYY-MM-DD_HHMMSS>.html に書き込みます。
HTML テンプレート
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Funnel Health Check — {ORG_NAME} — {FUNNEL_NAME}</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700;900&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/chart.umd.min.js"></script>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #f5f4f1;
--surface: #ffffff;
--ink: #1a1a1a;
--ink-muted: #6b6b6b;
--border: #e5e2dc;
--header-bg: #0e0e10;
--header-warm: #3a1010;
--accent-red: #c8312f;
--accent-red-bright: #ff6b68;
--accent-red-soft: #fdecea;
--accent-green: #1f7a4d;
--accent-yellow: #d4a017;
}
body { font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background: var(--bg); color: var(--ink); line-height: 1.5;
-webkit-font-smoothing: antialiased; }
/* === Header === */
header { background: linear-gradient(120deg, var(--header-bg) 0%, #1a0d0d 55%, var(--header-warm) 100%);
color: #fff; padding: 56px 56px 44px; position: relative; overflow: hidden; }
header::after { content: ""; position: absolute; right: -140px; top: -140px;
width: 460px; height: 460px;
background: radial-gradient(circle, rgba(200,49,47,.35) 0%, transparent 70%);
pointer-events: none; }
.header-inner { max-width: 1080px; margin: 0 auto; position: relative; z-index: 1; }
.eyebrow { display: inline-flex; align-items: center; gap: 8px;
padding: 6px 14px; border: 1px solid rgba(255,107,104,.55);
border-radius: 999px; color: var(--accent-red-bright);
font-size: 11px; font-weight: 600; letter-spacing: 1.2px;
text-transform: uppercase; margin-bottom: 24px;
background: rgba(200,49,47,.10); }
.eyebrow::before { content: ""; width: 6px; height: 6px;
background: var(--accent-red-bright); border-radius: 50%; }
header h1 { font-family: "Playfair Display", Georgia, serif;
font-size: 56px; font-weight: 700; letter-spacing: -1.5px;
line-height: 1.05; margin-bottom: 14px; color: #fff; }
header .lede { font-size: 16px; max-width: 560px;
color: rgba(255,255,255,.80); margin-bottom: 24px;
line-height: 1.55; }
header .meta { display: flex; flex-wrap: wrap; gap: 22px;
font-size: 13px; color: rgba(255,255,255,.60); }
header .meta span { display: inline-flex; align-items: center; gap: 6px; }
header .meta .icon { opacity: .8; }
/* === Tabs === */
nav { background: var(--surface); border-bottom: 1px solid var(--border);
padding: 0 56px; display: flex; gap: 28px;
position: sticky; top: 0; z-index: 50; }
nav a { display: block; padding: 16px 0; font-size: 14px;
color: var(--ink); text-decoration: none;
border-bottom: 2px solid transparent;
transition: border-color .15s ease; }
nav a:hover { border-bottom-color: var(--accent-red); }
/* === Container === */
.container { max-width: 1080px; margin: 0 auto; padding: 36px 56px 60px; }
/* === Section label === */
.section-label { font-size: 11px; font-weight: 700;
text-transform: uppercase; letter-spacing: 1.4px;
color: var(--ink-muted); margin-bottom: 14px;
padding-bottom: 10px; border-bottom: 1px solid var(--border); }
/* === KPI grid === */
.kpi-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 14px; margin-bottom: 36px; }
.kpi-tile { background: var(--surface); border-radius: 8px;
padding: 22px 22px 20px;
border-top: 3px solid #b9b6ae;
box-shadow: 0 1px 3px rgba(0,0,0,.05); }
.kpi-tile.down { border-top-color: var(--accent-red); }
.kpi-tile.up { border-top-color: var(--accent-green); }
.kpi-tile.flat { border-top-color: #b9b6ae; }
.kpi-head { display: flex; justify-content: space-between;
align-items: center; margin-bottom: 10px; }
.kpi-label { font-size: 11px; font-weight: 700;
text-transform: uppercase;
color: var(--ink-muted); letter-spacing: 1px; }
.kpi-value { font-family: "Playfair Display", Georgia, serif;
font-weight: 700; font-size: 38px;
line-height: 1; color: var(--ink);
margin-bottom: 12px; }
.pill { display: inline-flex; align-items: center; gap: 4px;
padding: 3px 9px; border-radius: 4px;
font-size: 12px; font-weight: 600; line-height: 1.4; }
.pill.down { background: var(--accent-red-soft); color: var(--accent-red); }
.pill.up { background: #ebf5ef; color: var(--accent-green); }
.pill.flat { background: #f1efea; color: var(--ink-muted); }
.prior { display: block; margin-top: 10px;
font-size: 12px; color: var(--ink-muted); }
/* === Funnel chart wrap === */
.chart-wrap { background: var(--surface); border-radius: 8px;
padding: 28px 32px;
box-shadow: 0 1px 3px rgba(0,0,0,.04);
margin-bottom: 22px; }
.chart-wrap h2 { font-family: "Playfair Display", Georgia, serif;
font-size: 18px; font-weight: 700;
margin-bottom: 18px;
padding-bottom: 12px;
border-bottom: 1px solid var(--border); }
/* === Sections (collapsible tables) === */
.section { background: var(--surface); border-radius: 8px;
box-shadow: 0 1px 3px rgba(0,0,0,.04);
margin-bottom: 22px; overflow: hidden; }
.section-header { padding: 18px 28px; border-bottom: 1px solid var(--border);
display: flex; justify-content: space-between;
align-items: center; cursor: pointer; }
.section-header h2 { font-family: "Playfair Display", Georgia, serif;
font-size: 18px; font-weight: 700; }
table { width: 100%; border-collapse: collapse; font-size: 13px; }
thead th { background: #faf8f4; padding: 12px 22px;
text-align: left; font-weight: 600;
text-transform: uppercase; letter-spacing: .6px;
font-size: 11px; color: var(--ink-muted);
border-bottom: 1px solid var(--border); }
tbody td { padding: 12px 22px; border-bottom: 1px solid #f4f1eb; }
tbody tr:last-child td { border-bottom: none; }
.badge { display: inline-block; padding: 3px 9px; border-radius: 4px;
font-size: 11px; font-weight: 600; }
.badge.green { background: #ebf5ef; color: var(--accent-green); }
.badge.red { background: var(--accent-red-soft); color: var(--accent-red); }
.badge.yellow { background: #fef6e3; color: #b67a08; }
.badge.grey { background: #f1efea; color: var(--ink-muted); }
.highlight-row td { background: var(--accent-red-soft) !important;
font-weight: 700; }
.progress-bar-wrap { background: #f1efea; border-radius: 4px;
height: 8px; overflow: hidden;
width: 100%; min-width: 80px; }
.progress-bar { height: 100%; border-radius: 4px;
background: linear-gradient(90deg, var(--accent-red), #8a1d1c); }
.rec-item { display: flex; gap: 12px; align-items: flex-start;
padding: 14px 28px; border-bottom: 1px solid #f1eeea;
font-size: 14px; line-height: 1.55; }
.rec-item:last-child { border-bottom: none; }
.back-top { position: fixed; bottom: 24px; right: 24px;
background: var(--accent-red); color: #fff;
width: 44px; height: 44px; border-radius: 50%;
border: none; font-size: 20px; cursor: pointer;
box-shadow: 0 4px 12px rgba(200,49,47,0.30); }
footer { text-align: center; padding: 32px 24px;
font-size: 12px; color: var(--ink-muted); }
/* === Print === */
@media print {
nav { display: none; position: static; }
header { padding: 36px 32px 28px; }
header h1 { font-size: 42px; }
.section-header { cursor: default; }
.kpi-row { page-break-inside: avoid; }
.kpi-tile, .chart-wrap, .section {
box-shadow: none; border: 1px solid var(--border);
}
.back-top { display: none; }
}
</style>
</head>
<body>
<header>
<div class="header-inner">
<div class="eyebrow">Funnel Health Report</div>
<h1>{ORG_NAME} Funnel Health</h1>
<p class="lede">Step-by-step conversion for the {FUNNEL_NAME} journey across {DATE_RANGE}, with the biggest leakage point surfaced.</p>
<div class="meta">
<span><span class="icon">📅</span> {DATE_RANGE}</span>
<span><span class="icon">📊</span> {DATA_VIEW}</span>
<span><span class="icon">🕔</span> Prepared {GENERATED_DATE}</span>
</div>
</div>
</header>
<nav>
<a href="#overview">Overview</a>
<a href="#chart">Funnel Chart</a>
<a href="#steps">Step Detail</a>
<a href="#segments">Segment Breakdown</a>
<a href="#recs">Recommendations</a>
</nav>
<div class="container">
<div class="section-label">Funnel Summary</div>
<div id="overview" class="kpi-row">
<div class="kpi-tile flat">
<div class="kpi-head"><div class="kpi-label">Entered Funnel</div></div>
<div class="kpi-value">{STEP_1_COUNT}</div>
<span class="prior">Step 1 visitors</span>
</div>
<div class="kpi-tile flat">
<div class="kpi-head"><div class="kpi-label">Completed Funnel</div></div>
<div class="kpi-value">{STEP_N_COUNT}</div>
<span class="prior">Reached final step</span>
</div>
<div class="kpi-tile flat">
<div class="kpi-head"><div class="kpi-label">Overall Conversion</div></div>
<div class="kpi-value">{OVERALL_CVR}%</div>
<span class="prior">End-to-end rate</span>
</div>
<div class="kpi-tile down">
<div class="kpi-head"><div class="kpi-label">Biggest Drop-Off Step</div></div>
<div class="kpi-value" style="font-size:22px;">{WORST_STEP_NAME}</div>
<span class="pill down">▼ Worst leakage</span>
</div>
<div class="kpi-tile down">
<div class="kpi-head"><div class="kpi-label">Worst Step Drop-Off</div></div>
<div class="kpi-value">{WORST_STEP_DROPOFF}%</div>
<span class="prior">Of visitors lost at this step</span>
</div>
</div>
<div id="chart" class="chart-wrap">
<h2>Funnel Visualization</h2>
<canvas id="funnelChart" height="100"></canvas>
</div>
<div id="steps" class="section">
<div class="section-header" onclick="toggle('steps-body')">
<h2>Step-by-Step Analysis</h2>
<span id="steps-body-icon">▾</span>
</div>
<div id="steps-body">
<table>
<thead><tr>
<th>Step</th>
<th>Visitors</th>
<th>% of Step 1</th>
<th>Step Conversion</th>
<th>Drop-Off</th>
<th>Drop-Off Rate</th>
<th>Visual</th>
</tr></thead>
<tbody>
</tbody>
</table>
</div>
</div>
<div id="segments" class="section">
<div class="section-header" onclick="toggle('seg-body')">
<h2>Segment Breakdown at Worst Step</h2>
<span id="seg-body-icon">▾</span>
</div>
<div id="seg-body">
<table>
<thead><tr>
<th>Segment / Dimension</th>
<th>Entered Worst Step</th>
<th>Passed Worst Step</th>
<th>Conversion</th>
<th>vs. Average</th>
</tr></thead>
<tbody>
</tbody>
</table>
</div>
</div>
<div id="recs" class="section">
<div class="section-header" onclick="toggle('rec-body')">
<h2>Optimization Recommendations</h2>
<span id="rec-body-icon">▾</span>
</div>
<div id="rec-body">
</div>
</div>
</div>
<button class="back-top" onclick="window.scrollTo({top:0,behavior:'smooth'})">↑</button>
<footer>Funnel Health Check — {ORG_NAME} — Generated {GENERATED_DATE}</footer>
<script>
// Funnel bar chart — recolor via design tokens.
// Stage colors fade from accent-red (worst leakage upstream) to a deeper red downstream.
const ctx = document.getElementById('funnelChart').getContext('2d');
new Chart(ctx, {
type: 'bar',
data: {
labels: {STEP_NAMES_JSON},
datasets: [{
label: 'Visitors',
data: {STEP_COUNTS_JSON},
backgroundColor: [
'rgba(200,49,47,0.90)',
'rgba(200,49,47,0.72)',
'rgba(200,49,47,0.54)',
'rgba(200,49,47,0.38)',
'rgba(200,49,47,0.22)'
],
borderRadius: 6
}]
},
options: {
responsive: true,
plugins: { legend: { display: false } },
scales: {
y: { beginAtZero: true, grid: { color: '#eee9df' },
ticks: { color: '#6b6b6b' } },
x: { grid: { display: false },
ticks: { color: '#1a1a1a', font: { weight: '600' } } }
}
}
});
function toggle(id) {
var el = document.getElementById(id);
var ic = document.getElementById(id + '-icon');
if (el.style.display === 'none') { el.style.display=''; ic.textContent='\u25be'; }
else { el.style.display='none'; ic.textContent='\u25b8'; }
}
</script>
</body></html>
ワークフローの概要
- ユーザーの説明からファネルのステップを解析します。
- 曖昧なステップを確認します(質問は一度に 1 つずつ行います)。
searchDimensionItemsを使ってページ名を特定します。- アドホックセグメントフィルターを適用して、ステップごとに
runReportを 1 回実行し、訪問者数を記録します。 - ステップのコンバージョン率、離脱数、離脱率を計算します。
- 最も離脱が多いステップを特定します。
- 必要に応じて、離脱が最も多いステップでディメンション別の内訳を実行します。
- Chart.js のファネル可視化を含む HTML レポートを生成します。
/tmp/cja_funnel_health_check_report_<YYYY-MM-DD_HHMMSS>.htmlに書き込みます。open /tmp/cja_funnel_health_check_report_<YYYY-MM-DD_HHMMSS>.htmlで開きます。- その場で次のように要約します:「全体のコンバージョン率:X%。最も離脱が多いのは[ステップ N]: ユーザーの Y%が離脱しています。モバイルユーザーの離脱率はデスクトップの 2 倍です。」
重要なガードレール
- 読み取り専用の分析です。 セグメント、計算指標、プロジェクト定義を自動で変更しないでください。
- 実行前にファネルのステージを確認してください。 ステージ定義が曖昧だと誤解を招く結果になるため、まずユーザーに確認してください。
- アトリビューションモデルに留意してください。 ファネルのコンバージョン率はデータビューのアトリビューションモデルに左右されるため、レポート内で言及してください。
- データの不完全さを明示してください。 いずれかのステージの件数がゼロ、または不自然に少ない場合は、結論を出す前にトラッキングの欠落が考えられることを記載してください。
- 日付範囲に上限を設けてください。 非常に長い期間(90 日超)のファネル分析は時間がかかる可能性があるため、デフォルトとして 30 日間を提案してください。
- ステージの順序を決めつけないでください。 離脱率を計算する前に、ステージが順序どおりで、互いに排他的であることをユーザーに確認してください。
インタラクション例
「チェックアウトファネルの状況を確認してください。ユーザーがどこで離脱しているか知りたいです。」
- セットアップ:
findDataViewsを呼び出し、ユーザーが e コマースのデータビューを選択します。setDefaultSessionDataViewIdを呼び出します。 - ファネルの定義: 「チェックアウトの各ステージを教えてください」と尋ねます。ユーザーは「商品閲覧 → カートに追加 → チェックアウト開始 → 購入」と答えます。
- 分析: 過去 30 日間の各ステージ間の遷移について
runReportを実行します。離脱率を計算します:商品閲覧→カート 22%、カート→チェックアウト 58%、チェックアウト→購入 71%。 - 調査結果: 最も離脱率が高いステップとして、カート→チェックアウト(78%が離脱)を特定します。デバイスタイプ別に分類し、モバイルのコンバージョン率がデスクトップより 40%低いことを確認します。
- レポート: 各ステージの離脱率、主な離脱セグメント、優先度順の 3 つの推奨事項を含むファネルの可視化を提示します。
推奨事項のロジック
- 最も離脱率が高いステップが 60%超の場合:「重大な離脱が発生しています。このステップに問題があるか、ユーザーの期待と合っていません。UX の調査を優先してください。」
- モバイルの離脱率がデスクトップの 2 倍超の場合:「このステップのモバイル UX に改善が必要です。専用のモバイルフロー、または簡略化したフォームを検討してください。」
- 特定のチャネルの離脱率が平均より 40%超高い場合:「このチャネルからのユーザーは、流入時の意図が合っていない可能性があります。ランディングページとの整合性を確認してください。」
- ステップ 1 の件数が 1,000 未満の場合:「ファネルへの流入量が少なすぎるため、統計的な信頼性を確保できません。ステップの定義を確認するか、日付範囲を広げてください。」