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

Goals

ثبت نتیجه‌های مهم محصول با trackGoal و useTrackGoal.

Goal برای ثبت نتیجه‌هایی استفاده می‌شود که در محصول شما معنای مشخصی دارند؛ مثل تکمیل ثبت‌نام، ارسال درخواست دمو، شروع Trial یا رسیدن کاربر به مرحله Activation.

برخلاف رفتارهای عمومی مثل Pageview یا Click، Goal بهتر است فقط برای اتفاق‌هایی تعریف شود که واقعاً نشان می‌دهند کاربر به یک نقطه مهم در Journey رسیده است.

برای هر Goal یک key ثابت و قابل گزارش انتخاب کنید. این Key شناسه اصلی Goal در داده‌های آلفاناست و بهتر است کوتاه، انگلیسی و قابل‌فهم باشد.

برای مثال:

text
signup_completed
demo_requested
trial_started
account_activated

ثبت Goal با Tracker#

برای ثبت Goal در JavaScript یا TypeScript می‌توانید از trackGoal() استفاده کنید:

typescript
tracker.trackGoal({
  key: "signup_completed",
  name: "Signup completed",
  value: 1,
  metadata: {
    source: "pricing_page",
  },
});

در این مثال، رسیدن کاربر به پایان جریان ثبت‌نام با Key ثابت signup_completed ثبت می‌شود.

فیلدهای همراه Goal می‌توانند context بیشتری درباره همان نتیجه در اختیار تحلیل قرار دهند.

  • key شناسه ثابت Goal است.
  • name یک نام خواناتر برای Goal مشخص می‌کند.
  • value در صورت نیاز یک مقدار عددی همراه Goal ثبت می‌کند.
  • metadata اطلاعات تکمیلی مرتبط با همان اتفاق را نگه می‌دارد.

برای مثال، اگر ثبت‌نام از صفحه Pricing شروع شده باشد، می‌توانید این context را در Metadata نگه دارید:

typescript
metadata: {
  source: "pricing_page",
}

این اطلاعات کمک می‌کنند یک نتیجه یکسان را در contextهای مختلف بهتر بررسی کنید، بدون اینکه برای هر Source یک Goal Key جداگانه بسازید.

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

Key بهتر است معنای خود رفتار را توضیح دهد، نه محل فعلی Button یا طراحی UI را.

برای مثال:

text
signup_completed

انتخاب مناسب‌تری از چیزی مثل:

text
blue_button_clicked

است؛ چون رنگ، محل یا طراحی Button ممکن است در آینده تغییر کند، اما معنای تکمیل ثبت‌نام همان باقی می‌ماند.

Goal باید به سؤال «چه نتیجه مهمی اتفاق افتاد؟» پاسخ دهد، نه صرفاً «کاربر روی چه چیزی کلیک کرد؟».

استفاده در React#

در React می‌توانید به‌جای دسترسی مستقیم به instance اصلی Tracker از useTrackGoal() استفاده کنید.

برای مثال:

tsx
import { useTrackGoal } from "alphana-sdk/react";

export function SignupComplete() {
  const trackGoal = useTrackGoal();

  const handleComplete = () => {
    trackGoal({
      key: "signup_completed",
      name: "Signup completed",
      value: 1,
    });
  };

  return <button onClick={handleComplete}>تکمیل ثبت‌نام</button>;
}

useTrackGoal() یک callback برای همان عملیات trackGoal در اختیار Component قرار می‌دهد و برای استفاده داخل Event Handlerها مناسب است.

اگر Component زیر UserTrackerProvider قرار داشته باشد، Goal از طریق Tracker فعلی ثبت می‌شود.

برای جزئیات بیشتر درباره رفتار Hookها، صفحه React Hooks را ببینید.

Goal برای Conversion#

Goalها می‌توانند نتیجه‌های مهمی را ثبت کنند که بعداً برای تحلیل Conversion و Journey محصول ارزش دارند.

