رفتن به محتوای اصلی

Goal آزمایش

قرارداد Goalهای page_view و click و روش شمارش Conversion در A/B Testهای آلفانا.

Goal در A/B Test مشخص می‌کند چه رفتاری به‌عنوان Conversion آزمایش در نظر گرفته شود.

در آلفانا، Conversion آزمایش از Eventهایی محاسبه می‌شود که از قبل در Session کاربر ثبت شده‌اند. بنابراین برای A/B Test لازم نیست call جداگانه‌ای با نام conversion ارسال کنید.

آلفانا بر اساس Goal تعریف‌شده در تنظیمات Experiment، Eventهای page_view یا click موجود را بررسی می‌کند و در صورت مطابقت با شرایط Goal، Conversion را برای همان آزمایش محاسبه می‌کند.

نوع‌های Goal#

در نسخه فعلی، Goal آزمایش می‌تواند یکی از دو نوع زیر باشد:

نوعتنظیمات
page_viewpath و pathMatch
clickelementLabel، labelMatch و path اختیاری

انتخاب نوع Goal باید با رفتاری هماهنگ باشد که واقعاً موفقیت Experiment را نشان می‌دهد.

اگر رسیدن کاربر به یک صفحه مشخص نتیجه موردنظر است، page_view انتخاب مناسب‌تری است. اگر موفقیت بر اساس تعامل با یک Element مشخص سنجیده می‌شود، می‌توانید از Goal نوع click استفاده کنید.

Goal نوع page_view#

در Goalهای page_view، آلفانا مسیر Pageview ثبت‌شده را با path تعریف‌شده در Experiment مقایسه می‌کند.

برای مشخص کردن نحوه این مقایسه، از pathMatch استفاده می‌شود.

مقادیر پشتیبانی‌شده:

text
exact
contains
starts_with
regex

هرکدام مشخص می‌کنند Path ثبت‌شده با چه منطقی باید به مقدار تعریف‌شده در Goal تطبیق داده شود.

exact#

در حالت exact، مسیر باید دقیقاً با مقدار تعریف‌شده برابر باشد.

برای مثال:

text
path: /checkout/success
pathMatch: exact

در این حالت فقط Pageview همین مسیر با Goal تطبیق پیدا می‌کند.

contains#

contains زمانی مناسب است که کافی باشد Path شامل یک مقدار مشخص باشد.

برای مثال:

text
path: /checkout/
pathMatch: contains

این حالت می‌تواند برای مسیرهایی مناسب باشد که بخش ثابتی دارند اما قسمت دیگری از URL آن‌ها تغییر می‌کند.

starts_with#

در این حالت، Path باید با مقدار تعریف‌شده شروع شود.

برای مثال:

text
path: /products/
pathMatch: starts_with

این نوع Match برای گروهی از صفحات با Prefix مشترک کاربرد دارد.

regex#

regex امکان تعریف الگوی پیچیده‌تر برای تطبیق Path را فراهم می‌کند.

این گزینه زمانی مناسب است که exact، contains یا starts_with برای ساختار Routeهای محصول کافی نباشند.

در استفاده از Regex بهتر است الگو را قبل از اجرای Experiment روی Routeهای واقعی تست کنید تا Pageviewهای ناخواسته به‌عنوان Conversion شمرده نشوند.

Goal نوع click#

در Goalهای click، Conversion بر اساس Label واقعی Elementی محاسبه می‌شود که کاربر روی آن کلیک کرده است.

تنظیمات اصلی این Goal عبارت‌اند از:

text
elementLabel
labelMatch

و در صورت نیاز می‌توانید path را نیز برای محدود کردن Goal به یک صفحه یا مسیر مشخص تعریف کنید.

برای مثال، اگر Goal کلیک روی CTA ثبت‌نام باشد، elementLabel باید با Label واقعی Event کلیک ثبت‌شده هماهنگ باشد.

labelMatch#

برای مقایسه Label کلیک، دو حالت در دسترس است:

text
exact
contains

exact#

در حالت exact، Label ثبت‌شده باید دقیقاً با مقدار elementLabel برابر باشد.

این حالت زمانی مناسب است که Label Element ثابت و قابل‌پیش‌بینی باشد.

contains#

در حالت contains، کافی است Label ثبت‌شده شامل مقدار تعریف‌شده در elementLabel باشد.

این گزینه می‌تواند در شرایطی مناسب باشد که Label کامل Element شامل متن یا context بیشتری است، اما بخش مشخصی از آن برای شناسایی Goal کافی است.

محدود کردن Click Goal به Path#

برای Goal نوع click، Path اختیاری است.

اگر یک Element با Label مشابه در چند صفحه وجود داشته باشد، تعریف Path کمک می‌کند فقط کلیک‌هایی که در context موردنظر اتفاق افتاده‌اند به‌عنوان Conversion آزمایش در نظر گرفته شوند.

