راه‌اندازی ُSGTM Tagging به کمک Cloud Run

وقتی گوگل تو ۱۲ آگوست ۲۰۲۰ نسخه بتای عمومی SGTM رو لانچ کرد، ملت چند دسته شدن. یه عده پریدن بالا و پایین و داد زدن “این عالیه”، یه عده هم گیج شدن و گفتن “اصلاً این به چه دردی می‌خوره؟”. این کاملاً قابل درکه، چون "سرورساید تگ" موضوع ساده‌ای نیست.

هدف این پست بلاگ این نیست که یه راهنمای “جامع و کامل” برای کار با SGTM باشه. به جاش می‌خوام یه معرفی ساده برای کسایی که تازه‌کارن (تو بحث سرور) یا اصلاً نمی‌دونن SGTM چرا می‌تونه مفید باشه، ارائه بدم.

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


روش معمول استفاده از "GTM"

برای اینکه بفهمی "سرورساید تگ" چطور کار می‌کنه، اول بیایم روشی که احتمالاً باهاش آشنایی رو مرور کنیم. اگه بخوای "گوگل تگ منیجر" رو تو یه سایت نصب کنی، باید یه تیکه کد جاوااسکریپت از "کانتینر وب" برداری و اون رو توی سورس کد سایتت بذاری.

وقتی صفحه لود می‌شه، این کد "GTM" همراه بقیه صفحه لود می‌شه و بر اساس تنظیماتی که کردی، تگ‌ها رو فعال می‌کنه. یکی از این تگ‌ها، تگ "GA4" هست. همه این اتفاقا تو سمت کلاینت (یعنی تو مرورگر کاربر) می‌افته. کدهای جاوااسکریپت لود می‌شن، داده جمع می‌کنن و بعد می‌فرستن یه جای دیگه. مثلاً کد "GA4" داده رو می‌فرسته به "google-analytics.com".

علاوه بر داده‌ای که به "GA4" گفتی جمع کنه (مثلاً URL یه دکمه که روش کلیک شده)، کدهای ترکینگ معمولاً اطلاعات دیگه‌ای مثل جزئیات صفحه، دستگاه و اینجور چیزا رو هم جمع می‌کنن.

روش سرورساید

با "سرورساید تگ"، یه قدم دیگه به زنجیره جمع‌آوری داده اضافه میشه: شما میای و سرور خودت (یا چندتا سرور) میسازی که "کانتینر SGTM" روش میزبانی می‌شه.

تو اون سرور، "گوگل تگ منیجر" داده ها رو به کمک کدهای ترکینگ سمت کلاینت می‌گیره، پردازشش می‌کنه، اگه لازم باشه اون داده ها رو اصلاح می‌کنه، و بعد می‌فرستتش به وندورهای سوم شخص یا  ابزارهای آنالیتیکس داخلی که داری ازشون استفاده می‌کنی.

پس ما هم ترکینگ سمت کلاینت داریم، هم یه سری کارای سمت سرور. البته اگه بخوای می‌تونی ترکینگ سمت کلاینت رو کلاً بی‌خیال بشی و داده رو از یه سرور به "SGTM" خودت بفرستی و از اونجا به پلتفرم های بازاریابی/آنالیتیکس بفرستی. ولی تو این راهنما، ما روی ترکیب ترکینگ سمت کلاینت و سرور تمرکز داریم.

یه روش خوب برای فکر کردن به این موضوع اینه که داده‌هات رو مثل یه بسته تصور کنی. تو روش سنتی، مرورگر (کلاینت) کلی بسته کوچیک مستقیم می‌فرسته به سرویس‌های مختلف مثل "Google Analytics"، "Facebook" و غیره. با "server-side tagging"، مرورگر فقط یه بسته گنده می‌فرسته به اداره پست خصوصی خودت (سرورت). اونجا می‌تونی محتویات بسته رو چک کنی، دوباره بسته‌بندیش کنی و بعد اقلام لازم رو به مقصد نهایی بفرستی. اینجوری کنترل بیشتری رو چیزی که می‌فرستی داری و ترافیک خروجی مستقیم از سایتت کم می‌شه.

چرا به سرورساید تگ نیاز داریم؟

الان احتمالاً داری فکر می‌کنی: چرا باید یه قدم اضافی به پروسه جمع‌آوری داده اضافه کنم؟ چرا باید زحمت سرور کلاود رو بکشم که یه "کانتینر GTM" دیگه روش لود بشه و داده رو به وندورهای دیگه بفرسته؟

سؤال کاملاً به‌جاییه. بذار بریم سراغ فایده‌هاش.

فایده‌های سرورساید تگ

کلی فایده از "سرورساید تگ" می‌تونی ببری. من فقط مهم‌تریناشو (به نظر خودم) می‌گم.

کاهش لود روی پیج

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

حتی اگه اسکریپت ها به‌صورت ناهمگام (asynchronous) هم لود بشن (که الان تقریباً یه کار استاندارده)، بازم می‌تونن سایتت رو کُند کنن.

تصور کن به‌جای لود کردن کلی اسکریپت مختلف تو سایتت، فقط یه دونه اسکریپت داشته باشی. اون اسکریپت داده ها رو می‌فرسته به "کانتینر SGTM". تو. از اونجا، کانتینر داده رو بر اساس تنظیمات مدنظرت تغییر می‌ده و بعد می‌فرستتش به ابزارها/پلتفرم‌هایی که داری (آنالیتیکس، بازاریابی، CRM، هر چی).

ولی تنظیم کردن یه "کانتینر سرورساید" یه کم پیچیده‌ست، چون باید یاد بگیری چطور داده رو تغییر بدی و اینا.
الان این کار ساده نیست—باید بلد باشی کد JS بزنی، بفهمی "سرورساید تگ" از نظر فنی چطور کار می‌کنه، با پلتفرم‌های ابری آشنا باشی و غیره.

