Śledzenie e-commerce w GA4 przez GTM od zera do pełnego raportu
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ć:
- view_item - użytkownik ogląda stronę produktu. Potrzebujesz tego, żeby wiedzieć, które produkty generują zainteresowanie, a które są tylko ozdobą katalogu.
- add_to_cart - produkt trafia do koszyka. To punkt, w którym zainteresowanie zmienia się w intencję zakupową. Porównujesz to z view_item i masz współczynnik konwersji produktu.
- begin_checkout - użytkownik rozpoczyna proces płatności. Różnica między add_to_cart a begin_checkout mówi Ci, ilu klientów porzuca koszyk przed finalizacją.
- purchase - transakcja zakończona sukcesem. To zdarzenie niesie ze sobą revenue, transaction_id i listę kupionych produktów. Jest najważniejsze - od niego zależy, czy GA4 pokazuje prawdziwy przychód.
- refund - zwrot. Jeśli Twój sklep ma zwroty (a prawie każdy ma), bez tego zdarzenia raporty GA4 z czasem stają się coraz mniej dokładne.
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:
- Nowy tag: GA4 Event, wybierz swój Measurement ID.
- Nazwa zdarzenia: purchase (dokładnie tak - małymi literami, to nie jest Twój wymysł, tylko nazwa zdefiniowana przez GA4).
- Trigger: Custom Event, nazwa zdarzenia: purchase. Bez dodatkowych warunków - GTM ma reagować na każde zdarzenie purchase w DataLayer.
- 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:
- W panelu GA4 idź do Admin → Zdarzenia.
- Znajdź purchase na liście (pojawia się po pierwszym odpaleniu tagu).
- 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:
- 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".
- 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.
- 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:
- W GA4 przejdź do Raporty → Monetyzacja → Zakupy e-commerce. Powinieneś zobaczyć revenue, liczbę transakcji i średnią wartość zamówienia.
- 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.
- Sprawdź raport E-commerce purchases → Item name. Jeśli lista jest pusta mimo że purchase działa, wracasz do błędu nr 3.
- 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:
- Dodaj zdarzenie view_cart, jeśli Twój sklep ma osobną stronę koszyka. Pozwala to mierzyć, ilu użytkowników klika „przejdź do koszyka" po dodaniu produktu.
- Skonfiguruj listy produktów (item_list_name) - dzięki temu dowiesz się, czy produkty z listy polecanych sprzedają się lepiej niż z wyników wyszukiwania.
- Podepnij dane do Google Ads przez połączenie kont - GA4 przekaże dane o transakcjach do Ads, co pozwoli na optymalizację kampanii pod kątem rzeczywistej sprzedaży, a nie kliknięć.
- Eksportuj dane do BigQuery, jeśli robisz powyżej 500 transakcji miesięcznie. Standardowe raporty GA4 mają limity próbkowania, a BigQuery daje Ci surowe dane bez ograniczeń.
North Digital konfiguruje śledzenie e-commerce dla polskich sklepów - odezwij się, sprawdzimy Twój setup za darmo.