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_cart itp.
  • 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_id dla 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_itemadd_to_cartbegin_checkoutpurchase 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łądObjaw w GA4Skutek biznesowy
Duplikaty eventówNienaturalnie wysokie liczby add_to_cart, purchaseZawyżony przychód, błędny ROAS
Brak throttlinguWiele purchase dla jednego zamówieniaChaos w raportach sprzedaży
Brak czyszczenia ecommerceProdukty „duchy” w koszykach/transakcjachNiewiarygodne dane o produktach
Brak parametrówWartości (not set) w raportachUtrata szczegółowości analizy
Brak customizacjiStandardowy lejek, brak lokalnych insightówNiewykorzystany potencjał optymalizacji

Podobne wpisy