ولی کامیونیتی مارکترها داره تمپلیت های آماده ای درست می‌کنه که کار رو برات ساده‌تر می‌کنه. فقط باید چند تا دکمه/چک‌باکس بزنی و کار رو راه بندازی.

کنترل روی داده‌ای که به وندورها می‌فرستی

همون‌طور که تو بخشای قبلی گفتم، کتابخونه‌های جاوااسکریپت که تو سایت لود می‌شن، احتمالاً بیشتر از چیزی که بهشون گفتی رو جمع آوری و ترکینگ می‌کنن. اینا جزئیاتی مثل اندازه صفحه نمایش، URL صفحه، عنوان صفحه و اینجور چیزا رو هم جمع می‌کنن.

کتابخونه‌های مربوط به تبلیغات ممکنه هر چی بتونن جمع کنن تا بازدیدکننده‌ها رو با دقت بیشتری شناسایی کنن. جمع‌آوری داده شامل تکنیک‌های مختلفی مثل "فینگرپرینتینگ" هم می‌شه.

از نظر حریم خصوصی، این چیزی نیست که مطلوب ما باشه، چون خطر نشت اطلاعات شخصی (PII) رو بیشتر می‌کنه. با "سرورساید ترکینگ"، تو مشخص می‌کنی چه داده هایی به اون وندورها ارسال بشه.

مثال:
- یه کتابخونه JS اختصاصی که رفتار بازدیدکننده‌ها تو سایتت رو جمع آوری و بررسی می‌کنه.
-اون کتابخونه داده ها رو می‌فرسته به "کانتینر SGTM" شما.
-حالا توی اون کانتینر مشخص می‌کنی که داده رو بفرسته به:  

  • "Google Analytics"  
  • "Facebook Pixel"  
  • "Google Ads"

تو این حالت، این سه تا پلتفرم آنالیتیکسی/تبلیغاتی فقط داده‌ای رو می‌گیرن که تو براشون می‌فرستی. اگه "user ID" رو بفرستی، همون فقط می‌رسه. ولی داده‌های دیگه ای که کتابخونه‌های استاندارد JS می‌تونستن از سایت بگیرن، حالا دیگه در دسترسشون نیست.

چرا؟ چون "Facebook Pixel" تو این ستاپ با سرور ابری تو حرف می‌زنه، نه مستقیم با مرورگر بازدیدکننده.

اگه یه کتابخونه JS تو سایت یه سری داده های "PII" جمع کنه، تو می‌تونی درخواست‌هاش رو تو "کانتینر سرورساید" پردازش کنی و یه سری از این داده ها رو بنا به نیازت حذف کنی یا هش کنی.

کاهش تأثیر ادبلاکرها

یه موقعیت رو تصور کن: از یکی از بازدیدکننده های سایتت اجازه گرفتی داده هاش رو برای تحلیل داده استفاده کنی، ولی اون بازدیدکننده داره از یه افزونه ادبلاکر استفاده می‌کنه. این افزونه همه درخواست‌ها به "GA4" رو بلاک می‌کنه، چون فکر می‌کنه تبلیغیه.

چون اون درخواست بلاک شده، مرورگر هیچ داده‌ای که تگ‌های مختلف تو سایتت جمع کردن رو به "GA4" نمی‌فرسته.

با "سرورساید تگ"، می‌تونی یه ساب‌دامنه اختصاصی درست کنی که داده رو بهش بفرستی، مثلاً "analytics.yourdomain.com". یه "کانتینر SGTM" اون ور منتظر دریافت داده‌ هاست. وقتی کانتینر داده ها رو گرفت و پردازش کرد، حالا میتونه داده رو بفرسته به "GA4".

الان اکثر ادبلاکرها درخواست‌هایی که به  ساب دامنه‌هایی مثل "analytics.yourdomain.com" می‌رن رو بلاک نمی‌کنن. کی می‌دونه بعداً چی می‌شه، ولی فعلاً این روش کار می‌کنه.

تمدید تاریخ انقضای کوکی تو سافاری (ITP)

ITP شرکت اپل (مخفف Intelligent Tracking Prevention) یه سری فیچر برای حفظ حریم خصوصی کاربرها تو مرورگر سافاری اپله (ولی تو مرورگرهای دیگه iOS هم اعمال میشه). متأسفانه کلی داده به خاطر جلوگیری از ترکینگ cross_domain محدود می‌شه، ولی موضوعی که من تو این پست بهش میپردازم، انقضای کوکیه.

اگه کوکی "1st party" (کوکی که فقط واسه سایت خودت قابل دسترسیه) روی مرورگر بازدیدکننده با JS ذخیره بشه، اون کوکی بعد از ۷ روز منقضی می‌شه (بعضی وقتا حتی ۲۴ ساعت).

حتی اگه اون JS کاملاً کاستوم باشه و ربطی به وندورهای سوم شخص نداشته باشه، بازم کوکی بعد ۷ روز منقضی می‌شه (مگر اینکه بازدیدکننده ای مدام سایتت رو باز کنه و کوکی آپدیت بشه).

فعلاً می‌تونی این محدودیت ۷ روزه رو دور بزنی اگه کوکی رو تو سمت سرور ذخیره کنی. یعنی اگه یه سرور (با دامنه خودت) کوکی رو تو مرورگر ذخیره کنه، تاریخ انقضاش هر چی که تنظیم کردی می‌شه (مثلاً ۲ سال).

یه نکته مهم اینکه اپل  مدت انقضای کوکی‌های تنظیم‌شده از سرور رو کم می‌کنه اگه دو رقم اول آدرس IP سرور سایتت و سرور "SGTM" باهم مطابقت نداشته باشن. و در نتیجه تمدید انقضای کوکی کار نمی‌کنه.

