31 lipca 2026 · 12 min czytania

Śledzenie e-commerce w GA4 przez GTM od zera do pełnego raportu

5 sierpnia 2026 · 12 min czytania

Są dwa rodzaje sklepów internetowych: te, które wiedzą, ile naprawdę zarabiają z każdego kanału, i te, które zgadują. Różnica nie leży w budżecie na narzędzia ani w wielkości zespołu. Leży w tym, czy ktoś poświęcił jeden dzień na porządne skonfigurowanie śledzenia e-commerce w GA4 przez GTM. Ten tekst to właśnie ten dzień - skompresowany do czytania.

Dlaczego to ma znaczenie? Bo standardowa instalacja GA4 przez gtag.js nie daje Ci danych o transakcjach. Widzisz ruch, widzisz odsłony, ale nie wiesz, które kampanie przynoszą sprzedaż, które produkty ludzie dodają do koszyka i porzucają, ani jaka jest prawdziwa wartość klienta z Facebooka vs z Google Ads. Bez pełnego śledzenia e-commerce latasz we mgle.

Co dokładnie będziemy śledzić

GA4 ma wbudowany schemat zdarzeń e-commerce. Nie musisz go wymyślać - Google już to zrobił. Twoim zadaniem jest tylko dostarczyć dane w odpowiednim formacie przez DataLayer i skonfigurować tagi w GTM. Oto zdarzenia, które chcemy mieć:

Większość wdrożeń, które widzieliśmy u polskich e-commerce, zatrzymuje się na purchase - i to często źle skonfigurowanym. Tymczasem pełny lejek (view_item → add_to_cart → begin_checkout → purchase) daje Ci mapę tego, gdzie klienci odpadają. Bez niego nie wiesz, czy problem jest z ceną produktu (odpływ na view_item), z koszykiem (odpływ przed checkoutem), czy z formularzem płatności (odpływ na ostatnim kroku).

Krok 1 - przygotuj DataLayer po stronie sklepu

GTM nie wyczaruje danych z powietrza. Potrzebujesz, żeby Twój sklep (WooCommerce, Shopify, Magento, Presta, cokolwiek) wypychał zdarzenia do DataLayer. W większości platform to kwestia wtyczki lub kilku linijek w szablonie. Oto jak powinien wyglądać push dla strony produktu:

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "view_item",
  ecommerce: {
    items: [{
      item_id: "TSHIRT-RED-L",
      item_name: "Koszulka czerwona rozmiar L",
      price: 79.99,
      item_brand: "NorthWear",
      item_category: "Odzież",
      item_category2: "Koszulki",
      quantity: 1
    }]
  }
});

Kilka rzeczy jest tu kluczowych. Po pierwsze, dataLayer.push({ ecommerce: null }) przed właściwym pushem. GA4 wymaga tego do poprawnego działania - bez tego możesz dostać zduplikowane dane w raportach. Po drugie, używaj item_id jako identyfikatora produktu (nie id, nie sku - GA4 oczekuje dokładnie item_id). Po trzecie, price jako liczba, a nie string z walutą - żadnego "79.99 zł", tylko 79.99.

Dla zdarzenia purchase struktura jest bogatsza:

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "purchase",
  ecommerce: {
    transaction_id: "ORD-20260805-4421",
    value: 219.97,
    tax: 36.66,
    shipping: 15.00,
    currency: "PLN",
    coupon: "LATO15",
    items: [
      {
        item_id: "TSHIRT-RED-L",
        item_name: "Koszulka czerwona rozmiar L",
        price: 79.99,
        quantity: 1
      },
      {
        item_id: "JEANS-BLUE-34",
        item_name: "Jeansy niebieskie 34/32",
        price: 139.98,
        quantity: 1
      }
    ]
  }
});

