اخیراً متوجه شدم تعداد زیادی از مارکترها از دیدن ایونت‌های تکراری(duplicate event) توی دیباگ ویویGA4 شکایت دارن. گاهی دلایلش واضحه، ولی توی بعضی موارد پیچیده‌تر از چیزی بود که قبلا تصور می‌کردم.
اگه چیزی مشابه این مورد رو توی دیباگ ویوی GA4 خودت می‌بینی، جای درستی اومدی.
علت های رایج‌ ایجاد ایونت‌های تکراری تویGA4 رو جمع‌آوری کردم و امیدوارم این مقاله برات مفید باشه.
اگه هیچ‌کدوم از راه‌حل‌ها بهت کمک نکرد، توی کامنت‌ها بهم بگو. شاید چیزی جدید پیدا کنیم و بعد این پست رو به‌روز کنم.
 #۱. GA4 هاردکد شده و ایونت‌های مشابه توی GTM داریم
اگه می‌خوای GA4 رو واسه وب‌سایتت نصب کنی، روش توصیه‌شده استفاده از GTM هست. این بهت انعطاف‌ و کنترل بیشتری می‌ده.
ولی گاهی بازاریاب‌ها/دیتا آنالیستها این کار رو بدون اینکه متوجه باشن کد ترکینگ GA4 هاردکد شده رو دارن که همون ایونت‌ها رو به GA4 می‌فرسته. نتیجه؟ اگه مثلاً بازدیدکننده‌ای پرداختی رو شروع کنه، دو ایونت یکسان به گوگل آنالیتیکس ۴ ارسال می‌شه، یکی از سمت GTM و یکی از GA4.
راه‌های مختلفی برای تشخیص این حالت وجود داره که آیا GA4 هاردکد (یعنی اسنیپت مستقیماً اضافه شده به سورس کد سورس وب‌سایت) داری یا نه. اگه از نظر فنی مهارت داری، می‌تونی سورس کد وب‌سایت رو چک کنی.
می‌تونی گزینه developer tools مرورگر کروم رو باز کنی، بعد به بخش Sources بری.


بعد CTRL + SHIFT + F رو بزن (توی مک احتمالاً Command + SHIFT + F باشه) و اسم ایونت تکراری رو وارد کن. توی این مثال من این ایونت رو وارد کردم، add_to_cartه.

وقتی اسم ایونت رو وارد کردی، نتایج جست‌وجو رو چک کن و ببین آیا کدی حاوی "gtag" هست یا نه. اگه آره، یعنی ایونت add_to_cart از کدهای وب‌سایت هم ارسال می‌شه.


اگه همچین کدی پیدا کردی، با چیزی به اسم تگ‌گذاری دوگانه (double tagging) روبه‌رو هستی. یعنی هم با GTM+GA4 و هم با GA4 هاردکدشده چیزهای یکسانی رو ترکینگ می‌کنی.
یه گزینه دیگه اینه که موقتاً کانتینر GTM رو از وب‌سایت حذف کنی و ببینی هنوز ایونت‌های GA رو (بدون تکرار) دریافت می‌کنی یا نه. اگه آره، پس GA هاردکدشده جایی توی وب‌سایتت هست.
راه‌حل چیه؟ کل ستاپت رو بررسی کن، اسنیپت‌های GA4 هاردکد اضافی  رو حذف کن و همزمان مطمئن شو همه‌چیز فقط توی GTM ست شده باشه. این فرایند پیچیده‌ایه و اگه می‌خوای بیشتر یاد بگیری، توی دوره GTM من ثبت‌نام کن. مهاجرت به GTM یکی از موضوعاتیه که با جزئیات کامل توضیح دادم.
علاوه بر این چک کن GA4ت از طریق پلاگینی (مثل Google Site Kit) نصب نشده باشه.