مثلاً اگه آدرس IP سرور سایتت 1.2.3.4 باشه و IP سرور SGTM برابر  44.55.6.7 باشه، دو رقم اول (1.2 در مقابل 44.55) باهم جور درنمیان، پس کوکی‌های تنظیم‌شده از سرور بازم بعد ۷ روز منقضی می‌شن.

یه راه‌حل اینه که از یه "load balancer" مشترک برای سایت و "SGTM" استفاده کنی. اون موقع آدرس‌های IP باهم مچ می‌شن و عمر کوکی‌ها (که از سرور تنظیم شدن) درست تمدید می‌شه.

معایب

ولی همه‌چیز اینجا گل و بلبل نیست. یه سری معایب هم هست. یا شاید بهتره بگیم “چیزایی که باید حواست بهشون باشه”.

 پولی بودن

خود کانتینرSGTM مجانیه و تو حالت تستی کارکردن باهاش معمولاً هزینه زیادی برات نداره.

ولی اگه بخوای رو سایتی که ترافیک درست‌حسابی داره راه بندازیش، باید حسابی دست به جیب بشی. نه به خاطر اینکه کانتینر SGTM نیاز به اشتراک پریمیوم داره. بلکه به این خاطر که باید اون  کانتینر SGTM رو یه جایی هاست کنی(تو "  GCP"، "Stape"، "Azure"، "AWS" یا هر جای دیگه) . اونجاست که باید پول واقعی خرج کنی. حتی "Stape" که از بقیه ارزون‌تره، بازم هزینه داره.

قیمت به کلی چیز بستگی داره:  

  • کدوم سرویس میزبانی رو انتخاب می‌کنی  
  • حجم درخواست‌ها یا ترافیکی که می‌فرستی/می‌گیره  
  • تعداد سرورها و غیره

من خودم بیشتر با "Google Cloud Platform" و "Stape" کارکردم. حداقل تنظیمات تو "GCP" حدود ۹۰ دلار در ماه هزینه داره. تو "Stape" کف قیمت از ۲۰ دلار در ماه شروع می‌شه.

ولی اگه ترافیک سایتت بیشتر بشه، هزینه‌هاتم می‌ره بالا.

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

می‌تونی از سرورهای خودت هم استفاده کنی (با تنظیم دستی). ولی اونم یه کم برات خرج داره.

سرور ساید تگ واسه همه مفید نیست

برای شروع کار با "سرورساید تگ" تو باید مهارت کار با "گوگل تگ منیجر"،رو داشته باشی (یا یکی رو استخدام کنی که تو این زمینه تجربه داره).

حالا بریم سراغ اولین ستاپ. سعی می‌کنم تا جایی که می‌شه ساده توضیحات رو بگم (هرچند تو واقعیت این کار خیلی سخته).

هر سرویس میزبانی پروسه متفاوتی برای ستاپ سرور داره. پس اگه مثلاً بخوای از "Amazon AWS" استفاده کنی، باید روند متفاوتی رو پیش بگیری.

راه‌اندازی کانتینر SGTM و سرور

اولین قدم اینه که یه "کانتینر سرور" تو گوگل تگ منیجر ایجاد کنی. چون این کانتینر باید یه جایی میزبانی بشه، قدم بعدی اینه که یه "tagging server" با استفاده از "Google Cloud Run" راه بندازی. وقتی سرور رو ستاپ کردی، URL تصادفی‌ای که گوگل می‌ده رو تست می‌کنیم که مطمئن بشیم درست کار می‌کنه. نگران نباش. قدم به قدم با هم پیش میریم.

ایجاد کانتینر سرور

قبل از شروع، فرضم بر این هست که قبلاً یه پراپرتی GA4 و یه کانتینر وب GTM برای سایتت (یعنی ترکینگ سمت کلاینت) داری.

حالا باید یه "کانتینر سرور" هم از لیست اکانت های "GTM" یا از داخل کانتینر درست کنی. توی روش اول، روی سه نقطه کنار آیکون چرخ‌دنده (تو اکانتی که می‌خوای کانتینر سرور رو بسازی) کلیک کن.

از این آدرس: https://tagmanager.google.com/#/home

می‌تونی اسم کانتینر رو چیزی مثل “sgtm—mywebsite.com” بذاری (به‌جای mywebsite.com دامنه سایت خودت رو بذار)، گزینه “Server” رو انتخاب کن و روی “Create” بالا سمت راست کلیک کن.

تهیه tagging server (Cloud Run)

بعد از اینکه کانتینر رو ساختی، باید یه "tagging server" درست کنی، یعنی یه سرور برای ذخیره "کانتینر GTM" ای که ساختی.

چون ما داریم از "Google Cloud Platform (GCP)" استفاده می‌کنیم، به‌خصوص "Cloud Run" (یه پلتفرم بدون سرور تو GCP)، پیشنهاد می‌کنم گزینه “Automatically provision tagging server” رو انتخاب کنی. ولی اگه از سرویس میزبانی دیگه‌ای مثل "Stape.io" استفاده می‌کنی، باید سرور رو دستی ستاپ کنی که خارج از موضوع این آموزشه.

اگه این گزینه رو انتخاب کنی، یه "tagging server" تو ریجن آمریکا ساخته می‌شه، هرچند بعداً می‌تونی ریجن رو عوض کنی. این روش سرورهایی درست می‌کنه که بعداً می‌تونی دوباره پیکربندیشون کنی و کار رو راحت تر می‌کنه.