transaction_id to numer zamówienia z Twojego systemu. Jest krytyczny - GA4 używa go do deduplikacji transakcji. Jeśli wyślesz to samo transaction_id dwa razy, GA4 policzy tylko jedną transakcję. Jeśli wyślesz puste lub losowe - każde odświeżenie strony z podziękowaniem za zakup stworzy nową transakcję w raportach. Nie zgaduj, bierz ID z systemu zamówień.

currency podajesz jako kod ISO - PLN, EUR, USD. Nie "zł", nie "złoty". GA4 ignoruje niepoprawne kody walut i transakcja trafia do raportów bez wartości.

Krok 2 - skonfiguruj tagi w GTM

Mając DataLayer gotowy, przechodzisz do GTM. Dla każdego zdarzenia e-commerce potrzebujesz osobnego tagu GA4 Event. Oto setup dla purchase:

  1. Nowy tag: GA4 Event, wybierz swój Measurement ID.
  2. Nazwa zdarzenia: purchase (dokładnie tak - małymi literami, to nie jest Twój wymysł, tylko nazwa zdefiniowana przez GA4).
  3. Trigger: Custom Event, nazwa zdarzenia: purchase. Bez dodatkowych warunków - GTM ma reagować na każde zdarzenie purchase w DataLayer.
  4. Parametry zdarzenia: tutaj NIE wpisujesz niczego ręcznie. Zamiast tego włącz „Send Ecommerce Data" i wybierz „Data Layer" jako źródło. GTM automatycznie przekazuje cały obiekt ecommerce do GA4.

Powtórz ten sam schemat dla view_item, add_to_cart, begin_checkout i refund. Za każdym razem wybierasz tę samą nazwę zdarzenia co w DataLayer i używasz opcji „Send Ecommerce Data" zamiast ręcznego mapowania parametrów. To eliminuje błędy literówek i zapewnia, że dane są przekazywane w strukturze, którą GA4 rozumie.

Krok 3 - oznacz zdarzenia jako konwersje

W GA4 samo zdarzenie purchase nie staje się automatycznie konwersją. Musisz je oznaczyć ręcznie:

  1. W panelu GA4 idź do Admin → Zdarzenia.
  2. Znajdź purchase na liście (pojawia się po pierwszym odpaleniu tagu).
  3. Przełącz suwak w kolumnie „Oznacz jako konwersję".

To samo możesz zrobić dla begin_checkout, jeśli chcesz mierzyć inicjacje checkoutu jako mikrokonwersje. Nie oznaczaj wszystkiego - zbyt wiele zdarzeń oznaczonych jako konwersje sprawia, że raporty stają się nieczytelne i trudno wyciągnąć z nich sensowne wnioski. Standardowo wystarczy purchase; begin_checkout to dodatek dla zaawansowanych.

Krok 4 - testuj przed publikacją

Większość problemów ze śledzeniem e-commerce bierze się z tego, że ktoś opublikował tagi bez testowania. Nie bądź tą osobą. Masz trzy narzędzia do weryfikacji:

  1. GTM Preview Mode - włącz podgląd kontenera i przejdź przez całą ścieżkę zakupową na swojej stronie. Sprawdź, czy każde zdarzenie (view_item, add_to_cart, begin_checkout, purchase) pojawia się w panelu podglądu z poprawnymi danymi w zakładce „ecommerce".
  2. GA4 DebugView - po odpaleniu GTM Preview, przejdź do GA4 → Admin → DebugView. Zobaczysz wszystkie zdarzenia w czasie rzeczywistym. Kliknij purchase i sprawdź, czy revenue, transaction_id i lista items są poprawne.
  3. Tag Assistant Companion - rozszerzenie do Chrome, które pokazuje, które tagi odpaliły na stronie i jakie dane wysłały. Przydatne, gdy debugujesz problem z konkretnym tagiem.

Testuj na prawdziwym zamówieniu - zrób zakup testowy za 1 zł (większość bramek płatności ma tryb testowy) i przejdź przez cały proces aż do strony z podziękowaniem. Nie testuj na localhost - GA4 potrzebuje prawdziwego URL-a, żeby poprawnie przypisać źródło ruchu.

