بازگشت به وبلاگ

وبلاگ

تگ‌گذاری سمت سرور برای فروشگاه Shopify یا WooCommerce: چه چیزی اجرا می‌شود، چه چیزی نه، و چه باید نصب کنید

منتشرشده · به‌روزشده · 5 دقیقه مطالعه

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

نُه رویداد و تنها وجه مشترکشان

GA4 برای قیف خرید نُه رویداد تعریف می‌کند: view_item_list، view_item، add_to_cart، remove_from_cart، view_cart، begin_checkout، add_shipping_info، add_payment_info و purchase. این نام‌ها متعلق به GA4 هستند، نه هیچ پلتفرم خاصی — همین نُه رویداد برای Shopify، WooCommerce و فروشگاهی که خودتان ساخته‌اید یکسان کار می‌کنند.

وجه مشترکشان یک سازوکار است. هر کدام یک push به dataLayer صفحه است، دقیقاً با همان نام، که یک شیء ecommerce با ساختار GA4 را همراه دارد. یک تریگر Tag Manager منتظر آن نام می‌ماند؛ یک تگ رویداد GA4 شیء ecommerce را می‌خواند و ارسال می‌کند. اگر نام را اشتباه بنویسید، شیء را یک سطح بیش از حد تودرتو کنید یا آن را در صفحه اشتباه push کنید، تگ برای همیشه بی‌کار می‌ماند و هیچ خطایی هم نمی‌دهد. یک push خرید این شکلی است:

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: 'ORD-10442',
    value: 89.90,
    currency: 'EUR',
    items: [
      { item_id: 'SKU-118', item_name: 'Trail jacket', price: 89.90, quantity: 1 }
    ]
  }
});

اینکه ابتدا ecommerce: null را push می‌کنید تزئینی نیست. بدون آن، اقلام رویداد قبلی ممکن است به رویداد بعدی نشت کنند و یک view_item از سه صفحه قبل، داخل یک purchase سر در بیاورد.

Shopify: قالب، صفحه پرداخت را نمی‌بیند

کانتینری که در قالب Shopify نصب شده باشد، در ویترین فروشگاه بارگذاری می‌شود — صفحه‌های محصول، مجموعه‌ها، سبد خرید. اما در صفحه پرداخت یا صفحه تشکر بارگذاری نمی‌شود، چون Shopify این صفحه‌ها را از دامنه و قالب‌های خودش ارائه می‌دهد. بنابراین کانتینری که در قالب نصب شده می‌تواند view_item و add_to_cart را بفرستد، اما با هیچ پیکربندی‌ای هرگز begin_checkout، add_shipping_info، add_payment_info یا purchase را نمی‌فرستد.

این چهار رویداد از یک Custom Pixel می‌آیند. محیط ایزوله (sandbox) پیکسل‌های Shopify رویدادهای پرداخت (checkout_started، checkout_shipping_info_submitted، payment_info_submitted، checkout_completed) را در اختیار می‌گذارد و به پیکسل اجازه می‌دهد در dataLayer مخصوص خودش push کند — یک اسکریپت کوچک هر کدام را به نام و ساختار رویداد GA4 که در بالا دیدید نگاشت می‌کند. رویدادهای ویترین همچنان از قالب می‌آیند، پس یک راه‌اندازی کامل هر دو را دارد: یک اپ dataLayer یا قطعه‌کدی در قالب برای نیمه مرور، و یک Custom Pixel برای نیمه پرداخت.

یک تصمیم دیگر هم باید بگیرید. کانال Google & YouTube در Shopify می‌تواند رویدادهای GA4 را مستقیماً و بیرون از هر کانتینری ارسال کند. اگر یک ویژگی GA4 را آنجا وصل کنید و در عین حال همان ویژگی را از مسیر کانتینرتان هم عبور دهید، هر خرید دو بار شمرده می‌شود. یک مسیر را انتخاب کنید. اگر هدف، جمع‌آوری شخص اول است، مسیر همان کانتینر است و اتصال Analytics در آن کانال خاموش می‌ماند.

WooCommerce: هسته‌اش هیچ چیزی push نمی‌کند

خود WooCommerce اصلاً هیچ dataLayer‌ای نمی‌نویسد. این کار را یک افزونه انجام می‌دهد — GTM4WP همان است که بیشتر افراد سراغش می‌روند — و گزینه تجارت الکترونیک GA4 آن، این رویدادها را با ساختار درست و در صفحه‌های درست تولید می‌کند: view_item در صفحه محصول، add_to_cart روی دکمه، begin_checkout در صفحه پرداخت و purchase در صفحه دریافت سفارش.

