Bez prawidłowego conversion tracking cała reszta marketingu to zgadywanie. Pokażemy kompletny setup GA4 + GTM dla WooCommerce — wszystkie eventy e-commerce (view_item, add_to_cart, begin_checkout, purchase), enhanced conversions, offline conversions z zamówień telefonicznych. Implementacja, którą stosujemy w Elsii u wszystkich klientów WooCommerce.

Architektura — co skąd pochodzi

Standardowy stack tracking dla WooCommerce:

  • WooCommerce → wysyła event do dataLayer przy każdej akcji (view, add to cart, checkout, purchase)
  • Google Tag Manager (GTM) → nasłuchuje dataLayer, formatuje events, wysyła do GA4 i Google Ads
  • GA4 → zbiera eventy, agreguje, eksportuje do BigQuery (jeśli włączone)
  • Google Ads → otrzymuje conversion z GTM (online) + z WooCommerce backend (offline conversions)

Krok 1: Wtyczka push do dataLayer

Dla WooCommerce najprostsze rozwiązanie: wtyczka GTM4WP (free) — automatycznie wysyła wszystkie eventy e-commerce do dataLayer w formacie zgodnym z GA4. Alternatywy: PixelYourSite Pro, Tag Manager for WooCommerce (płatne, więcej funkcji).

Co dostajesz po włączeniu GTM4WP:

// Strona produktu
dataLayer.push({
  event: 'view_item',
  ecommerce: {
    items: [{
      item_id: '123',
      item_name: 'Łóżko Otello 160',
      item_brand: 'Mebstyle',
      item_category: 'Łóżka',
      price: 2499.00,
      currency: 'PLN'
    }]
  }
});

// Po dodaniu do koszyka
dataLayer.push({
  event: 'add_to_cart',
  ecommerce: { items: [...] }
});

// Purchase (strona thank-you)
dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: 'WC-12345',
    value: 2499.00,
    currency: 'PLN',
    tax: 467.07,
    shipping: 0,
    items: [...]
  }
});

Krok 2: Konfiguracja GTM

W GTM tworzysz 4 typy tagów (po jednym per main event):

  1. GA4 Event Tag — typ „Google Analytics: GA4 Event”, trigger „Custom Event” z nazwą „purchase” (analogicznie dla pozostałych)
  2. Google Ads Conversion — typ „Google Ads Conversion Tracking”, conversion ID i label z konkretnej Conversion Action w Ads
  3. Meta Pixel (jeśli Facebook Ads) — typ „Custom HTML” lub Meta template
  4. Server-side fallback (opcjonalnie) — jeśli używasz sGTM, eventy idą najpierw do server containera, dopiero potem do GA4/Ads

Kluczowe variables w GTM, które musisz zbudować:

  • DLV - ecommerce.transaction_id — Data Layer Variable z transaction_id
  • DLV - ecommerce.value — wartość transakcji
  • DLV - ecommerce.currency — waluta
  • DLV - ecommerce.items — lista produktów (tablica)
  • JS - user_email_hash — Custom JS variable hashująca email klienta SHA-256 (dla Enhanced Conversions)

Krok 3: Walidacja przez Tag Assistant

Po deploycie GTM debug mode + Google Tag Assistant. Przejdź pełną ścieżką klienta (view → add to cart → checkout → purchase) i sprawdź:

  • Tagi firują w odpowiednich momentach (purchase tag = tylko na thank-you page)
  • Variables mają wartości (transaction_id != undefined, value to liczba, currency = „PLN”)
  • GA4 DebugView pokazuje event z prawidłowymi parametrami
  • Google Ads Conversions → Diagnostics pokazuje recent conversions w ciągu 24h
  • Brak duplikatów — purchase tag NIE firuje na refresh thank-you page (trigger ma exclude triggera „Page View – Existing Session” lub used dedupe key)

Krok 4: Enhanced Conversions

Enhanced Conversions for Web wysyłają zhashowany email + telefon klienta razem z konwersją. Działa nawet bez cookies (post-iOS 14.5, post-cookie). Wymóg: zhashowany przez SHA-256 w przeglądarce, przesłany jako część conversion data.

// Custom JS variable w GTM
function() {
  var email = {{DLV - customer.email}}; // z dataLayer
  if (!email) return undefined;
  return sha256(email.toLowerCase().trim());
}

Match rate Enhanced Conversions powinien być >50% po 7 dniach. Poniżej tego — coś nie działa (np. emaile nie są przekazywane).

Krok 5: Offline Conversions z WooCommerce

Część transakcji w WooCommerce nie idzie przez standardowy checkout — np. zamówienia telefoniczne dodane przez admina, zamówienia z BLIK po telefonie. Te konwersje też trzeba zaraportować do Ads, inaczej algorytm widzi tylko 70% prawdy.

Implementacja: cron WooCommerce co 24h eksportuje nowe orders → REST API Google Ads → conversion uploads z GCLID (zapisanym w meta order, jeśli kupujący przyszedł z reklamy). Wzrost match rate z 70% do 95%.

Częste błędy w tracking

  • Hijack obcego conversion ID — jakaś wtyczka wstrzykuje swój tag AW-XXXXXXX. Patrz nasz audyt PMax checklist
  • Brak transaction_id w purchase — duplikaty konwersji przy refresh thank-you
  • Currency = USD zamiast PLN — wartości w Ads pomnożone × ~4
  • Wartość z VAT zamiast netto — ROAS przekłamany w górę o 23%
  • Brak dataLayer push przy „Buy now” (skip cart) — tracking traci ~30% transakcji

Pełen pakiet — Google Ads dla e-commerce. Case implementacji od zera — PMax dla sklepu meblowego.