Najczęstsze błędy - i jak ich uniknąć

Błąd 1: transaction_id jest puste lub generowane losowo

Objaw: w raporcie E-commerce purchases masz kilkukrotnie więcej transakcji niż w systemie zamówień. Przyczyna: każda wizyta na stronie z podziękowaniem tworzy nową transakcję, bo GA4 nie ma jak stwierdzić, że to ta sama. Rozwiązanie: transaction_id musi pochodzić z backendu. Jeśli nie masz do niego dostępu, przechowuj go w sessionStorage po stronie koszyka i przekazuj do DataLayer na stronie potwierdzenia.

Błąd 2: currency jest w złym formacie lub pominięte

Objaw: GA4 pokazuje revenue = 0 mimo że dane w DataLayer wyglądają poprawnie. Przyczyna: GA4 oczekuje kodu ISO 4217 (PLN), a nie symbolu waluty. Jeśli currency jest puste, GA4 domyślnie przyjmuje USD - a ponieważ ceny w PLN są podawane jako liczby, GA4 interpretuje 79.99 jako 79.99 USD i przelicza na PLN po kursie, dostając absurdalne wartości. Rozwiązanie: zawsze ustawiaj currency: "PLN" przy każdym zdarzeniu e-commerce.

Błąd 3: items to pusta tablica przy purchase

Objaw: transakcja jest rejestrowana, ale lista produktów jest pusta. Przyczyna: deweloper zapomniał przekazać tablicy items do DataLayer lub użył innej nazwy pola. Rozwiązanie: w GA4 purchase MUSI zawierać niepustą tablicę items. Bez tego raporty produktowe (E-commerce purchases → Item name) są bezużyteczne.

Błąd 4: zdarzenia e-commerce odpalają się przed consentem

Objaw: dane e-commerce znikają po wprowadzeniu Consent Mode v2. Przyczyna: tagi GA4 Event odpalają się przed uzyskaniem zgody użytkownika, a GA4 odrzuca zdarzenia z danymi e-commerce przy denied consent. Rozwiązanie: skonfiguruj trigger wyzwalający tagi e-commerce dopiero po aktualizacji consentu (Consent Initialization → Consent Update). Tagi e-commerce powinny czekać na analytics_storage: granted.

Jak sprawdzić, czy wszystko działa - po publikacji

Po opublikowaniu kontenera GTM odczekaj 24-48 godzin, żeby dane napłynęły do standardowych raportów. Potem:

  1. W GA4 przejdź do Raporty → Monetyzacja → Zakupy e-commerce. Powinieneś zobaczyć revenue, liczbę transakcji i średnią wartość zamówienia.
  2. Porównaj revenue z GA4 z revenue z systemu zamówień. Różnica do 5% jest akceptowalna (adblocki, consent). Różnica powyżej 10% oznacza, że coś jest źle - najprawdopodobniej transaction_id lub consent.
  3. Sprawdź raport E-commerce purchases → Item name. Jeśli lista jest pusta mimo że purchase działa, wracasz do błędu nr 3.
  4. Przejdź do Eksploracje i zbuduj własny raport: wymiar „Nazwa zdarzenia", metryka „Przychód z e-commerce", rozbity na „Źródło / medium". To najszybszy sposób, żeby zobaczyć, czy dane z poszczególnych kanałów spływają poprawnie.

Jeśli wszystko się zgadza - gratulacje. Właśnie przeszedłeś z poziomu „mam GA4, coś tam liczy" na poziom „wiem dokładnie, które kampanie zarabiają, a które tylko generują ruch".

Co dalej - następny poziom śledzenia e-commerce

Mając podstawową konfigurację, możesz iść w kilku kierunkach. Polecam zacząć od tych:

North Digital konfiguruje śledzenie e-commerce dla polskich sklepów - odezwij się, sprawdzimy Twój setup za darmo.