اگه هنوز اکانت پرداخت (billing account) نداری، باید الان یکی درست کنی. گزینه “Create a billing account” رو بزن و همه مراحل رو دنبال کن. وقتی تموم شد، اکانت پرداختی که درست کردی (یا یکی که از قبل داشتی) رو انتخاب کن. توی این مرحله نیاز به اتصال یه مستر یا ویزا کارت هست. توصیه میکنم از سرویس های معتبری استفاده کنین که این امکان رو به شما میدن. به هیج عنوان سمت گیفت کارت یا دبیت کارت نرید. 

اگه با سازمانی کار می‌کنی که اکانت پرداخت داره، باید از حساب اونا برای تهیه "tagging server" استفاده کنی. تو این موقعیت دو تا گزینه داری:  

گزینه ۱: از همکار یا مشتریت بخواه سرور رو برات تهیه کنه و بهت دسترسی بده.
گزینه ۲: اگه نمی‌خوای از همکار یا مشتریت بخوای این پروسه رو طی کنه، درخواست دسترسی به اکانت پرداخت رو بده. همکار یا مشتریت باید این مراحل رو بره:  

  • بره به "console.cloud.google.com".  
  • تو انتخابگر پروژه (مطمئن بشه سازمان درست انتخاب شده)، روی سه نقطه کلیک کنه و “IAM/PERMISSIONS” رو انتخاب کنه.  

  • روی “Grant access” کلیک کنه و ایمیل تو (تحلیلگر) رو تو بخش "New principals" اضافه کنه.  

  • باید دو تا نقش بهت بده: “Billing Account Creator” (برای کار با اکانت پرداخت) و “Project Creator” (برای ساخت پروژه جدید تو GCP).

وقتی ستاپ اکانت پرداخت درست شد، توی کانتینر SGTM یه پاپ‌آپ می‌بینی با اطلاعات مهم درباره "tagging server" . بعداً هم می‌تونی این اطلاعات رو با کلیک روی ID کانتینر ببینی. اینجاست که با Default Url کار داریم.

تست ستاپ با ارسال یه درخواست به .run.app

برای تست اول باید "Default URL" رو چک کنیم چون که به کمک اون داده رو از سایتت به "tagging server" می‌فرستیم. توی کانتینر SGTM روی “Preview” بالا سمت راست کلیک کن.

اول "Default URL" رو کپی کن که باید یه چیزی مثل "https://server-side-tagging-acbcde123f-uc.a.run.app" باشه. بعد یه تب جدید تو مرورگر باز کن و همون URL رو تو نوار آدرس پیست کن و دکمه اینتر رو بزن. چون هنوز چیزی رو ستاپ نکردیم، یه ارور می‌بینی. ولی توی تب  "Preview"، یه “/” توی سایدبار URL می‌بینی. این یعنی وقتی داری سایت رو لود می‌کنی، یه درخواست به "tagging server" فرستاده شده و سرور درخواست رو ثبت کرده.

برای تست بعدی، به URL یه “testing/" اضافه کن و صفحه رو رفرش کن. توی تب "Preview"، حالا باید “testing" رو توی سایدبار URL ببینی.

در آخر هم روی ریکوست “testing” کلیک کن، برو به تب "Requests" و درخواست ورودی رو ببین تا اطلاعاتی که سرور از مرورگر گرفته رو چک کنی. این نشون می‌ده که در طول این تست داده از سایت به "tagging server" فرستاده شده.

اتصال یه دامنه اختصاصی

وقتی گزینه "Preview" رو توی کانتینر SGTM میزنی ، می‌بینی که URL مربوط به تب Preview  همون URL سروره (می‌تونی این مورد رو با کلیک روی ID کانتینر توی "SGTM" چک کنی).

چرا این مشکل سازه؟ چون هنوز داری از دامنه گوگل استفاده می‌کنی—یه دامنه سوم شخص که مال ما نیست—این کار از فایده‌های "سرورساید تگ" کم می‌کنه (اگه بخوای با همین URL کاری بکنی، بازم به‌عنوان یه سناریوی ترکینگ سوم شخص حساب می‌شه).

راه‌حل چیه؟ اتصال یه دامنه اختصاصی، مثلاً یه چیزی مثل "data.mydomain.com" (به‌جای mydomain اسم دامنه خودت رو بذار). اون موقع وقتی بازدیدکننده میاد تو سایتت، ترکینگ‌ات به کمک همون دامنه انجام میشه، ولی احتمالا با یه ساب‌دامنه متفاوت.

رزرو یه آدرس IP

توی SGTM روی ID کانتینر کلیک کن و لینک کنار "Google Cloud Platform Project ID" رو بزن. تو نوار جستجو، “IP addresses” رو تایپ کن و وقتی پاپ‌آپ رو دیدی، روی “Continue” کلیک کن (یه سری ارور تو صفحه می‌بینی، ولی این عادیه).

اگه ازت خواست، “Compute Engine API” رو فعال کن (و اگه تو پروسه ازت خواستن چیز دیگه‌ای رو هم فعال کنی، حتماً اینکار رو بکن).

بعد از اینکه API لود شد، تو صفحه جدید روی “Reserve External Static IP Address” کلیک کن.

اسم IP رو “sgtm-ip” بذار، نوعش رو به “Global” تغییر بده و روی “Reserve” کلیک کن.

اینجا دو تا نکته مهم هست:  

  • وقتی IP به چیزی وصل نباشه، یه کم هزینه می‌بره (تقریباً چند سنت در روز)، ولی وقتی به سرور وصل بشه و استفاده بشه، مجانی می‌شه.  
  • باید این IP جدید رزروشده رو تو DNS دامنه‌ات اضافه کنی. اگه نمی‌دونی چطور، با یکی تو شرکتت، مثلاً تیم IT، تماس بگیر.

تهیه گواهی SSL

