לאחרונה, לקוח שיפץ את תהליך התשלום — ההמרה ירדה ב-20%. הרצנו מבחן A/B שהראה שהגרסה הישנה ביצעה ביצועים טובים יותר ב-15%. בפריסה מלאה, זה היה עולה לעסק 24,000 דולר בחודש. בדיקות מפוצלות הן הדרך היחידה לקבל החלטות עיצוביות המבוססות על נתונים, לא על אינטואיציה. במהלך העבודה שלנו, ביצענו יותר מ-200 ניסויים עבור חנויות מסחר אלקטרוני, דפי נחיתה ומוצרי SaaS. העלייה הממוצעת בהמרה היא 15–30%. חלק מהבדיקות הביאו רווח נוסף משמעותי.
ללא מבחני A/B, כל שינוי הוא הגרלה. אחד הלקוחות שלנו הוציא 30,000 דולר על עיצוב דף בית חדש שהוריד את ההמרה ב-8%. בדיקה הייתה מראה זאת תוך שבועיים, וחוסכת את כל התקציב.
נניח שאתה משנה דף נחיתה ללא בדיקה. אם ההמרה יורדת ב-10% עם 1,000 מבקרים יומיים, זה 100 לידים אבודים ביום. בחודש — 3,000 לידים, כל אחד עולה בממוצע 6 דולר — ההפסדים הם 18,000 דולר. עלות הבדיקה נמוכה בהרבה: בדרך כלל 600 עד 1,800 דולר.
אילו בעיות פותר מבחן A/B?
לעתים קרובות, צוותים בטוחים שעיצוב חדש או CTA ישפרו את ההמרה, אבל הסטטיסטיקה מראה את ההפך. לדוגמה, בדקנו שינוי צבע כפתור — ציפינו לעלייה של 20%, קיבלנו ירידה של 5%. מתרחשות גם שגיאות טכניות: חלוקת משתמשים שגויה, דליפת נתונים בין גרסאות, מעקב לא תקין. פעם גילינו שבגלל יישום פגום, 30% מהמשתמשים היו בשתי הגרסאות — היה צריך להפעיל מחדש את הבדיקה. והמלכודת הקלאסית: עצירת בדיקה מוקדמת כשההבדל נראה ברור אך גודל המדגם לא הושג. לפי Nielsen Norman Group, 73% מהבדיקות מופסקות מוקדם, מה שמוביל למסקנות שגויות.
איך אנחנו עושים את זה
כל ניסוי עוקב אחר התוכנית: אנליטיקה → עיצוב → יישום → מעקב → ניתוח. אנו משתמשים בטכנולוגיות מודרניות: React 18, Next.js 14, TypeScript, Node.js, Docker. לאחסון נתונים — PostgreSQL ו-Redis. Growthbook מאפשר לבצע איטרציה על השערות פי 3 מהר יותר בהשוואה ל-VWO: אתה כותב לוגיקה בצד הלקוח או השרת, לא דרך עורך ויזואלי. סטטיסטיקה בייסיאנית משפרת עוד יותר את קבלת ההחלטות תחת אי-ודאות.
יישום באמצעות Vercel Edge Middleware
// middleware.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
const EXPERIMENT_COOKIE = 'exp_checkout_v2';
const VARIANTS = ['control', 'variant-a', 'variant-b'];
function assignVariant(): string {
const rand = Math.random();
if (rand < 0.34) return 'control';
if (rand < 0.67) return 'variant-a';
return 'variant-b';
}
export function middleware(request: NextRequest) {
const response = NextResponse.next();
// Не участвуют: боты, уже назначенные пользователи
const existing = request.cookies.get(EXPERIMENT_COOKIE)?.value;
if (existing && VARIANTS.includes(existing)) {
return response;
}
const variant = assignVariant();
response.cookies.set(EXPERIMENT_COOKIE, variant, {
maxAge: 60 * 60 * 24 * 30, // 30 дней
httpOnly: true,
sameSite: 'lax',
});
// Variant передаём в заголовке для Server Components
response.headers.set('x-ab-checkout', variant);
return response;
}
export const config = {
matcher: ['/checkout/:path*'],
}; // app/checkout/page.tsx
import { cookies, headers } from 'next/headers';
export default function CheckoutPage() {
const variant = headers().get('x-ab-checkout') ?? cookies().get('exp_checkout_v2')?.value ?? 'control';
return (
<>
{variant === 'control' && <CheckoutV1 />}
{variant === 'variant-a' && <CheckoutV2OneStep />}
{variant === 'variant-b' && <CheckoutV2TwoStep />}
<ABTracker experiment="checkout_v2" variant={variant} />
</>
);
} מעקב אחר תוצאות
// components/ABTracker.tsx (Client Component)
'use client';
import { useEffect } from 'react';
export function ABTracker({ experiment, variant }: { experiment: string; variant: string; }) {
useEffect(() => {
gtag('event', 'experiment_impression', {
experiment_id: experiment,
variant_id: variant,
});
posthog.capture('$experiment_started', {
'$experiment_id': experiment,
'$variant_key': variant,
});
}, [experiment, variant]);
return null;
}
// Трекинг конверсии — в момент покупки
function trackConversion(variant: string) {
gtag('event', 'purchase', {
experiment_id: 'checkout_v2',
variant_id: variant,
value: orderTotal,
});
} Statsig: אינטגרציה מהירה
// Statsig SDK (серверная и клиентская части)
import Statsig from 'statsig-node';
await Statsig.initialize(process.env.STATSIG_SERVER_KEY!);
// В API route / Server Action
const experiment = Statsig.getExperiment(
{ userID: userId, email: userEmail },
'checkout_redesign'
);
const checkoutLayout = experiment.get('layout', 'single-page');
const ctaColor = experiment.get('cta_color', 'blue');
// Клиентская сторона (React SDK)
import { useExperiment } from 'statsig-react';
function PricingCTA() {
const { config } = useExperiment('pricing_cta');
const buttonText = config.get('button_text', 'Get Started');
const buttonVariant = config.get('button_variant', 'primary');
return (
<Button
variant={buttonVariant}
onClick={() => {
statsig.logEvent('cta_clicked', buttonText);
}}
>
{buttonText}
</Button>
);
} למה מובהקות סטטיסטית היא קריטית
ללא זה, אתה מסתכן בטעות בתנודה אקראית כניצחון. לפני ההשקה, אנו מחשבים את גודל המדגם הנדרש באמצעות הגישה התדירותית:
# Python: расчёт sample size
from statsmodels.stats.power import zt_ind_solve_power
baseline_rate = 0.03
expected_effect = 0.15 # относительное улучшение
lift = baseline_rate * expected_effect # 0.0045 абсолютно
n = zt_ind_solve_power(
effect_size=lift / (baseline_rate * (1 - baseline_rate)) ** 0.5,
alpha=0.05,
power=0.8,
)
print(f"Sample size per variant: {int(n)}") # ~12,000כלל: אל תפסיק את הבדיקה לפני הגעה לגודל המדגם המתוכנן, גם אם התוצאות נראות טובות. לבדיקה עם המרה של 5% ושיפור צפוי של 10%, אתה צריך 6,500 משתמשים לכל גרסה — זה 2–3 שבועות של תנועה לאתר ממוצע.
טיפ: אל תציץ בתוצאות מדי יום — זה מעוות את הסטטיסטיקה. חשב אוטומטית את ערך ה-p ועצור את הבדיקה רק כשגודל המדגם המתוכנן מושג. השתמש בבדיקות רציפות אם יש צורך בהחלטות ביניים.
איך לבחור כלי לבדיקות A/B
| כלי | סוג | הכי מתאים ל |
|---|---|---|
| Growthbook | קוד פתוח / SaaS | צוותים טכניים, אירוח עצמי |
| Statsig | SaaS | התחלה מהירה, אינטגרציית אנליטיקה |
| Optimizely | SaaS ארגוני | חברות גדולות, ניסויים מורכבים |
| VWO | SaaS | צוותי שיווק ללא מפתחים |
| Vercel Edge Experiments | PaaS | Next.js על Vercel |
| יישום מותאם אישית | - | שליטה מלאה, תקורה מינימלית |
אילו מדדים לעקוב במבחן A/B
| מדד | סוג | דוגמה |
|---|---|---|
| ראשי | פעולת מטרה | המרה לרכישה, הרשמה |
| משני | מעורבות | זמן באתר, צפיות בדפים |
| עסקי | הכנסות, LTV | ערך הזמנה ממוצע, שימור |
| מגן | סיכון | אחוז נטישה, שגיאות |
כל המדדים חייבים להיות מוגדרים לפני תחילת הניסוי. עקוב אחריהם ב-GA4: השתמש באירועים // middleware.ts import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; const EXPERIMENT_COOKIE = 'exp_checkout_v2'; const VARIANTS = ['control', 'variant-a', 'variant-b']; function assignVariant(): string { const rand = Math.random(); if (rand < 0.34) return 'control'; if (rand < 0.67) return 'variant-a'; return 'variant-b'; } export function middleware(request: NextRequest) { const response = NextResponse.next(); // Не участвуют: боты, уже назначенные пользователи const existing = request.cookies.get(EXPERIMENT_COOKIE)?.value; if (existing && VARIANTS.includes(existing)) { return response; } const variant = assignVariant(); response.cookies.set(EXPERIMENT_COOKIE, variant, { maxAge: 60 * 60 * 24 * 30, // 30 дней httpOnly: true, sameSite: 'lax', }); // Variant передаём в заголовке для Server Components response.headers.set('x-ab-checkout', variant); return response; } export const config = { matcher: ['/checkout/:path*'], }; ו-// app/checkout/page.tsx import { cookies, headers } from 'next/headers'; export default function CheckoutPage() { const variant = headers().get('x-ab-checkout') ?? cookies().get('exp_checkout_v2')?.value ?? 'control'; return ( <> {variant === 'control' && <CheckoutV1 />} {variant === 'variant-a' && <CheckoutV2OneStep />} {variant === 'variant-b' && <CheckoutV2TwoStep />} <ABTracker experiment="checkout_v2" variant={variant} /> </> ); } .
מה כלול בעבודה
- התקנת כלי לבדיקות A/B עבור הטכנולוגיות שלך (Growthbook, Statsig, VWO, Optimizely, או מותאם אישית).
- יישום חלוקת גרסאות בקצה האחורי/קצה הרשת עם הבטחות עקביות.
- אינטגרציית מעקב אירועים ל-GA4, PostHog, Amplitude.
- חישוב גודל המדגם הנדרש ומשך הבדיקה.
- תיעוד תוצאות והמלצות לניסויים נוספים.
- הדרכת הצוות שלך כיצד להריץ בדיקות ולפרש תוצאות.
התהליך שלנו
- אנליטיקה: לימוד מדדים נוכחיים, זיהוי צווארי בקבוק, ניסוח השערה.
- עיצוב: בחירת הכלי, הגדרת גרסאות ומדדי הצלחה.
- יישום: אינטגרציית חלוקה ומעקב, הגדרת לוחות מחוונים.
- השקה: התחלת הבדיקה, ניטור תקינות הנתונים.
- ניתוח: לאחר הגעה לגודל המדגם — בדיקה סטטיסטית, הפקת דוח.
לוח זמנים: 2 עד 4 ימי עסקים לבדיקה פשוטה, 5–10 ימים לבדיקה מורכבת עם לוגיקה מותאמת אישית. העלות מחושבת באופן פרטני.
הזמן התקנת בדיקות A/B וקבל צמיחת המרה מבוססת נתונים. צור קשר לייעוץ בנושא בחירת כלים וביצוע ניסויים.