#۲. ایونت‌های تکراری در دیتالیر 
فرض کن ایونت‌های تکراری add_to_cart رو توی دیباگ ویوی GA4 می‌بینی. این ایونت‌ها وقتی ارسال می‌شن که بازدیدکننده روی دکمه "اضافه به سبد" کلیک کنه، دیتالیرپوش فعال بشه و اطلاعات کلیک(جزییات آیتم) توی حالت پریویو قابل‌مشاهده باشه.
add to cart in gtm preview mode

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

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

#۳. قابلیت "ایجاد ایونت" توی GA4  
این دلیل ممکنه پیش بیاد اگه به‌خوبی زمان کافی برای یادگیری GA4 نذاشتی و فقط حدس زدی بعضی قابلیت‌های این پلتفرم چیکار می‌کنن.
اگه توی GA4 لاگین کنی و بری به مسیر Admin > Events، دکمه‌ای به اسم "Create events" می‌بینی. گاهی این ممکنه خیلی واضح به نظر نیاد. گاهی مردم ایونت‌هایی از GTM به GA4 می‌فرستن (مثل add_to_cart)، ولی همون ایونت رو توی رابط GA4 هم با کمک قابلیت "Create events" هم می‌سازن.

قابلیت Create Event برای اینکار نیست و یه کاربرد دیگه داره.

کل چیزی که الان باید بدونی اینه که اگه از GTM ایونت‌هایی به GA4 می‌فرستی و  اون ایونت‌ها درست کار میکنن، نباید اون ایونت ها رو توی بخش Create Events هم وارد کنی.
وگرنه، یه ایونت از GTM می‌فرستی و بعد در GA4 با همون نام و همون پارامترها یه ایونت یکسان دیگه‌ای ارسال میشه. مثلا توی GA4 یه همچین قاعده ای رو ست کردی(که اصلا توصیه نمیکنم)



این قاعده به دنبال همه ایونت‌هایی با نام "add_to_cart" (ببین شرایط تطابق) می‌گرده و بعد همه پارامترهای ایونت رو کپی می‌کنه و یه ایونت جدید می‌سازه (ببین تنظیم پارامتر). نام اون ایونت جدید هم add_to_cart هست (ببین فیلد نام ایونت کاستوم چطوره).
ولی اگه قبلاً این ایونت رو توی GTM ساختی، باید این قاعده ی داخل GA4 رو حذف کنی که دوپلیکیت نشه. توی GA4 برو به Admin > Events > Create event. روی قاعده ای که می‌خوای حذف کنی کلیک کن:

بعد توی گوشه بالا سمت راست، روی سه نقطه بزن و Delete رو بزن.

این جلوی ایونت های تکراری جدید رو می‌گیره. ولی دیتای گذشته رو نمی‌تونی اصلاح کنی. راه‌حلی برای این نیست.

#۴. اضافه شدن چندباره یه کانتینر  GTM به وب‌سایت  
دولوپر ممکنه به‌طور تصادفی یه کانتینر GTM رو دوبار به وب‌سایت اضافه کرده باشه. این باعث ایجاد ایونت‌های تکراری می‌شه. 

باید چی کار کنی؟

برای اینکه مطمئن شی واقعاً چندتا نسخه GTM رو نصب نکردی، باید ریکوئست‌های تب network رو توی  developer tools مرورگر بررسی کنی. من مثل همیشه از مرورگر Google Chrome استفاده می‌کنم.

از گوشه بالا سمت راست مرورگر، روی آیکن سه‌نقطه کلیک کن و برو به مسیر:
More tools > Developer Tools


بعدش به تب Network برو و توی فیلد جستجو بنویس:
gtm.js 

مطمئن شو گزینه All انتخاب شده، و بعد صفحه رو ریفرش کن. وقتی صفحه دوباره لود شد، نگاه کن ببین چندتا ریکوئست gtm.js می‌بینی؟


اگه فقط یکی بود، همه چیز مرتبه و مشکلی نداری.