گواهی SSL برای اطمینان از اینه که ارتباط بین کاربر و سرور امن باشه، تا "server-side endpoint" بتونه از HTTPS به‌جای HTTP استفاده کنه.

توی سرچ بار GCP برو  “Certificate Manager” رو جستجو کن و بعد از انتخاب همین عبارت ازت خواسته می‌شه که “Certificate Manager API” رو فعال کنی.

بعد از فعال کردن API از تب Class Certificates  روی  Create a certificate بزن.

برای پر کردن فرمی که باز میشه چند تا مرحله هست که باید انجام بشن:  

  • اسم: “sgtm-ssl”  
  • گزینه “Create Google-managed certificate” رو انتخاب کن  
  • دامنه ۱: دامنه "server-side endpoint" خودت رو وارد کن (مطمئن شو ساب‌دامنه‌ای که انتخاب کردی جایی دیگه ای برای کار دیگه ای استفاده نشده)  
  • روی “Create” کلیک کن

لازم نیست صبر کنی تا وضعیت از "Provisioning" به "Active" تغییر کنه. می‌ریم سراغ اتصال SSL به "load balancer" (تغییر وضعیت به active چند ساعت تا چند روز طول بکشه).

ایجاد load balancer

"Load balancer" یه ابزاره برای مدیریت و هدایت ترافیک ورودی به سرورهای مختلف. وقتی بازدیدکننده‌ها میان تو سایتت، "load balancer" تصمیم می‌گیره کدوم سرور باید درخواست رو مدیریت کنه. مثلاً اگه سرورهای آمریکا و اروپا رو داشته باشی، "load balancer" کاربرهای آمریکایی رو به سرور آمریکا و کاربرهای اروپایی رو به سرور اروپا می‌فرسته.

"Load balancer" دو تا بخش اصلی داره:  

  • Frontend که IP address رو به گواهی SSL لینک می‌کنه  
  • Backend: جایی که "Network Endpoint Grounds (NEG)" رو برای هر ریجن سرور تنظیم می‌کنی.

توی GCP بیا و  “Load balancing” رو جستجو کن و روی گزینه “Create load balancer” کلیک کن.  همه گزینه‌های پیش‌فرض رو بدون تغییر نگه می‌داریم، و مستقیم روی “Configure” کلیک میکنیم. اسم load balancer رو هم  “sgtm-loadbalancer” بذار (همونطور که می‌بینی  یه الگوی اسم‌گذاری مشخص داریم).

Frontend

برای فرانتند، چند تا کار باید بکنی:  

  • اسم: رو “sgtm-front”  بزار.
  • پروتکل رو به “HTTPS” تغییر بده  

  • فیلد آدرس IP رو به آدرسی که قبلاً رزرو کردی تغییر بده ، مثلاً “sgtm-ip”  
  • تو بخش گواهی، “sgtm-ssl” (که قبلاً ساختی) رو انتخاب کن  
  • تیک “Enable HTTP to HTTPS redirect” رو بزن

Backend

بعد، برو روی تنظیمات "Backend configuration". اینجا باید “Create a backend service” رو انتخاب کنی و فرمی که تو پنجره پاپ‌آپ میاد رو پر کنی:  

  • اسم: “sgtm-backend”  
  • نوع Backend رو به “Serverless network endpoint group” تغییر بده  

  • زیر بخش "New Backend"،  بیا و  “Create serverless network endpoint group" رو انتخاب کن  


  • تو فرم جدیدی که باز میشه، این اطلاعات رو پر کن:  
    • چون از "automatic provisioning" استفاده کردیم، منطقه روی "us-central1" تنظیم شده، پس می‌تونی فیلد اسم رو با این عبارت “sgtm-neg-usc1” پر کنی  
    • “us-central1” رو تو بخش Region انتخاب کن  
    • تیک “Cloud Run” رو بزن و برای انتخاب سرویس گزینه “server-side-tagging” رو انتخاب کن  
    • روی “Create” کلیک کن


تیک “Enable Cloud CDN” رو بردار
اگه توی GA4 گوگل سیگنال رو فعال کردی اینجا می‌تونی هدرهای جغرافیایی اضافه کنی تا با هر درخواست ورودی به کانتینر SGTM، اطلاعات کشور، منطقه و شهر بازدیدکننده رو هم بگیری. اگه داری از "consent mode" یا "Google Signals" کار می‌کنی، حتماً این اطلاعات رو اضافه کن. برای این کار، از این مسیر برو "Advanced configurations > Custom request headers" و سه بار روی “Add header” کلیک کن. سه تا اسم و مقدار هدر زیر رو اضافه کن:  

  • X-Gclb-Country – {client_region}  
  • X-Gclb-Region – {client_region_subdivision}  
  • X-Gclb-City – {client_city}

روی “Create” کلیک کن تا همه این تغییرات ذخیره بشن.


قوانین روتینگ

چون همه ترافیک به "sgtm-backend" می‌ره (چون "tagging server" اونجاست)، وارد کردن ساب‌دامنه خودت هم پیشنهاد میشد.

روی گزینه “Add host and path rule” کلیک کن و این اطلاعات رو پر کن:  

  • Host 2: ساب‌دامنه خودت رو اضافه کن، مثلاً "data.mydomain.com"  
  • Path 2: “*/” رو وارد کن (یعنی همه مسیرهای مربوط به ساب‌دامنه)  
  • Backend 2: “sgtm-backend” رو وارد کن (همون چیزی که تو ردیف بالا هست)

در آخر، "Preview and finalize" رو انتخاب کن و روی “Create” کلیک کن تا این مرحله تموم بشه.


حالا دو تا "load balancer" می‌بینی: "sgtm-frontend-redirect" که که فقط برای ریدایرکت HTTP/HTTPS هست و و "sgtm-loadbalancer" که "load balancer" اصلیه. وضعیت هر دو باید تیک سبز داشته باشه.

