5 błędów e-commerce w GA4, o których Google cię nie ostrzeże
GA4 e-commerce potrafi wyglądać na „działający”, nawet gdy w tle dane są mocno zniekształcone. Raporty się wypełniają, konwersje rosną, ale to, co widzisz w interfejsie, może mieć niewiele wspólnego z rzeczywistością. Największy problem?
GA4 nie ostrzega cię przed typowymi błędami implementacji — wszystko wygląda „OK”, dopóki ktoś nie porówna liczb z systemem płatności czy CRM-em.
Poniżej znajdziesz 5 konkretnych błędów w śledzeniu e-commerce w GA4, których Google ci nie pokaże żadnym czerwonym alertem.
Do każdego dołączone jest praktyczne wyjaśnienie i, tam gdzie kluczowe, gotowy kod do wdrożenia (przepisany linijka w linijkę).
Błąd 1: Śledzenie duplikatów zdarzeń zamiast realnych zmian stanu
Klasyczny przypadek: użytkownik aktualizuje ilość produktu w koszyku, a ty za każdym kliknięciem „+” wyzwalasz add_to_cart.
Jeśli ktoś zwiększy ilość z 1 do 5, jeden krok na raz, w GA4 zobaczysz 5 zdarzeń add_to_cart, mimo że faktyczna zmiana dotyczy jednego produktu i jednej pozycji w koszyku.
Skutek:
- zawyżone liczby dodania do koszyka,
- przekłamany lejek zakupowy,
- trudności w ocenie realnego zachowania użytkownika.
Zamiast traktować każdą zmianę ilości jako nowe add_to_cart, lepiej wysłać osobne zdarzenie opisujące aktualizację koszyka, np. cart_quantity_updated z informacją o starej i nowej ilości.
Rozwiązanie: użyj dedykowanego eventu aktualizacji ilości
// Example: Push a custom 'cart_quantity_updated' event to the GTM data layer.
function pushCartQuantityUpdate(productId, productName, oldQuantity, newQuantity) {
// Only push the event if the quantity has actually changed.
if (oldQuantity !== newQuantity) {
dataLayer.push({
event: 'cart_quantity_updated',
ecommerce: {
currency: 'USD', // Use your store currency.
items: [
{
item_id: productId,
item_name: productName,
old_quantity: oldQuantity,
new_quantity: newQuantity,
quantity_difference: newQuantity - oldQuantity,
value: calculateItemValue(productId, newQuantity), // Optional: updated value.
},
],
},
});
}
}
// Example usage:
pushCartQuantityUpdate('SKU12345', 'Wireless Mouse', 1, 3);
// Optional helper function to calculate item value.
function calculateItemValue(productId, quantity) {
// Replace this with logic to fetch item price dynamically.
const itemPrice = 25.0; // Example static price.
return itemPrice * quantity;
}
Dzięki temu:
- widzisz realne zmiany w koszyku,
- nie „pompowane” liczby
add_to_cart, - możesz analizować różnice ilości (
quantity_difference) i ich wpływ na przychód.
Błąd 2: Brak „throttlingu” dla zdarzeń e-commerce
Jedna z najgroźniejszych pułapek: zdarzenie purchase odpala się wielokrotnie. Na przykład:
- użytkownik odświeża stronę podziękowania,
- wraca do niej z e-maila lub zakładki,
- przeglądarka ponownie wywołuje kod pushujący zakup do dataLayer.
W efekcie ta sama transakcja jest raportowana kilka razy, a GA4 pokazuje:
- zawyżone przychody,
- zduplikowane zakupy,
- kompletnie rozjechaną analitykę ROAS/ROI.
Rozwiązanie: wprowadź prosty „strażnik” duplikatów po stronie frontu
// A simple in-memory guard to prevent duplicate purchase pushes.
window.__ga4PurchaseGuard = window.__ga4PurchaseGuard || {};
function pushPurchaseToDataLayer(orderData) {
var orderId = orderData && orderData.transaction_id;
// If there's no order ID, we cannot safely de-duplicate.
if (!orderId) {
console.warn('purchase not pushed: missing transaction_id.');
return;
}
// If we've already pushed this order ID, do nothing.
if (window.__ga4PurchaseGuard[orderId]) {
console.info('duplicate purchase prevented for order ' + orderId);
return;
}
// Mark this order as already pushed.
window.__ga4PurchaseGuard[orderId] = true;
// Now push the purchase event to the dataLayer.
dataLayer.push({
event: 'purchase',
ecommerce: {
transaction_id: orderId,
value: orderData.value,
currency: orderData.currency || 'USD',
tax: orderData.tax,
shipping: orderData.shipping,
coupon: orderData.coupon || undefined,
items: orderData.items || []
}
});
}
// Example usage.
pushPurchaseToDataLayer({
transaction_id: 'ORDER-98765',
value: 129.99,
currency: 'USD',
tax: 10.00,
shipping: 5.00,
coupon: 'WELCOME10',
items: [
{
item_id: 'SKU-123',
item_name: 'Wireless Mouse',
price: 29.99,
quantity: 1
},
{
item_id: 'SKU-456',
item_name: 'Laptop Stand',
price: 100.00,
quantity: 1
}
]
});
Dodatkowo możesz wykrywać potencjalne duplikaty w GA4, analizując metrykę Event Count per User:
- niezwykle wysokie wartości dla
purchase,add_to_cartitp. - mogą oznaczać wielokrotne odpalenie tego samego zdarzenia.
Błąd 3: Brak czyszczenia obiektu ecommerce przed wysłaniem nowego zdarzenia
W GA4 e-commerce bardzo łatwo o sytuację, w której „stare” dane w ecommerce mieszają się z nowymi. Jeśli nie wyczyścisz obiektu ecommerce przed pushowaniem kolejnego eventu, do GA4 może polecieć:
- poprzedni produkt + nowy,
- stare wartości + nowe wartości,
- „duchy” produktów, które użytkownik już usunął z koszyka.
Przykład: użytkownik usuwa laptop-x1 i dodaje laptop-y2. Jeżeli nie wyczyścisz dataLayera, w transakcji mogą finalnie pojawić się oba laptopy.
Konieczne minimum: wyczyść ecommerce
GA4 i GTM umożliwiają to jednym, prostym push’em:
dataLayer.push({ 'ecommerce': null }); // Clear previous data.
A tak wygląda poprawny schemat: najpierw reset, potem nowy event:
// Always clear the previous ecommerce object before pushing a new one.
dataLayer.push({ ecommerce: null }); // Resets old ecommerce data.
// Now push your new ecommerce event.
dataLayer.push({
event: 'add_to_cart',
ecommerce: {
currency: 'USD',
value: 49.99,
items: [
{
item_id: 'SKU-123',
item_name: 'Wireless Keyboard',
price: 49.99,
quantity: 1
}
]
}
});
Dzięki temu:
- masz pewność, że każde zdarzenie zawiera tylko aktualne dane,
- nie przenosisz „śmieci” z poprzednich kroków w lejku,
- raporty produktowe i transakcyjne są znacznie bardziej wiarygodne.
Błąd 4: Brak lub niekompletne parametry zdarzeń
W GA4 raporty pełne są wartości (not set) — i to nie dlatego, że „taka jest analityka”, tylko dlatego, że parametry nie zostały poprawnie przesłane. Jeśli w add_to_cart pominiesz np. item_name, w raportach:
- miejsce nazwy produktu zajmie
(not set), - utracisz możliwość analizy na poziomie konkretnych produktów,
- funnel zakupowy stanie się dużo mniej czytelny.
Najczęstsze brakujące parametry w e-commerce to:
item_id,item_name,price,quantity,currency,value.
Rozwiązanie: dopilnuj pełnego zestawu parametrów dla każdego typu eventu
Zanim uznasz wdrożenie za „ukończone”, sprawdź dla każdego zdarzenia e-commerce (np. view_item, add_to_cart, begin_checkout, purchase), czy:
- wysyłasz wszystkie wymagane i rekomendowane parametry,
- parametry są spójne między eventami (np. zawsze to samo
item_iddla tego samego SKU), - wartości liczbowe (
value,price,quantity) są poprawnie typowane i zaokrąglane.
Im mniej (not set) w raportach, tym więcej realnej wartości z analityki.
Błąd 5: Poleganie wyłącznie na domyślnych raportach i eventach GA4
Domyślne eventy GA4 i standardowe raporty e-commerce są tylko punktem wyjścia. Rzadko kiedy w 100% odzwierciedlają twój realny lejek i specyfikę biznesu. Jeśli masz:
- niestandardowe kroki w koszyku,
- konfigurator produktów,
- subskrypcje, upselle, triale,
- rozbudowaną politykę rabatową,
to sama paczka view_item → add_to_cart → begin_checkout → purchase będzie po prostu niewystarczająca.
W efekcie:
- nie widzisz, gdzie faktycznie odpadają użytkownicy,
- tracisz wgląd w kluczowe mikro-konwersje,
- trudniej optymalizować UX i kampanie marketingowe.
Rozwiązanie: dopasuj tracking do swojej ścieżki klienta
W praktyce oznacza to:
- dodanie własnych eventów (np.
configurator_step_completed,add_warranty,apply_installment), - zdefiniowanie niestandardowych raportów i eksploracji w GA4,
- powiązanie eventów z realnymi etapami decyzji użytkownika, a nie tylko z zaleceniami Google.
Im lepiej tracking odzwierciedla rzeczywistą podróż klienta, tym bardziej użyteczne stają się dane.
Podsumowanie
| Błąd | Objaw w GA4 | Skutek biznesowy |
|---|---|---|
| Duplikaty eventów | Nienaturalnie wysokie liczby add_to_cart, purchase | Zawyżony przychód, błędny ROAS |
| Brak throttlingu | Wiele purchase dla jednego zamówienia | Chaos w raportach sprzedaży |
Brak czyszczenia ecommerce | Produkty „duchy” w koszykach/transakcjach | Niewiarygodne dane o produktach |
| Brak parametrów | Wartości (not set) w raportach | Utrata szczegółowości analizy |
| Brak customizacji | Standardowy lejek, brak lokalnych insightów | Niewykorzystany potencjał optymalizacji |