❗️نکته مهم:
این بررسی رو وقتی انجام بده که پریویو مود GTM رو فعال نکرده باشی. اگه بدون اینکه پریویو مود فعال باشه چندتا gtm.js می‌بینی، یعنی واقعاً چندتا اسنیپت GTM روی صفحه لود شده. حالا این سوال پیش میاد که:
آیا این کار عمدی بوده؟ واقعاً لازم بوده چندتا GTM روی یه صفحه استفاده بشه؟

راجع به این موضوع با کسی که پروژه یا سایت رو می‌شناسه صحبت کن.
درسته که استفاده از چندتا کانتینر GTM روی یک سایت ایده‌آل نیست، ولی از لحاظ فنی شدنیه. اما اگه مشخص شد که کسی قصد نداشته چندتا کانتینر بذاره، اون نسخه اضافی رو پاک کن (یا از کسی بخواه که پاکش کنه).

چندتا ریکوئست به‌خاطر فعال بودن پریویو مود GTM

اگه پریویو مود Google Tag Manager فعاله، توی تب Network یا افزونه Tag Assistant احتمالاً دو تا gtm.js می‌بینی. علاوه بر این اگه روی سایتت کدت‌های gtag() یا GA4 هم باشن، احتمال داره ریکوئست‌های تکراری از اونا هم ببینی.

اگه پریویو مود Google Tag Manager فعاله و دو تا ریکوئست gtm.js برای یه کانتینر دیدی (مثلاً GTM-XXXXXXX) و یکی از اون ریکوئست‌ها شامل پارامتر gtm_debug=x بود، یعنی مربوط به پریویو موده و مشکلی نیست.


اون ریکوئست دوم برای عملکرد صحیح پریویو مود لازمه و هیچ تأثیر منفی روی داده‌ها یا اجرای تگ‌ها نداره.
همین قضیه برای ریکوئست‌های gtag() هم صدق می‌کنه؛ اگه دیدی ریکوئست‌هایی هستن که پارامتر gtm_debug=x دارن، بدون که فقط مخصوص پریویو مود هستن. اگه از پریویو مود خارج شی و صفحه رو ریفرش کنی، اون ریکوئست دوم ناپدید می‌شه.


#۵. پیکربندی ضعیف تریگرهای تگ  
این بخش کمترین جزییات و توضیحات رو داره چون هزاران راه برای اشتباه ست کردن تریگرها وجود داره. ولی شاید حداقل یه سرنخ از این بخش بگیری.
وقتی دیباگ GTM رو شروع می‌کنی (با فعال کردن حالت Preview and Debug)، استریم رو پاک کن:



بعد عملی که باعث ایجاد ایونت‌های تکراری می‌شه رو انجام بده. روی گزینه Summary توی حالت پریویوی GTM کلیک کن.

بعد به تگی که ظاهرا باعث ایونت‌های تکراری شده نگاه کن. چند بار فایر کرده؟ اگه یک‌بار فایر شده بود پس مشکل جای دیگه‌ ای هست.


تگ دوبار یا بیشتر فایر کرده؟ روی اون تگ کلیک کن. بعد یه کم اسکرول کن و پیام‌های پریویو مود رو که تگ روش فایر شده ببین. انتظار داشتی تگ روی هر دو ایونت فایر بشه؟

روی پیامی که انتظارش رو نداشتی کلیک کن. بعد اسکرول کن تا کاندیشن های تریگری که برآورده شده و تگ رو فایر کرده ببینی. کاندیشن های تریگرت رو دقیق‌تر ست کن تا فقط روی ایونت مدنظرت فایر نشه. چطور این کار رو بکنی؟ باید GTM رو یاد بگیری، چطور کار می‌کنه و چطور استفاده‌ش کنی. دوره‌هام می‌تونن توی این کار کمکت کنن.

#۶. نادیده گرفتن موارد تکراری پیکربندی on-page 
وقتی حساب GA4 رو ساختی و قبلاً GA3 داشتی,  با یه تگ کانفیگ گوگل به‌طور خودکار این دو تا پلتفرم رو بهم وصل میکنی.توی این حالت ممکنه pageview های اضافه ای توی پریویومود GA4 داشته باشی.
برای رفع این مشکل, برو به GA4 > Data Streams و دیتا استریمت رو انتخاب کن. روی گزینه Configure Tag Settings کلیک کن و روی گوگل تگ خودت کلیک کن:



تیک "Ignore duplicate instances of on-page configuration (recommended)"رو بزن 


و ببین این مشکلاتت رو برطرف می‌کنه.

#۷. با SPA کار می‌کنی؟  
چند راه برای ترکینگ پیج ویو توی  SPAها هست.  بهترین روش اینه که از دولوپر بخوای "پیج ویوها" رو به dataLayer بفرسته و بعد یه تگ ایونت page_view رو ست و فایر کنی.
هر بار که تگ فایر می‌شه، یه ایونت پیج ویو ترکینگ می‌شه.
ولی گوگل آنالیتیکس برای SPAها یه قابلیت ترکینگ خودکار ویوپیج داره. این بخشی از قایلیت های Enhanced Measurement هست.
این قابلیت برای بعضی SPAها کار می‌کنه و برای بعضی‌ها نه. اگه توی وب‌سایتت کار کنه (در حالی که ترکینگ سفارشی page_view با "ویوپیدهای مجازی" هم پیاده‌سازی کرده باشی) این یعنی ویوپیج های تکراری می‌گیری. یه page_view از ستاپ کاستومت میاد. یکی دیگه به‌طور خودکار توسط Enhanced Measurement ترکینگ می‌شه.
چیکار باید کنی؟
برو به ادمین گوگل آنالیتیکس ۴ و گزینه Data Streams رو بزن. حالا دیتاستریم وب‌سایتت رو انتخاب کن. روی آیکون چرخ‌دنده توی بخش "Enhanced Measurement" کلیک کن.

بعد توی بخش "pageviews" روی "Show advanced settings" کلیک کن و گزینه "Page changes based on browser history events" رو غیرفعال کن. روی ذخیره کلیک کن.


این باید ایونت‌های تکراری page_view رو حذف کنه.

#۸. پیکربندی نادرست تگ‌گذاری سمت سرور  
اگه از سرورساید تگیینگ توی ستاپ GA4ت استفاده می‌کنی، تعداد درخواست‌های خروجی رو توی حالت پیش‌نمایش SGTM چک کن.
حتی اگه از وب‌سایتت یه درخواست GA4 دریافت کنی، ممکنه چند تگ GA4 توی کانتینر سرور داشته باشی که دیتا رو به یه کانتینر خاص می‌فرسته.

معمولاً نباید این اتفاق بیفته. ولی شاید توی پیکربندی اشتباه کرده باشی.

اگه برعکس، دو درخواست خروجی به گوگل آنالیتیکس میبینی، مقدار پارامتر "tid" رو چک کن. اگه شامل مژرمنت IDهای GA4 متفاوته، پس استباهی رخ نداده. هدف اصلی‌ات اینجا اینه که مطمئن شی GTM سرورساید ایونت‌های مشابه رو دوبار به *همون* پراپرتی GA4 نمی‌فرسته.

 #۹. همپوشانی بین ایونت‌های GTM و قابلیت Enhanced Measurement در GA4 
گوگل آنالیتیکس ۴ می‌تونه به‌طور خودکار یه سری ایونت (مثل کلیک‌های خروجی، اسکرول و غیره) رو ترکینگ کنه. ولی توی بعضی موقعیت‌ها، ممکنه بخوای ایونت‌های کاستومی (رو از طریق GTM) جایگزینشون کنی.
مثلاً، اسکرول ترکینگ از داخل GA4 فقط وقتی اتفاق میفته که بازدیدکننده بیشتر از ۹۰٪ عمق پیج رو اسکرول کنه. اگه می‌خوای ترشهولدهای دیگه (مثل ۲۵٪، ۵۰٪) رو هم ترکینگ کنی، باید یه راه‌حل کاستوم رو پیاده‌سازی کنی.
اگه این کار رو کردی، مطمئن شو  قابلیت ( اسکرول ترکینگ) رو از بخش Enhanced Measurement پلتفرمGA4 غیرفعال کنی. وگرنه ممکنه ایونت تکراری داشته باشی (یه ایونت ۹۰٪ از GTM بیاد و یکی از Enhanced Measurement بیاد).
همین اصل برای ایونت‌های دیگه هم صدق می‌کنه. اگه توی GTM "کاستوم ایونت جایگزین" ساختی، قابلیت ترکینگ ایونت مرتبط با اون رو توی GA4 غیرفعال کن.