"Load balancer" وقتی شروع به کار می‌کنه که گواهی SSL بالاخره آماده بشه. برای چک کردن این قضیه از آیکون سرچ بالای GCP بیا و “Certificate Manager” رو جستجو کن و به تب "Classic Certificates" برو. وضعیت تو چند ساعت (بستگی به ارائه‌دهنده DNS داره) به “Active” تغییر می‌کنه.

تغییر دامنه توی کانتینر SGTM

وقتی وضعیت SSL certificate ها به “Active” تغییر کرد، دامنه جدیدت رو کپی کن و برو به "SGTM". حالا از بخش ادمین برو به "Container Settings".


URL فعلی کانتینر SGTM رو پاک کن و دامنه خودت رو اضافه کن (مطمئن شو “https” رو وارد کردی و  اسلش انتهایی “/” رو پاک کن).


برای تست ستاپ برو دکمه "Preview" رو بزن. حالا تو سایدبار URL باید دامنه خودت رو ببینی. یه تب جدید باز کن، “data.mydomain.com/test” رو وارد کن و اینتر رو بزن (دامنه واقعی خودت رو بذار). بعدش باید “test” رو توی تب "Preview" ببینی.


روی incoming request کلیک کن و داده‌های دریافتی رو چک کن. مطمئن شو که ولیوی درست پارام های شهر، کشور و منطقه رو می‌بینی.


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

ارسال دیتا از وب کانتینر به کانتینر SGTM

چند تا راه برای فرستادن دیتا به کانتینر SGTM داری:  

  • یه توسعه‌دهنده می‌تونه کدهای "gtag.js" که به سورس کد سایتت اضافه شده رو ادیت کنه.  
  • یه توسعه‌دهنده می‌تونه اسکریپت اختصاصی یا یه کتابخونه بنویسه که داده ها رو آماده کنه و مستقیم به کانتینر سرور بفرسته.  
  • می‌تونی یه تگ "Google Analytics 4" توی کانتینر وب GTM بسازی.

اینجا من گزینه سوم رو برای این مثال انتخاب می‌کنم چون رایچ ترین گزینه س. 

فرض کن یه سایت داری با یه کانتینر GTM معمولی (پیش‌نیاز این پست بلاگ). همین حالا یه تگ "GA4" برای هر بازدید صفحه فایر میشه و احتمالاً چند تا تگ ایونت دیگه هم ساختی.

این تگ‌ها به‌صورت پیش‌فرض داده رو به "google-analytics.com/g/collect" (یا /r/collect، "analytics.google.com/collect") می‌فرستن. حالا باید این URL مقصد رو عوض کنیم و همه این درخواست‌ها رو به کانتینر سرورساید جدیدت بفرستیم.


چطور این کار رو می‌کنی؟

اول باید "Google Tag" رو که برای نصب "GA4" از طریق "GTM"ساختی رو ویرایش کنی. توی کانتینر وب روی  "Google Tag" که مسئول فعال کردن "Google Analytics 4" هست بزن. بعد به این مسیر برو "Configuration settings > Add parameter" و گزینه add parameter رو انتخاب کن. حالا  “server_container_url” رو به‌عنوان پارامتر و ساب‌دامنه ای که از قبل ست کردی رو به عنوان مقدارش وارد کن.


برای محکم کاری، باید همه تگ‌های ایونت "GA4" تو کانتینرت رو چک کنی و همین پارامتر و مقدار "server_container_url" رو به همه اونها اضافه کنی.

برای انجام راحت‌تر این کار، می‌تونی این پارام و مقدارش رو داخل event setting variable بذاری و بعد فقط همین variable رو به همه تگ‌های "GA4" وارد کنی.

تست ستاپمون

باید با تست کردن مطمئن بشیم همه‌چیز درست کار می‌کنه. برای این کار، از دکمه "Preview" توی کانتینر SGTM بزن  و توی کانتینر وب هم همین کار رو بکن. 

اینجا چند تا پیج رو باز کن. و ببین ریکوست ها چه وضعیتی دارن. 

با راست کلیک روی یکی از پیج های وبسایتت روی گزینه inspect بزن و تب network رو انتخاب کن. . واژه “collect/” رو (بدون گیومه) وارد کن تا ریکوست ها رو پیدا کنی. اینجا باید ببینی که درخواست دیگه به دامنه "Google Analytics" نمی‌ره، و مستقیما به سرور خودت فرستاده می‌شه.


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

تو بخش بعدی، تگ‌ها، تریگرها و متغیرهای سمت سرور رو تنظیم می‌کنیم تا داده‌ها رو به Google Analytics 4 بفرستیم.

ست کردن تگ‌ها، تریگرها، وریبل ها و کلاینت‌ها توی کانتینر سرور
اگه قبلاً با Google Tag Manager کار کرده باشی، با تگ‌ها، تریگرها و متغیرها آشنایی، ولی کلاینت‌ها برات یه اصطلاح جدیده. بذار یه مرور سریع کنیم که هر کدوم چی‌هستن:

- تگ‌ها ریکوست های HTTP رو از SGTM می‌فرستن.  
- تریگرها تگ‌ها رو فعال می‌کنن (توی کانتینر SGTM فقط یه نوع تریگر در دسترسه).  
- وریبل ها می‌تونن بعضی پارامترهای http request ها رو حذف کنن، پارامترهای اضافی خاصی به ریکوست ها اضافه کنن و تریگرها رو دقیق‌تر کنن (زیاد درباره وریبل ها حرف نمی‌زنم، اگه می‌خوای بیشتر بدونی، به تب دوره های آموزشی من سر بزن).  
- کلاینت‌ها مسئول دریافت و پردازش/تطبیق داده‌هایی هستن که کانتینر  SGTM دریافت می‌کنه. بعدش، کلاینت این داده‌ها رو در دسترس تگ‌ها، تریگرها و وریبل های اون کانتینر قرار می‌دن.  

