اگه یه مدت با GA4 کار کرده باشی، حتماً دیدی که یه عبارت عجیب و غریب به اسم (not set) توی بعضی از گزارش‌ها دیده میشه. توی این مقاله می‌خوام کامل برات توضیح بدم که این (not set) دقیقاً چیه و چطور میشه مدیریتش کرد.

اما بذار از همین اول یه چیز رو مشخص کنیم:

  • بعضی وقتا میشه این (not set) رو کامل حذف کرد.
  • بعضی وقتا فقط میشه تعداد دفعاتی که نشون داده میشه رو کم کرد.
  • و یه وقتایی هم کاری ازمون برنمیاد و باید همینجوری قبولش کنیم (مگه اینکه گوگل بیاد چیزی رو تغییر بده یا آپدیت بده).

خب، آماده‌ای؟ بریم سراغ اصل ماجرا!

هرچی بیشتر با GA4 کار می‌کنیم، چیزای بیشتری هم در موردش می‌فهمیم — هم امکاناتش، هم ایراداتش. (not set) یکی از اون چیزاست که هنوز خیلیاش مبهمه. 

(not set) توی GA4 به چه معناست؟

وقتی GA4 نمی‌تونه برای یه دایمنشن (dimension) توی گزارشت مقدار خاصی پیدا کنه، به جاش از (not set) استفاده می‌کنه. (not set) یه جور جای‌خالیه که پر نشده.

not set transaction id in google analytics explorations

مثلاً اگه فقط داری سایت رو با GA4 تحلیل می‌کنی و هیچ اپلیکیشنی نداری، ابعاد مربوط به اپلیکیشن مثل App Store برات میشه (not set). منطقیه، مگه نه؟

اما مشکل وقتی شروع میشه که این (not set) توی جاهایی ظاهر میشه که انتظارش رو نداری. توی این مقاله می‌خوام همین موارد رو بررسی کنم.

اول چندتا نکته کلی می‌گم، بعدش می‌رم سراغ حالت‌های مختلفی که باعث ایجاد (not set) توی GA4 میشن.

تا ۴۸ ساعت صبر کن بعد دوباره چک کن!

GA4 یه کم کند عمل می‌کنه و واسه پردازش دیتاها به زمان نیاز داره. اگه امروز یه چیزی رو ست کردی، حداقل ۲۴ تا حتی ۴۸ ساعت طول می‌کشه که نتیجه‌ش رو توی گزارش‌ها ببینی. پس اگه یه جا دیدی (not set) نوشته، اول این سوالو از خودت بپرس:

«آیا این تغییر/پیکربندی کمتر از ۴۸ ساعت قبل انجام شده؟» اگه آره، پس هنوز وقت لازم داره.
اگه نه، بریم ادامه مقاله رو بخونیم تا بفهمیم مشکل چیه.

گزارش لندینگ پیج (Landing Page) شامل (not set) هست!

این قضیه توی نسخه قبلی آنالیتیکس (یعنی Universal Analytics) هم بود، حالا توی GA4 هم هست.

not set landing page in google analytics 4

GA4 وقتی لندینگ پیج رو (not set) نشون میده که هیچ ایونت page_view (که پارامتر page_location رو هم داره) توی اون سشن ثبت نشده باشه. یعنی چی؟ یعنی اگه Page View نداشته باشی، لندینگ پیجی هم برات ثبت نمیشه. اما چطور ممکنه؟ مگه GA4 خودش اتومات صفحه‌ها رو ترک نمی‌کنه؟

بذار یه سناریو بگم:

فرض کن که تنظیمات پیش‌فرض سشن توی GA4 رو دست نزدی (یعنی بعد از ۳۰ دقیقه عدم فعالیت، سشن تموم میشه. کاربر یه تب از سایتت رو باز می‌کنه و بعد ولش می‌کنه (مثلاً میره نهار بخوره!). سشن به خاطر عدم فعالیت کاربر(کلیک/اسکرول نکردن) تموم میشه. بعد کاربر برمی‌گرده سر لپ‌تاپ و یه کاری انجام میده (مثلاً اسکرول میکنه یا ایونت user_engagement به GA4 می‌فرسته). اما کاربر صفحه رو ریفرش نمی‌کنه یا نمی‌ره صفحه دیگه ای. پس یه سشن جدید شروع میشه ولی ایونت Page View مربوط به اولین پیج سشن دوم به GA4 ارسال نشده.

نتیجه: یه سشن جدید بدون Page View داریم. پس لندینگ پیج هم نداریم: (not set)

راه‌حل چیه؟

نمی‌تونی کامل این مشکل رو از بین ببری، ولی می‌تونی تأثیرش رو کم کنی. بیا مدت سشن(session timeout) رو بیشتر کن. مدت پیش‌فرضش ۳۰ دقیقه‌ست، ولی می‌تونی بذاری رو ۴ ساعت یا حداکثر (۷ ساعت و ۵۵ دقیقه).

از این مسیر برو:

GA4 > Admin > Data Streams 

و بعد

 Configure tag settings > Show all > Adjust session timeout

اونجا تایمش رو عوض کن و ذخیره بزن.

adjust session timeout in ga4

نکته مهم: اگه تایم سشن رو زیاد کنی، تعداد سشن‌هات کمتر میشه، اما میانگین مدت زمان سشن‌هات بیشتر میشه. اگه با این موضوع اوکی هستی، تنظیمش کن.

عبور سشن از نیمه‌شب (Midnight)

یه دلیل دیگه برای (not set) اینه که سشن از نیمه‌شب رد میشه.اگه سشن قبل از نیمه‌شب شروع بشه و بعد از نیمه‌شب ادامه پیدا کنه، GA4 اون رو به‌عنوان دو تا سشن جدا در نظر می‌گیره.

اگه ایونت session_start قبل از نیمه‌شب ثبت باشه، مشکلی نیست و لندینگ پیج سشن اول درست ثبت میشه. ولی بعد از عبور از نیمه‌شب، یه سشن جدید بدون session_start ساخته میشه، و اون موقع هست که GA4 لندینگ پیج رو (not set) نشون میده.

فعلاً راه‌حلی براش نیست.GA4 این مدلی دیتاها رو پردازش می‌کنه.

تگ event ها زودتر از تگ کانفیگ اجرا میشه

موقع استفاده از گوگل تگ منیجر باید حواست باشه که تگ‌های event مثل view_item یا user_engagement بعد از Google Tag (یا همون config tag) فایر بشن. اگه برعکس این قضیه پیش اومد و event tag زودتر اجرا بشه، ممکنه GA4 لندینگ پیج رو درست ثبت نکنه و (not set) نشون بده.

ایونت page_view رو اصلا نداریم

این مورد به یکی از پارامترای Google Tag  به اسم send_page_view مربوط میشه. اگه ولیوی این پارامتر رو روی false گذاشته باشی و یه تگ page_view جدا هم نداشته باشی، خب طبیعی‌یه که page view ثبت نشه.


نتیجه  اینکه page_view نداریم و  لندینگ پیج = (not set). 

راه حل اینکه این پارامتر و مقدارش رو کاملا حذف کنین یا مقدار این پارامتر رو به true تغییر بدین و آخرین ورژن رو سابمیت و پابلیش کنین. 

 ارسال دیتا از طریق مژرمنت پروتکل(Measurement Protocol)

مژرمنت پروتکل یکی از راه‌های ارسال داده به GA4 هست. معمولاً از سمت سرور (مثلاً CRM یا بک‌اند) اطلاعاتی رو به آنالیتیکس می‌فرستیم. ولی این روش بیشتر برای تکمیل اطلاعاتیه که از سمت کاربر اومده، نه اینکه یه کاربر یا سشن جدید بسازه.

مثلاً:
یه کاربر توی سایتت فعال بوده، یه سشن ایجاد شده، حالا تو میای از سمت سرور یه event می‌فرستی که به اون سشن بچسبه. این کار تا ۷۲ ساعت بعد از ثبت یه سشن امکان‌پذیره.

اما یه نکته مهم:
داده‌هایی که با مژرمنت پلن فرستاده میشن، چیزایی مثل page_location یا user_agent رو به صورت خودکار از وب‌سایت نمی‌گیرن. پس اگه خودت این پارامترها رو نفرستی، GA4 نمی‌فهمه مرورگر کاربر چیه یا صفحه‌اش چی بوده، و اون ابعاد میشن (not set).

و بدتر اینکه، فعلاً به‌صورت رسمی هیچ راهی نیست که بتونی آی‌پی یا user agent رو از طریق مژرمنت پروتکل بفرستی! این یعنی GA4 نمی‌تونه لوکیشن، مرورگر، نوع دستگاه و… رو بفهمه → همش میشه (not set).

پس اگه دیدی توی گزارش‌هات بعضی چیزا (not set) شده، یه نگاه به داده‌هایی که از سرور فرستادی بنداز. شاید همین موضوع دلیلش باشه.

گزارش Source / Medium شامل (not set) هست

یه مورد خیلی رایج دیگه توی گزارش‌های traffic acquisition داریم، وقتی فیلتر رو می‌ذاری روی Source / Medium، بعضی از سشن‌ها (not set) هستن. یعنی نمی‌دونه کاربر از کجا اومده. اینا میرن توی دسته Unassigned.

not set source medium in ga4

دلایل رایجش چیه؟

مژرمنت پروتکل  (Measurement Protocol) به‌درستی پیاده‌سازی نشده.
دولوپر داره ایونت‌هایی رو به GA4 ارسال می‌کنه، اما سشن آیدی (session_id) رو به‌درستی توی اون‌ها قرار نمی‌ده. و اگه این ایونت به تایمی در گذشته (تا حداکثر ۷۲ ساعت قبل) ارسال بشه، پارامتر timestamp_micros یا وجود نداره یا مقدارش اشتباهه.

پارامتر session_id باید حاوی شناسه یک سشن واقعی باشه که قبلاً توی GA4 سمت کلاینت (مثلاً داخل سایت) ثبت شده باشه. اگه دولوپر این شناسه رو به‌صورت تصادفی بسازه، ولیوی سورس/مدیوم (source/medium) می‌شه (not set).

اگه ایونت به تایمی در گذشته ارسال بشه، دولوپر باید یه session_id معتبر قرار بده و هم پارامتر timestamp_micros رو که نشون‌دهنده زمان دقیق اون سشن در سایت بوده، داخل اون ریکوست قرار بده.

ایونت session_start وجود نداره.
ابعاد مرتبط با ترافیک سورس مثل "سشن سورس / مدیوم" از ایونت session_start گرفته می‌شن. اگه این ایونت توی سشن نباشه، این دایمنشن ها مقدار (not set) رو می‌گیرید.
اولین دلیل رایج برای اینکه چرا این اتفاق می‌افته، استفاده از سرورساید تگینگ (server-side tagging) هست.

ممکنه ستاپ شما طوری باشه که این ایونت از سرور تگینگ شما به GA4 ارسال نشن.

متأسفانه نتونستم دلایل دیگه‌ای برای اینکه چرا بعضی وقتا GA4 ایونت session_start رو جا می‌ندازه، پیدا کنم. معمولاً درصد خیلی کمی از سشن ها به این مشکل دچار می‌شن، ولی به‌هرحال اتفاق می‌افته. 

با اینکه دولوپرهای گوگل در تاریخ ۲ نوامبر ۲۰۲۳ بعضی دیباک ها رو اطلاع رسانی کردن، این مشکل هنوز وجود داره.

Audience Trigger ها
وقتی GA4 این قابلیت رو معرفی کرد، خیلی هیجان‌زده شدم. چون این امکان رو بهمون می‌داد که مخاطب‌های پیچیده‌تری بسازیم و وقتی یه بازدیدکننده وارد اون گروه می‌شه، GA4 به‌طور خودکار یه ایونت ارسال کنه.

ولی بعداً متوجه شدم که Audience Triggerها باعث می‌شن مقدار (not set) در گزارش سورس ترافیک بیشتر بشه. البته این همیشه اتفاق نمی‌افته، بنابراین تأثیر این مشکل در پراپرتی‌های مختلف متفاوته.

مثلاً متوجه شدم اگه Audience Trigger به یه مخاطب پیش‌بینی‌شده (Predictive Audience) مربوط باشه، به احتمال زیاد اون ایونت به هیچ سشنی اضافه نمی‌شه. در نتیجه، مقدار سورس/مدیوم می‌شه (not set)/(not set).

حتی گاهی اوقات Audience Triggerهای معمولی ( فاقد ویژگی "predictive") هم همین مشکل رو ایجاد می‌کنن.

متأسفانه راه‌حلی براش وجود نداره. Audience Triggerها در بک‌اند GA4 مدیریت می‌شن. بنابراین اگه دارید از این تریگرها استفاده می‌کنید (توجه: اینا رو با تریگرهای Google Tag Manager اشتباه نگیرید)، باید بپذیرید که تعداد (not set)هاتون بیشتر از حالت عادی می‌شه.

مرور پارامترهای UTM
به‌طور معمول، اگه پارامترهای UTM وجود نداشته باشن، GA4 ترافیک رو به‌عنوان ترافیک مستقیم (direct)، ریفرال (referral) یا یه سورس دیگه که خودش بتونه تشخیص بده، نسبت میده.
اما اگه پارامترهای UTM اشتباه تنظیم شده باشن (مثلاً نگارش اونها نادرست باشه یا مقداری نداشته باشن)، ممکنه توی گزارش‌های ترافیک مقدار (not set) ببینید.

متأسفانه نمی‌تونم نکات خیلی خاص‌تری بگم چون این موضوع پر از سناریوهای خاصه. باید پارامترهای UTM‌تون، لینک‌هایی که خودتون یا تیم مارکتینگ توی کانال‌های مختلف به اشتراک می‌ذارن رو بازبینی کنید و مطمئن بشید که مقادیر معتبری دارن.

تگ‌های ایونت GA4 در GTM قبل از تگ پیکربندی اصلی (config tag) اجرا می‌شن
وقتی GA4 رو از طریق گوگل تگ منیجر نصب می‌کنید، باید از «Config Tag» استفاده کنید.


اگه می‌خواید ایونت‌های دیگه ای رو به GA4 بفرستید، باید از «تگ ایونت GA4» استفاده کنید.


نکته مهم اینه که تگ Google (یا همون GA4 config tag) باید قبل از بقیه تگ‌های آنالیتیکس اجرا بشه.

این اشتباه خیلی وقت‌ها توی سایت‌های فروشگاهی دیده می‌شه، جایی که تگ ایونت‌هایی مثل view_item یا purchase زودتر از تگ اصلی GA4 اجرا می‌شن.
از حالت پیش‌نمایش GTM استفاده کنید تا ترتیب اجرا شدن تگ‌ها رو بررسی کنید.

ستاپ اشتباه سمت سرور (Server-side GTM)
اگه GA4 رو به SGTM منتقل کردید، باید همه تگ‌های GA4 رو طوری اصلاح کنید که داده‌ها رو به اندپوینت سرور سایدتون ارسال کنن.

برای این کار باید پارامتر server_container_url رو به همه تگ‌های GA4 (چه Google Config tag باشن چه GA4 event tag) اضافه کنید. مقدار این پارامتر هم هم باید URL تگینگ سرورتون باشه (مثلاً: https://measure.mydomain.com).


اگه تصادفا بعضی از تگ‌های گوگل کانفیگ (یا تگ‌های ایونت GA4) رو بدون این پارامتر server_container_url بذارید، آتربیوشن به‌هم می‌ریزه. چون بعضی درخواست‌ها می‌رن به measure.mydomain.com و بقیه مستقیم به google-analytics.com فرستاده می‌شن.

حتی دیدم که بعضی وقت‌ها همه تگ‌های GTM درست بودن، ولی یه کد GTAG به‌صورت مستقیم توی سورس کد سایت قرار داده شده بود و داده‌ها رو به دامنه پیش‌فرض گوگل می‌فرستاد. این کار باید به‌شدت ازش جلوگیری بشه.

کمپین (not set) در GA4
تمام نکاتی که درباره source/medium گفتم، در مورد دایمنشن های مرتبط با کمپین مثل Session Campaign هم صدق می‌کنن.

utm_source و utm_medium باید حتما درست استفاده بشن تا گزارش‌های مربوط به ترافیک به‌درستی کار کنن. اگه utm_campaign رو استفاده نکنید، اشکالی نداره، ولی باید بدونید که دایمنشن هایی مثل Session Campaign یا First User Campaign مقدار (not set) بیشتری خواهند داشت.

همین قضیه برای دایمنشن دیگه‌ای مثل Session Manual Ad Content و Session Manual Term هم صادقه.

اگه اکانت Google Ads‌تون به GA4 وصل شده، ولی کمپین‌ها توی GA4 به‌صورت (not set) یا حتی (organic) نمایش داده می‌شن، می‌تونید از هر دو روش پایین استفاده کنید:
هم اتوتگینگ (auto-tagging) رو فعال کنید، هم پارامترهای UTM رو دستی به کمپین‌های Google Ads اضافه کنید.

Google Ads به صورت (not set) در GA4 نمایش داده میشه
GA4 کلی دایمنشن های مرتبط با Google Ads رو داره، مثل Session Google Ads Campaign، Session Google Ads Keyword Text و غیره.
اگه دارید از این دایمنشن ها استفاده می‌کنید و مقدارشون (not set) نمایش داده می‌شه، ممکنه یکی از این دلایل باعثش باشه:

  • اکانت Google Ads به GA4 لینک نشده. فقط وقتی GA4 و Google Ads بهم وصل باشن، GA4 می‌تونه داده ای رو از گوگل ادز بگیره.
  • اتوتگینگ فعال نیست. این قابلیت باعث می‌شه داده‌های Google Ads به‌صورت خودکار وارد GA4 بشه.
  • URL نهایی کمپین‌ها به‌صورت دستی تگ‌گذاری شده ولی اشتباه.
  • چندتا اکانت Google Ads به GA4 وصل شدن، ولی بعضیاشون اتوتگینگ ندارن. اگه یکی از این حساب‌ها ترافیک ارسال کنه و اتوتگینگ نداشته باشه، GA4 نمی‌تونه اطلاعات کمپین رو دریافت کنه، حتی اگه پارامتر gclid توی URL باشه. نتیجه؟ (not set)


ولیوی Page location در GA4 به صورت (not set) شده.

مشخص نیست گوگل چه زمانی می‌خواد این مشکل رو برطرف کنه. ولی حتی اگه یه باگ هم باشه، گفتنش می‌تونه چندتا از تارهای خاکستری موی سرت رو کمتر کنه!

تا جایی که میدانیم اگه آدرس صفحات سایتت خیلی طولانی باشه (بیشتر از ۵۰۰ کاراکتر – شامل https و پارامترهای URL)، اون وقت مقدار page_location اصلاً ثبت نمی‌شه. این هم برای گزارش‌های GA4 صدق می‌کنه، هم برای خروجی BigQuery.

راه‌حلش چیه؟
می‌تونی پارامتر page_location رو به‌صورت دستی داخل GTAG یا تگ‌های GA4 اصلاح کنی و یه نسخه کوتاه‌تر از آدرس رو بفرستی. مثلاً پارامترهای اضافی URL رو حذف کنی. 

مقدار Page title در GA4 برابر (not set) شده

دو دلیل اصلی برای این مشکل وجود داره:

  1. تگ <title> توی HTML صفحه وجود نداره:
    اگه سایت درست نگهداری نشده باشه یا دولوپر فراموش کرده باشه، ممکنه صفحه‌ای اصلاً تگ title نداشته باشه.
    برای اینکه بفهمی کدوم صفحه این مشکل رو داره، برو به گزارش زیر:

Reports > Engagement > Pages and Screens

و این دو دایمنشن (dimension) رو اضافه کن:

  • Primary dimension: Page title and screen class
  • Secondary dimension: Page path and screen class

not set page title in ga4

حالا اون صفحاتی که عنوانشون (not set) هست رو مشخص کن و به دولوپر بسپار که برای همه‌شون تگ <title> مناسب بذاره.

اگه این گزارش رو توی بخش Engagement پیدا نکردی، یه کم بگرد، شاید جای دیگه‌ای توی نوار کناری بخش Reports باشه.


  1. GA4 زودتر از تگ <title> بارگذاری می‌شه:
    اگه کد ترکینگ GA4 بالای صفحه (قبل از تگ <title>) قرار گرفته باشه، ممکنه وقتی GA4 اجرا می‌شه هنوز title پیج لود نشده باشه. این احتمال خیلی کمه ولی محتمل هست. در این صورت، مقدار title ثبت نمی‌شه و می‌شه (not set).

Content Group مقدارش در GA4  شده (not set).

دلایل این مشکل:

پارامتر content_group به GA4 ارسال نمی‌شه:
اگرچه GA4 یه دایمنشن دیفالت به اسم Content group داره، ولی تا زمانی که این پارامتر رو دستی براش نفرستی، مقدارش (not set) می‌مونه.

not set content group in ga4

دایمنشن اشتباه فرستاده شده:
اسم این دایمنشن باید دقیقاً content_group باشه. بزرگ و کوچیک بودن حروف مهمه. مثلاً Content_group یا content_category جواب نمی‌ده.

content group in ga4

دایمنشن خالی یا نامعتبره:
 اگه از  DOM وریبل مقدار content_group رو استخراج می‌کنی و تگ GA4 قبل از اینکه اون المان لود بشه اجرا می‌شه، مقدار content_group به صورت undefined فرستاده می‌شه. یا شاید بعضی صفحه‌ها اصلاً مقدار content_group رو توی دیتا لایر نمیفرستن.

در هر صورت، باید با دولوپر هماهنگ کنی تا مطمئن بشی ولیوی درست content_group قبل از ارسال تگ وجود داشته باشه.

Language مقدارش (not set) شده

گوگل آنالیتیکس مقدار بعد Language رو بر اساس تنظیمات مرورگر کاربر پر می‌کنه. توی بیشتر گزارش‌ها، درصد مقدار (not set) برای این بعد خیلی کمه و جای نگرانی نداره. ولی ممکنه یکی از این دلایل باعثش باشه:

  • ایونت ها از طریق مژرمنت پروتکل فرستاده شدن و پارامتر language داخل اون ایونت ها نبوده.
  • مرورگر یا افزونه‌های کاربر تنظیماتی دارن که پارامتر زبان رو مخفی میکنن یا تغییر می‌دن.
  • در زمان کار با سرور ساید تگینگ (SGTM)، ستاپ شما پارامتر ul یا همون (User Language) از url ریکوست حذف یا بازنویسی میکنه.

override user language in ga4

Country مقدارش (not set) شده

این موضوع برای همه دایمنشن های جغرافیایی مثل City هم صدق می‌کنه. دلایل رایج:

  1. ایونت ها از طریق Measurement Protocol فرستاده شدن:
    MP فعلاً اجازه ارسال IP یا user-agent رو نمی‌ده. این یعنی اطلاعات مکان یا مرورگر برای اون ایونت قابل تشخیص نیست.

من خودم تست کردم و دیدم که حتی اگه ایونت به یه سشن معتبر نسبت داده بشه، ولی چون IP و مرورگر ناشناس هستن، Country می‌شه (not set).

not set browser in ga4

  1. فعال بودن IP anonymization در GA4 (به‌صورت پیش‌فرض):
    آخرین عدد IP صفر می‌شه. این باعث می‌شه گوگل نتونه با دقت منطقه جغرافیایی کاربر رو مشخص کنه. کشور معمولاً درست تشخیص داده می‌شه ولی شهر ممکنه (not set) باشه.
  2. سرور ساید GTM آی‌پی رو حذف یا بازنویسی کرده: SGTM رو میتونی برای حذف یا تغییر کامل IP کاربر به کار ببری. 

ip override in server-side gtm

و در نهایت آخرین احتمال این هست که کاربر از VPN، پراکسی یا ابزارهای تغییر IP استفاده می‌کنه.

دایمنشن‌های  ایونت اسکوپ (Event-scoped) و  آیتم اسکوپ (Item-scoped) مقدارشون (not set) بشه

دایمنشن‌های Event-scoped استمرار ندارن. یعنی فقط به همون ایونتی که باهاش ارسال شدن وصل هستن و به ایونت‌های قبلی یا بعدی منتقل نمی‌شن.
پس اگه توی گزارشهات مقدار (not set) می‌بینی، باید مطمئن بشی که اون دایمنشن رو با همه ایونت‌هایی که مدنظرته، فرستادی.

دایمنشن‌های item-scoped هم که بیشتر مربوط به ترکینگ فروشگاه های آنلاین هستن، درست به آیتم‌ها وصل نمی‌شن مگر اینکه دقیق پیاده‌سازی بشن.
مثلاً اگه توی ایونت view_item، دوتا پارامتر item_name و item_id رو بفرستی ولی توی ایونت purchase فقط item_id رو بفرستی، اسم محصول توی گزارش خرید  (not set) میشه، چون GA4 نمی‌تونه از روی ID، اسم آیتم رو بفهمه.

وقتی داری ترکینگ فروشگاه آنلاین رو پیاده‌سازی می‌کنی، باید توی کل مسیر کاربر(مثلا از مشاهده آیتم تا خرید)، پارامترها رو باید به‌صورت هماهنگ و یکنواخت بفرستی.
برای مثال، اگه توی ایونت view_item پارامتر item_list_name رو ارسال کردی، باید همون پارامتر رو توی ایونت purchase هم بفرستی تا بشه بر اساس اون لیست، خریدها رو تحلیل کرد.

اگه از دیتالیر استفاده می‌کنی، باید حواست باشه که مقدار اون پارامترها قبل از اجرای تگ‌های GA4 به دیتا لایر فرستاده شده باشن.
اگه تگ‌ها زودتر اجرا بشن و داده هایی مثل pricing_plan بعدتر به دیتالیر فرستاده بشن، اون مقدار به GA4 به صورت undefined ارسال میشه و  توی گزارش می‌شه (not set).

یه اشتباه رایج دیگه اینه که دایمنشن کاستومی رو خیلی دیرتر از زمانی که اون پارامتر رو برای GA4 میفرستی ثبت کردی.
توی GA4 اگه یه پارامتر رو بفرستی ولی هنوز دایمنشن کاستومش رو توی اینترفیس تعریف نکرده باشی، داده های اون پارامتر توی گزارش‌ها نمیاد.
و چون دایمنشن‌های کاستوم رترواکتیو نیستن  اطلاعات مربوط به قبل از تاریخ ثبت اون دایمنشن ها توی گزارش‌ها (not set) می‌شن.

دایمنشن‌های User-scoped هم توی GA4 گاهی (not set) می‌شن

طبق مستندات گوگل، دایمنشن‌های User-scoped باید این‌طوری کار کنن:
شما یه بار مقدارشو ارسال می‌کنی و بعد همه ایونت‌های بعدی همون مقدار رو به ارث می‌برن.

ولی من و خیلی‌های دیگه دیدیم که توی عمل این‌طور نیست.
خیلی وقتا با اینکه دایمنشن User-scoped به‌درستی ارسال شده، باز هم توی گزارش‌ها مقدارش می‌شه (not set).

احتمالاً این یه باگه و اون مقدار ذخیره نمیشه
امیدواریم گوگل یه روزی درستش کنه، ولی تا اون موقع دو تا راه داری:

  1. اون یوزر پراپرتی (User Property) رو فقط توی تگ config نذار و توی همه تگ‌های ایونتی هم اضافه ش کن.
  2. یا اینکه کلاً بیای اون دایمنشن رو به‌صورت Event-scoped تعریف کنی و با همه ایونت‌ها اون مقدار رو بفرستی (چه تگ config چه event). مثلاً اگه می‌خوای از دایمنشن User Type استفاده کنی، بیا دایمنشن user_type رو به‌صورت Event-scoped تعریف کن و با همه ایونت‌ها بفرستش.

دایمنشن‌های تکنولوژیک (مثل مرورگر، نسخه، دستگاه و...) هم گاهی (not set) میشن

وقتی ایونت‌ها رو از طریق MP می‌فرستی، نمی‌تونی user agent رو هم بفرستی.
و چون GA4 اطلاعات مرورگر و دستگاه رو از user agent درمیاره، این یعنی اون داده‌ها اصلاً نمی‌تونن ثبت بشن.

از طرف دیگه، اگه از سرور-ساید تگ منیجر (SGTM) استفاده می‌کنی، ممکنه توی تنظیمات، user agent رو پاک کرده باشی یا یه مقدار الکی براش گذاشته باشی.
این کار معمولاً برای حفظ حریم خصوصی انجام می‌شه، ولی نتیجه‌ش اینه که توی گزارش‌هات مرورگر، ورژن و این چیزا دیده نمی‌شن.

remove user agent server-side gtm and ga4

علاوه بر این، بعضی افزونه‌های مرورگر یا ابزارهای حفظ حریم خصوصی هم ممکنه user agent کاربر رو دست‌کاری کنن یا مخفی کنن.
و خب در این حالت هم GA4 نمی‌تونه مرورگر کاربر رو درست شناسایی کنه و توی گزارش‌هات می‌زنه (not set).
تا الان راه‌حل دقیقی براش پیدا نشده.

جمع‌بندی

کاش این مقاله می‌تونست راه‌حل عملی بیشتری بده.
ولی متأسفانه خیلی وقتا فقط می‌شه گفت: «خب، GA4 فعلاً اینطوریه!»
با این حال، ما هنوز کنترل زیادی روی دایمنشن‌های کاستوم و ترافیک سورس داریم.