#۱۰. بازدیدکننده thankyou page رو بارگذاری مجدد/بازدید دوباره می‌کنه  
ممکنه ایونت‌هایی رو توی  "thank you page" (که همون صفحه تأیید سفارش هست) فایر کنی. این یعنی اگه بازدیدکننده صفحه رو بارگذاری مجدد کنه یا دوباره به همون پیج سر بزنه، تگ دوباره فایر می‌شه.
چند راه‌حل اینجا هست:
- وقتی بازدیدکننده به اون صفحه می‌رسه، می‌تونی یه کوکی توی مرورگرش ذخیره کنی (مثلاً "gtm_user_converted" با مقدار "true"). بعد تریگرت رو اصلاح کن تا اگه gtm_user_converted برابر true شد، فایر نشه. این یعنی بازدیدکننده توی لود اول پیج ترکینگ می‌شه، ولی توی لودشدن های بعدی تگ فایر نمیشه.
- اگه دولوپر ایونتی رو توی Thankyou page به dataLayer  می‌فرسته، می‌تونی از مثال قبلی (ایجاد کوکی) استفاده کنی یا از دولوپر بخوای اینو به کمک اسکریپت مدیریت کنه (اگه بازدیدکننده دوباره صفحه رو ببینه، dataLayer.push نباید دوباره اتفاق بیفته).  
- اگه خریدهای کاربرها رو ترکینگ می‌کنی، مهمه که transaction_id همراه با ایونت purchase ارسال بشه. اگه GA4 چند ایونت خرید با همون transaction_id از یه کاربر دریافت کنه، موارد تکراری نادیده گرفته می‌شه.  

#۱۱. ایونت تکراری از طریق MP ارسال میشه  
این سناریو برای سازمان‌هایی صدق می‌کنه که از مژرمنت پروتکل استفاده می‌کنن. اگه ایونت‌هایی رو از سمت کلاینت (یعنی مرورگر) می‌فرستی، با دولوپرها چک کن ببین همون ایونت رو از طریق Mp هم نفرستاده باشن.
اگه توی این موضوع تازه‌کار هستی، باید بگم MP راهیه که وب دولوپرها می‌تونن دیتا رو مستقیم از سرورشون به سرورهای GA4 بفرستن. با این وجود هنوز نیاز داریم گوگل آنالیتیکس ۴ رو از سمت کلاینت نصب بکنیم (از طریق gtag.js یا وب GTM).
این یعنی ممکنه توی ستاپ فعلیتون، وب GTM یه ایونت خاص بفرسته و بعد دولوپرهای وب‌سایتت همون ایونت رو از طریق MP بفرستن.
اگه مطمئن نیستی سازمانت از MP استفاده می‌کنه، با دولوپرها حرف بزن. شاید اونا چیزی درباره‌ش بدونن.

هنوز ایونت‌های تکراری توی Google Analytics 4 می‌بینی؟  
اگه هیچ‌کدوم از پیشنهادهای این مقاله برات کار نکرد، توی کامنت‌ها بهم بگو. شاید مشکلی داری که نهایتاً به‌عنوان یه ترفند اضافی توی این پست بلاگ اضافه بشه.
براساس تجربه‌م، رایج‌ترین عامل بروز ایونت‌های تکراری توی GA4، ایونت‌های هاردکد شده در مقابل ایونت های ست شده در GTM یا تریگرهای درست ست نشده در GTM هستن.