کلاینت‌ها چی‌هستن؟
چون کلاینت‌ها مختص SGTM هستن، بذار بیشتر درباره‌شون گپ بزنیم.  
داده‌ها معمولاً تو کانتینر وب معمولی در دسترسن چون یه کد اونا رو به لایه داده (data layer) می‌فرسته. در مورد SGTM، کانتینر داده‌ها رو از *یه جایی* دریافت می‌کنه. کلاینت بعدش این داده‌ها رو می‌گیره، تغییرشون می‌ده و تو کانتینر در دسترس ما قرار می‌ده.  
کلاینت رو مثل یه نگهبان متخصص تصور کن. وقتی یه درخواست به کانتینر SGTM می‌رسه، باید شناسایی بشه. این درخواست از Google Analytics 4 اومده؟ یا از یه ابزار دیگه‌ست؟ کلاینت اولین ابزاری هست که داده‌های ورودی رو بررسی می‌کنه، اگه فرمت اون رو بشناسه قبولش می‌کنه و بعدش اون رو به یه ساختار استاندارد تبدیل می‌کنه طوری که تگ‌ها، تریگرها و وریبل های داخل کانتینر سرور بتونن باهاش راحت کار کنن.  
وقتی یه کانتینر SGTM جدید می‌سازی، به‌صورت خودکار یه کلاینت برای GA4 اضافه می‌شه.  

می‌تونی کلاینت‌های دیگه ای هم اضافه کنی، ولی فعلاً تعداد تمپلیت های کلاینت محدودن (می‌تونیم انتظار داشته باشیم که کامیونیتی مارکترها تعداد این تمپلیت ها رو بیشترشون کنه). شما می‌تونی کلاینت‌های خودت رو هم بسازی، ولی این نیاز به مهارت بالای کدنویسی با جاوااسکریپت + آشنایی با APIهای موجود برای ساختن تمپلیت های کلاینت داره.  
برای ستاپ اولیه مون، لازم نیست کلاینت بسازیم یا کدنویسی کنیم. به جاش، از کلاینت موجود GA4 استفاده می‌کنیم.  
تگ‌ها، تریگر و وریبل ها
هر بار که GA4 داده‌ای به کانتینر SGTM می‌فرسته، کلاینت GA4 اون داده رو می‌گیره و در اختیار تگ‌ها، وریبل ها و غیره قرار می‌ده. وقتی این اتفاق می‌افته، باید یه تگ GA4 توی SGTM ایجاد کنیم تا داده‌ها رو به سرورهای Google Analytics بفرسته.  
تو کانتینر وب GTM معمولی، ما عادت داریم برای تعاملات مختلف تگ‌های مختلف بسازیم:  
- یه تگ برای بازدید صفحات  
- یه تگ برای خریدها  
- یه تگ برای کلیک‌های لینک خروجی و غیره.  

توی کانتینر SGTM، داشتن یه تگ GA4 کافیه (حداقل تو مراحل اولیه ستاپ SGTM). این تگ داده‌های مربوط به رویدادهای GA4، بازدید صفحات، خریدها (از وب‌سایتت) و سایر داده‌های مرتبط رو دریافت می‌کنه و به سرورهای Google Analytics می‌فرسته.  
چه زمانی ساختن چند تا تگ GA4 توی کانتینر SGTM منطقیه؟ گاهی بعضی ایونت های Google Analytics 4 ممکنه نیاز به تغییرات تنظیمات/پارامتریک داشته باشن. اون موقع منطقیه که یه تگ جدا برای اون ایونت های خاص بسازی.  
برای ساختن یه تگ GA4، از این مسیر برو Tags > New > Google Analytics: GA4.

 این تگ همه داده‌ها رو از یه کلاینت Google Analytics 4 میگیره و میفرسته. فعلاً چیزی رو زیر بخش های Event Parameters یا User Properties تغییر نمیدیم.  

تو بخش "Triggering"، سه تا تریگر آماده وجود دارن: Custom، Custom Event و Page View.  
اینجا، باید یه تریگر بسازیم که "وقتی GA4 به‌عنوان نام کلاینت برای هر ایونتی وجود داشت" فایر بشه. اینجا باید تریگر "Custom" رو انتخاب کنی. Custom یعنی اینکه «یه ریکوست به کانتینر SGTM فرستاده شده».  

اگه برات مهم نیست چه درخواست‌هایی به Google Analytics فرستاده می‌شن، می‌تونی از "All events" استفاده کنی.  
توصیه من این هست که تریگر رو محدود کنی که فقط "وقتی کلاینتGA4 درخواست رو می‌گیره"، فایر بشه. به همین دلیل باید شرط زیر رو وارد کنی:

نکته: وریبل Client Name اگه توی لیست نبود باید از بخش Variables کانتینر SGTM (Variables > Configure) فعالش کنی.  
اسم تگ رو "GA4" بذار و همه این تغییرات رو ذخیره کن. حالا وقتشه Preview Mode رو فعال کنی. حالت پریویو تو یه تب جدید باز می‌شه و خیلی شبیه اونیه که برای کانتینر وب استفاده میکنیم. ولی چند تا چیز/تفاوت جدید داره که بعداً یه کم دربارشون می‌گم.  
وقتی سایتت لود شد، یه اکشن خاص انجام بده (مثلاً صفحه وب رو رفرش کن یا رو چیزی کلیک کن)، بعد درخواست‌های ورودی رو توی تب preview کانتینر SGTM می‌بینی. رو یکی از درخواست‌ها کلیک کن و برو به تب Requests. اینجا کلاینت، ریکوست خروجی و ریکوست ورودی رو می‌بینی. اگه رو ریکوست خروجی کلیک کنی، می‌بینی چه تگی اون ریکوست رو فرستاده، که تو این مورد کلاینت GA4 هست، و اطلاعات مربوط به ریکوست هم قابل مشاهده ست..  