برای مثال، اگر دکمه‌ای با Label مشابه در چند بخش محصول وجود دارد اما فقط کلیک آن در صفحه Pricing برای Experiment مهم است، بهتر است Goal را به همان Path محدود کنید.

به این شکل احتمال شمارش Interactionهای نامرتبط کمتر می‌شود.

Conversion چگونه محاسبه می‌شود؟#

Conversion از Eventهای ثبت‌شده Session محاسبه می‌شود.

یعنی جریان کلی به این شکل است:

  1. Visitor وارد Experiment می‌شود و یک Variant Assignment دریافت می‌کند.
  2. SDK رفتارهای معمول مثل Pageview و Click را ثبت می‌کند.
  3. Backend Eventهای ثبت‌شده را با Goal تعریف‌شده Experiment مقایسه می‌کند.
  4. اگر Event با شرایط Goal مطابقت داشته باشد، Conversion برای همان Experiment و Variant محاسبه می‌شود.
  5. نحوه شمارش نهایی بر اساس تنظیماتی مثل countBy و conversionWindowHours خود Experiment انجام می‌شود.

بنابراین لازم نیست هنگام رسیدن کاربر به Goal یک API مجزا با نام Conversion صدا بزنید.

SPA و Next.js#

در SPAها و Frameworkهایی مثل Next.js، تغییر Route معمولاً بدون reload کامل صفحه انجام می‌شود.

اگر Goal آزمایش از نوع page_view باشد، ثبت درست Navigation اهمیت زیادی دارد؛ چون Conversion از همان Pageviewهای ثبت‌شده محاسبه می‌شود.

در Next.js App Router مطمئن شوید usePageView() هنگام تغییر Path اجرا می‌شود:

tsx
const pathname = usePathname();

usePageView(pathname);

یا به شکل مستقیم:

tsx
usePageView(usePathname());

اگر Route تغییر کند اما Pageview جدید ثبت نشود، Goal نوع page_view نیز نمی‌تواند آن Navigation را به‌عنوان Conversion تشخیص دهد.

برای جزئیات integration، راهنمای Next.js App Router را ببینید.

هماهنگی Label در Click Goal#

در Goalهای click، مقدار elementLabel باید با Label واقعی‌ای که SDK برای Element ثبت می‌کند هماهنگ باشد.

اگر Label تعریف‌شده در Experiment با داده واقعی Event متفاوت باشد، کلیک کاربر با Goal Match نمی‌شود و Conversion ثبت نخواهد شد.

بهتر است قبل از اجرای Experiment، Interaction موردنظر را روی سایت تست کنید و مطمئن شوید Label ثبت‌شده همان مقداری است که در Goal استفاده کرده‌اید.

این موضوع به‌خصوص برای Buttonها یا Elementهایی مهم است که متن آن‌ها پویا، ترجمه‌شده یا وابسته به State صفحه است.

تفاوت trackGoal() با Goal آزمایش#

trackGoal() و Conversion Goal در A/B Test دو مفهوم جدا هستند.

trackGoal() برای ثبت Goalهای عمومی Behavior در SDK استفاده می‌شود:

typescript
tracker.trackGoal({
  key: "signup_completed",
});

این Goal می‌تواند به‌عنوان یک رفتار معنادار در تحلیل محصول ثبت شود.

اما Conversion Goal یک A/B Test از تعریف خود Experiment و Eventهای واقعی page_view یا click محاسبه می‌شود.

بنابراین اجرای trackGoal() به‌تنهایی Conversion یک Experiment را ثبت نمی‌کند، مگر اینکه منطق Experiment در آینده یا بخش دیگری صراحتاً بر همان داده متکی باشد.

در قرارداد فعلی A/B Testing، Goalهای Conversion بر اساس page_view و click محاسبه می‌شوند.

انتخاب Goal مناسب#

Goal باید تا جای ممکن به نتیجه‌ای نزدیک باشد که Experiment برای بهبود آن طراحی شده است.

برای مثال:

  • اگر Variantها صفحه Checkout را تغییر می‌دهند، رسیدن به صفحه Success می‌تواند Goal مناسب‌تری از کلیک روی دکمه اولیه باشد.
  • اگر Experiment فقط روی CTA یک Landing Page تمرکز دارد، Click Goal می‌تواند مستقیماً همان Interaction را اندازه بگیرد.
  • اگر رفتار نهایی چند مرحله بعد اتفاق می‌افتد، conversionWindowHours را هم متناسب با زمان واقعی Journey تنظیم کنید.

Goal خیلی دور از فرضیه آزمایش، نتیجه را سخت‌تر قابل‌تفسیر می‌کند. Goal خیلی زودهنگام نیز ممکن است فقط یک Interaction میانی را اندازه بگیرد، نه نتیجه‌ای که واقعاً برای محصول اهمیت دارد.