نمونه‌های معمول:

  • تکمیل Signup
  • ارسال Demo Request
  • شروع Trial
  • Activation
  • تکمیل Onboarding
  • ارسال فرم مهم
  • رسیدن به یک مرحله مشخص از محصول

برای مثال:

typescript
tracker.trackGoal({
  key: "demo_requested",
  name: "Demo requested",
});

یا:

typescript
tracker.trackGoal({
  key: "trial_started",
  name: "Trial started",
});

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

ثبت Goal بدون تغییر کد#

برای بعضی سایت‌ها لازم نیست برای ثبت Goal حتماً کد جدیدی به پروژه اضافه کنید.

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

text
/dashboard/goals

در این حالت، HTML id مربوط به Element موردنظر را ثبت می‌کنید و آلفانا می‌تواند کلیک روی همان Element را به Goal تعریف‌شده متصل کند.

برای مثال، اگر Button ثبت‌نام شما این ساختار را داشته باشد:

html
<button id="signup-btn">ثبت‌نام</button>

می‌توانید signup-btn را در تنظیم Goal مربوط به Click استفاده کنید.

این روش برای سایت‌هایی مناسب است که می‌خواهید یک Interaction مشخص را بدون تغییر مستقیم JavaScript به‌عنوان Goal دنبال کنید.

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

اگر Goal بر اساس HTML Element تعریف می‌شود، بهتر است id آن Element پایدار باشد.

از شناسه‌هایی که ممکن است با تغییر Style، Layout یا Component به‌صورت خودکار عوض شوند استفاده نکنید.

برای مثال:

html
<button id="signup-btn">ثبت‌نام</button>

قابل‌پیش‌بینی‌تر از شناسه‌ای است که فقط برای Styling یا توسط یک Library به‌صورت داینامیک تولید شده باشد.

هرچه شناسه Element پایدارتر باشد، احتمال قطع شدن Tracking بعد از تغییرات UI کمتر خواهد بود.

Goal را در نقطه درست ثبت کنید#

زمان ثبت Goal باید با لحظه‌ای هماهنگ باشد که نتیجه واقعاً اتفاق افتاده است.

برای مثال، اگر کاربر روی Button ثبت‌نام کلیک کرده اما درخواست ثبت‌نام با خطا مواجه شده است، Click اولیه لزوماً به معنای signup_completed نیست.

در چنین شرایطی بهتر است Goal تکمیل ثبت‌نام را بعد از تأیید موفق همان فرآیند ثبت کنید.

همین منطق برای Demo Request، Trial Start یا Activation هم برقرار است: Goal را به نتیجه واقعی وصل کنید، نه صرفاً به اولین Interactionی که ممکن است به آن نتیجه منجر شود.

ثبات Keyها#

بعد از اینکه یک Goal در Production استفاده شد، Key آن را تا جای ممکن ثابت نگه دارید.

برای مثال، اگر ابتدا از:

text
trial_started

استفاده کرده‌اید، بعداً فقط برای تغییر ظاهر Naming آن را به:

text
start_trial

تغییر ندهید.

از نگاه داده، این دو Key دو Goal متفاوت هستند و گزارش‌های آن‌ها در سری زمانی از یکدیگر جدا می‌شوند.

اگر فقط نام نمایشی Goal نیاز به تغییر دارد، بهتر است تا زمانی که معنای رفتار عوض نشده، Key اصلی را حفظ کنید.

پیشنهاد برای Naming#

یک الگوی ساده این است که Keyها را بر اساس نتیجه و به‌صورت snake_case تعریف کنید:

text
signup_completed
demo_requested
trial_started
checkout_completed
profile_completed

نام‌ها را کوتاه اما واضح نگه دارید و از تعریف چند Key برای یک مفهوم واحد خودداری کنید.

ثبات Naming باعث می‌شود گزارش‌ها، Journeyها و تحلیل‌های بعدی خواناتر باقی بمانند.