چطور کل ستاپ رو چک کنیم؟
 این بخش یه چهارچوب کلی و شامل چهار روش برای مطمئن شدن از کارکرد درست ستاپ بهت می‌ده (مخصوصاً بعد از ایجاد یه ایونت جدید):  
1. حالت پریویوی کانتینر GTM وب: یه اکشن خاص تو سایتت انجام بده و مطمئن شو که ایونتش رو تو حالت پریویوی GTM وب می‌بینی. چک کن که تگ مربوط به اون ایونت زیر بخش "Tags fired" ظاهر بشه و همه پارامترها رو داشته باشه.  
2. تب Network: (با راست‌کلیک رو صفحه وب روی گزینه Inspect بزن و تب network رو انتخاب کن): توی نوار جستجو واژه "collect" رو بدون "" تایپ کن و مطمئن شو داده‌ها به سمت endpoint سرور فرستاده میشن.  
3. حالت پریویوی SGTM: یه اکشن تو سایتت انجام بده و مطمئن شو ایونت رو تو حالت پریویوی SGTM می‌بینی. چک کن که ریکوست توی نوار سمت چپ ظاهر بشه. رو درخواست کلیک کن و به تب Requests برو تا اطلاعات کلاینت و ریکوست های ورودی و خروجی رو ببینی.
4. برای چک کردن پلتفرم نمایش داده ها: از داخل پلتفرم GA4 برو به بخش ادمین و بعد روی گزینه Debug View. چک کن که ایونت ها و پارامترها حتما درست دریافت بشن.  

آپگرید سرور و پابلیش کردن تغییرات GTM
یکی از مراحل نهایی تو این وبلاگ پست، آپگرید سرورها هست (تا SGTM تو بتونه ترافیک وب‌سایت رو به خوبی مدیریت کنه و قدرت کافی برای پردازش ریکوست های ورودی داشته باشه).
برو به کانتینر SGTM، رو ID کانتینر کلیک کن و بعد رو ID پروژه GCP کلیک کن. به گوگل کلاود پلتفرم هدایت می‌شی. از نوار جستجوی بالای گوگل کلاود پلتفرم واژه Cloud Run رو جستجو کن.  
تگینگ سرور (نه سرور پریویو) رو انتخاب کن.  

بعد گزینه "Edit & Deploy" رو بزن.  

تو بخش Autoscaling، حداقل تعداد نمونه‌ها رو 2 و حداکثر رو 10 تنظیم کن. بعد رو "Deploy" کلیک کن تا این پروسه تموم بشه.  

هزینه‌ها
مثل خیلی چیزها، سرورساید تگ هم هزینه داره. اجرای یه سرور مجازی حدود 45 دلار در ماه هزینه داره، پس تنظیمات ارایه شده توی این آموزش حداقل 90 دلار در ماه برات هزینه داره. اگه وب‌سایتت ترافیک بالایی داره، کلاودران تعداد سرورهای مجازی رو افزایش می‌ده، پس ممکنه ستاپ فعلی حتی بیشتر هزینه بردار باشه، مثلاً  180 دلار در ماه.  
فاکتورهای دیگه هم رو قیمت نهایی تأثیر می‌ذاره (مثلاً حجم درخواست‌های خروجی سرور و لاگ جزییات)، پس ممکنه یه کم بیشتر پرداخت کنی. ولی تخمین هزینه‌های ماهانه GCP برای سرور ساید تگینگ خیلی سخته.  
وقتی ستاپ آماده شد، آخرین نسخه رو تو هر دو کانتینر GTM (وب و سرور) منتشر کن. کانتینر وب داده‌های GA4 تو رو به کانتینر سمت سرور می‌فرسته، و کانتینر سرور شروع به دریافت داده‌های ورودی و ارسال کردنشون به سرورهای GA می‌کنه.  
نکته مهم: اگه برای تست و یادگیری این آپگرید رو انجام میدی، یادت باشه که بعد از انجام اینکار حتما downgrade کنی (یا بهتره، سرورهای کلاود ران، لود بالانسر، آدرس IP و گواهی SSL رو حذف کنی). وگرنه، گوگل بعد از تموم شدن کردیت رایگان ازت هزینه می‌گیره.  

چیزهایی که باید مدنظر داشته باشی  
سرورساید تگینگ باعث نمی‌شه مهارت ترکینگ وب با GTM منسوخ بشه
سرورساید تگینگ کاملاً جایگزین ترکینگ معمولی وب‌سایت که تا حالا انجام می‌دادی نمی‌شه. هنوز باید بدونی دیتالیر چطور کار می‌کنه و چطور تگ‌ها، تریگرها و وریبل ها رو تو کانتینر وب تنظیم کنی.  
سرورساید تگینگ یه سطح بالاتری از قابلیت‌هاست که *می‌تونی* داشته باشی. البته می‌تونی کامل به سمت سرور بری، ولی من هنوز خیلی موارد رو می‌بینم که کانتینر سرور میتونه بهتر در کنار کانتینر وب انجامشون بده.
چون که کل صنعت داره به سمت ترکینگ کاملاً (یا تقریباً) اول شخص می‌ره، نیاز به مهارت های سرور ساید قطعاً بیشتر می‌شه. ولی هنوز باید اون داده‌ها رو از وب‌سایتت بفرستی (و کانتینر وب  GTM یکی از گزینه‌هاست).  

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