ایراد کلاسیک WooCommerce خرید تکراری است و علت مشخصی دارد: صفحه دریافت سفارش دوباره بارگذاری می‌شود. بازدیدکننده آن را رفرش می‌کند، از درگاه پرداخت به آن برمی‌گردد یا قالب دو بار از آن ریدایرکت می‌کند، و purchase دوباره با همان transaction_id ارسال می‌شود. GA4 خریدهای تکراری را در یک نشست بر اساس transaction_id حذف می‌کند که بیشتر موارد را می‌گیرد، اما بارگذاری مجدد در روز بعد را نه. ارزش دارد تنظیم «only fire once per order» (فقط یک بار برای هر سفارش) را در افزونه روشن کنید؛ این تنظیم نشانگر را سمت سرور نگه می‌دارد، جایی که بارگذاری مجدد نمی‌تواند آن را بازنشانی کند.

آنچه SignalHost برایتان می‌سازد

هر کانتینر SignalHost در کانتینر وب خود، برای هر یک از این نُه رویداد یک تریگر Custom Event و یک تگ رویداد GA4 دارد — و همین‌طور برای هفت رویدادی که سایتِ بدون فروشگاه هم به آن‌ها نیاز دارد: ثبت‌نام‌ها، دوره‌های آزمایشی و سرنخ‌ها. نام همه آن‌ها با پیشوند SH شروع می‌شود، پس هرگز با چیزی که از قبل دارید تداخل پیدا نمی‌کنند. هر تگ شیء ecommerce را مستقیماً از dataLayer ارسال می‌کند، بنابراین items، value، currency و transaction_id بدون نیاز به یک متغیر برای هر فیلد منتقل می‌شوند، و هر تگ شناسه اندازه‌گیری شما را صریحاً ذکر می‌کند، نه اینکه آن را به ارث ببرد.

هیچ چیزی روی فروشگاه شما نصب نمی‌شود. تریگرها گوش می‌دهند؛ push کردن کار افزونه یا پیکسل است. اگر کانتینر شما یکی از این رویدادها را از قبل با تگی از خودتان به GA4 می‌فرستد — مثلاً افزونه‌ای که تگ purchase خودش را آورده — SignalHost آن رویداد را به همان تگ می‌سپارد و تگ دومی نمی‌سازد، تا هیچ سفارشی دو بار شمرده نشود. هر تگ همچنین شناسه event_id را که همراه رویداد push می‌کنید منتقل می‌کند، تا پلتفرم تبلیغاتی‌ای که همان رویداد را از پیکسل خودش هم دریافت می‌کند، آن را فقط یک بار بشمارد.

در سمت سرور هیچ تنظیمی برای تک‌تک رویدادها وجود ندارد. تگ GA4 کانتینر سرور هر رویدادی را که دریافت کند، با هر نامی، منتقل می‌کند؛ پس رویداد تازه‌ای در سایت شما به هیچ تغییری در سمت ما نیاز ندارد. پلتفرم‌های تبلیغاتی‌ای که وصل می‌کنید — Google Ads، Meta، TikTok، Reddit، Pinterest، Snapchat، LinkedIn — همین رویدادها را دریافت می‌کنند: یک purchase برای Meta و TikTok به یک Purchase تبدیل می‌شود، همراه با محصولات و مبلغش، و هر پلتفرم از همان push رویدادهایی را دریافت می‌کند که به کارش می‌آیند.

بررسی با یک سفارش آزمایشی

یک سفارش واقعی در حالت آزمایشی ثبت کنید، یا سفارشی ارزان که بعداً مبلغش را بازمی‌گردانید، و فهرست رویدادهای صفحه کانتینر را زیر نظر بگیرید. باید به‌ترتیب view_item، add_to_cart، begin_checkout، add_payment_info و purchase را ببینید — هر کدام یک بار، و اگر راه‌اندازی شما view_cart و add_shipping_info را هم push می‌کند، آن‌ها را هم در این میان. نبودن purchase در Shopify یعنی Custom Pixel نصب نشده یا push نمی‌کند؛ نبودن begin_checkout در WooCommerce معمولاً یعنی رویداد پرداخت افزونه غیرفعال است.

اگر تبدیل‌های Google Ads را از طریق کانتینر اجرا می‌کنید، purchase رویداد تبدیل است مگر اینکه رویداد دیگری انتخاب کنید، و مبلغ، ارز و شناسه تراکنش آن از همان شیء ecommerce خوانده می‌شود. push خریدی که value نداشته باشد تبدیلی با ارزش صفر ثبت می‌کند — که در گزارش عددی واقعی است، و عددی اشتباه.

اگر پس از این هم GA4 سفارش‌های کمتری از فروشگاه شما می‌شمارد، ببینید چرا GA4 کمتر می‌شمارد و چه مقدار از آن را می‌توان بازگرداند.

دیگر داده‌ها را به خاطر مسدودکننده‌های تبلیغات از دست ندهید

رایگان شروع کنید. اولین کانتینر را در چند دقیقه راه‌اندازی کنید.