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
dataLayerprzy 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):
- GA4 Event Tag — typ „Google Analytics: GA4 Event”, trigger „Custom Event” z nazwą „purchase” (analogicznie dla pozostałych)
- Google Ads Conversion — typ „Google Ads Conversion Tracking”, conversion ID i label z konkretnej Conversion Action w Ads
- Meta Pixel (jeśli Facebook Ads) — typ „Custom HTML” lub Meta template
- 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_idDLV - ecommerce.value— wartość transakcjiDLV - ecommerce.currency— walutaDLV - 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.