GA4 mierzy zachowanie użytkownika: zdarzenia, sesje, ścieżki zakupowe. Nie zna faktur, korekt, zwrotów, chargebacków ani statusu płatności. Dlatego różnica między raportem purchase revenue a przychodem w panelu sklepu jest normalna, a nie objawem awarii. Ten artykuł pokazuje, gdzie leży granica między analityką a księgowością i jak w ciągu godziny sprawdzić, czy Twoje rozbieżności mieszczą się w normie.

Czym GA4 jest, a czym nie jest: model zdarzeń kontra księgowość

W GA4 nie ma „sprzedaży”. Jest zdarzenie purchase z parametrami value, currency, transaction_id i items. Wszystko inne to pochodne: sesje, użytkownicy, źródła ruchu, ścieżki zakupowe. Kwota, którą widzisz w raporcie Monetization → E-commerce purchases, to liczba przesłana przez frontend sklepu. GA4 jej z niczym nie uzgadnia i nie zweryfikuje — nie ma dostępu do bazy zamówień ani do bramki płatności. To nie usterka, to definicja narzędzia behawioralnego.

Czego GA4 nie zna: faktur i korekt, zwrotów i reklamacji, chargebacków, stawek VAT, kosztu dostawy jako odrębnej pozycji, statusu płatności ani tego, czy zamówienie zostało anulowane trzy dni po złożeniu. Zdarzenie purchase wysłane raz zostaje w raporcie na zawsze.

Przykład. Produkt kosztuje 100 zł netto (123 zł brutto), klient użył rabatu 10% na cały koszyk, dostawa 15 zł. Typowa implementacja wysyła do GA4 value = 110,70 + 15 = 125,70 zł (brutto, z dostawą). W panelu sklepu i w ERP zobaczysz 90 zł netto ze sprzedaży towarów, a dostawę zaksięgowaną odrębnie. Różnica sięga 35% i nie świadczy o błędzie — to dwa różne pojęcia przychodu.

Dlatego ustal, która warstwa jest źródłem prawdy dla konkretnego pytania:

WarstwaCo zawieraŹródło prawdy dla
Analityka (GA4 + GTM)Zdarzenia, sesje, źródła ruchu, ścieżki zakupoweZachowania użytkownika i atrybucji marketingowej
Panel sklepu / baza (PrestaShop, WooCommerce)Status zamówienia, wartość netto i brutto, waluta, stan magazynowyOperacji handlowych i obsługi zamówień
Bramka płatności / ERP / księgowośćFaktyczne wpłaty, faktury, korekty, zwrotyPieniędzy i rozliczeń podatkowych

Dlaczego liczby z GA4 nie zgadzają się z panelem sklepu: 8 najczęstszych przyczyn

Zanim zaczniesz szukać błędu w GA4, sprawdź te osiem miejsc. W praktyce wdrożeń odpowiadają za znakomitą większość rozjazdów między raportem a panelem sklepu.

PrestaShop: gdzie najczęściej gubią się transakcje

W PrestaShopie purchase można wysłać na dwa sposoby: modułem analitycznym dystrybuowanym ze sklepem albo własnym dataLayer w GTM. Różnica nie jest kosmetyczna — dotyczy momentu wysyłki i kompletności danych. Punkt wyjścia do własnej implementacji znajdziesz w dokumentacji deweloperskiej PrestaShop.

WooCommerce: typowe pułapki konfiguracji pomiaru

W PrestaShop pomiar siada zwykle na modułach i kontrolerach. W WooCommerce najczęściej na tym, że dwie wtyczki robią to samo albo żadna nie robi tego, czego potrzebujesz. Zanim zaczniesz porównywać liczby, ustal, kto u Ciebie wysyła zdarzenia.

Wtyczka czy GTM. Oficjalna wtyczka Google Analytics for WooCommerce (dawniej WooCommerce Google Analytics Integration) po wpisaniu Measurement ID sama wysyła view_item, add_to_cart, begin_checkout i purchase. GTM nie wysyła nic sam — to kontener, do którego trafia dataLayer, a tag GA4 zamienia go na event. Wtyczka to szybsze wdrożenie i mniej wiedzy; GTM to kontrola nad parametrami i możliwość wykluczenia np. zamówień B2B. Nie uruchamiaj obu równolegle: podwójny purchase to najczęstszy duplikat w audytach. Dokumentacja WooCommerce opisuje, co robi wtyczka i jak ją skonfigurować.

Czego nie robi żadna z nich: nie zna statusu płatności, nie wycofuje zdarzenia po failed, nie wysyła refundów, nie widzi zamówień dodanych ręcznie z panelu, nie koryguje korekt i chargebacków.

Kiedy ma polecieć purchase. Domyślnie przy wejściu na stronę potwierdzenia. Jeśli bramka przekierowuje poza sklep i klient nie wróci (zamknięta karta, timeout), eventu nie będzie. Przy przelewie tradycyjnym ze statusem pending event poleci, choć pieniędzy jeszcze nie ma, a przy failed też mógł już polecieć. Poprawna konfiguracja: wysyłka przez Measurement Protocol po zmianie statusu na processing lub completed, z pominięciem failed i cancelled.

HPOS. Zamówienia trzymane w tabelach wc_orders i wc_orders_meta, nie w postmeta. Integracje czytające _order_total przez get_post_meta zwracają null — event leci z wartością 0 albo nie leci wcale. Przed włączeniem HPOS sprawdź deklarację zgodności każdej wtyczki pomiarowej.

Testy, kupony, waluty. Zamówienia testowe właściciela i zakupy na 100% rabacie zawyżają raport — filtruj je po adresie e-mail albo wykluczaj wewnętrzne IP. Wartość purchase ma być kwotą faktycznie zapłaconą, po rabacie i po zwrotach częściowych; GTM często bierze subtotal z dataLayer i zawyża o wartość kuponu. Przy kilku walutach GA4 sumuje kwoty bez przeliczania — dodaj wymiar Currency, inaczej PLN i EUR zleją się w jedną bezsensowną liczbę.

Jak rozliczyć GA4 z backendem sklepu: procedura krok po kroku

Procedura jest jedna i zajmuje około godziny. Warunek: porównujesz zamknięty okres, najlepiej pełny miesiąc zakończony minimum trzy dni temu — GA4 dociąga dane z opóźnieniem, a zamówienia zmieniają statusy.

  1. Ujednolić strefę czasową. W GA4: Admin → Ustawienia usługi → Strefa czasowa. Serwer bazy często chodzi na UTC. Jeśli GA4 ma Europe/Warsaw, a baza UTC, ostatnie dwie godziny doby wypadną poza zakres i wygenerują sztuczną różnicę.
  2. Eksport z GA4. Explorations → Freeform. Wymiary: Transaction ID, Date, Currency. Metryki: Event count, Purchase revenue. Filtr: Event name = purchase. Zakres: dokładnie 1.–31. poprzedniego miesiąca. Eksport do CSV.
  3. Eksport z backendu. Zapytanie do tabeli wp_wc_order_stats (istnieje również przy HPOS) o order_id, date_created, status, total_sales, z filtrem status IN ('wc-completed','wc-processing'). Nazwy kolumn sprawdź w swojej wersji WooCommerce.
  4. Dopasowanie po transaction_id. Nie po sumie salda. Uwaga: przy wtyczkach numeracji sekwencyjnej numer zamówienia to nie order_id — upewnij się, że po obu stronach leci ten sam identyfikator. Dopasowanie po dacie i kwocie stosuj tylko jako awaryjne, bo produkt za 49 zł trafi się kilka razy dziennie.
  5. Policz trzy liczby: liczbę transakcji w GA4, liczbę w backendzie, sumę wartości w obu źródłach. Dopiero te trzy liczby razem mówią, gdzie leży problem.

Tolerancja. 3–10% braków w liczbie transakcji w skali miesiąca to norma przy Consent Mode i adblockach. 15–20% i więcej albo różnica systematycznie rosnąca oznacza błąd implementacji. Zgodna liczba transakcji przy innej kwocie to prawie zawsze rabat, wysyłka, podatek lub waluta — nie tracking.

ObjawPrawdopodobna przyczynaCo sprawdzić
Brakuje 5–10% transakcji, różnica stabilnaConsent Mode, adblocki, ITPwskaźnik zgody w CMP; czy event leci z Measurement Protocol
Zgodna liczba, inna kwotarabat, wysyłka, podatek, walutaczy value = kwota po rabacie; wymiar Currency
Duplikaty transakcjiodświeżenie strony potwierdzenia, wtyczka + GTMdwa źródła purchase jednocześnie
Ponad 20% braków, różnica rośniebramka bez powrotu do sklepu, niekompatybilność z HPOSlogi Measurement Protocol, zgodność wtyczek

Od 10 listopada 2024 w Polsce obowiązuje Prawo komunikacji elektronicznej, które zastąpiło art. 173 Prawa telekomunikacyjnego. Zgoda na cookies analityczne i marketingowe nie jest dobrą wolą właściciela sklepu, a Consent Mode v2 to mechanizm, który przekazuje tę zgodę do Google.

Co dzieje się z eventem bez zgody. Gdy analytics_storage = denied, tag GA4 nie zapisuje cookie _ga i nie wysyła identyfikatora użytkownika. Wysyła tzw. cookieless ping: zdarzenie dociera do Google, ale nie pojawia się w standardowych raportach i nie da się go przypisać do użytkownika ani sesji. purchase z takiego pingu nie wejdzie do raportu sprzedaży. Przy ad_storage = denied i ad_user_data = denied Google Ads nie dostaje sygnałów konwersji, a przy ad_personalization = denied nie zbuduje remarketingu.

Modelowanie konwersji. GA4 potrafi oszacować konwersje użytkowników, którzy odmówili — pod warunkiem wystarczającego wolumenu danych i włączonego modelowania w ustawieniach usługi. Odtwarza liczbę konwersji na poziomie zagregowanym. Nie odtwarza ścieżek użytkownika, lejka na poziomie produktu, zdarzeń niestandardowych, retencji, danych demograficznych ani przypisania do konkretnego transaction_id. Nie odzyskasz z niego listy brakujących zamówień.

Skala ucieczki danych. Typowo 20–40% odmów w banerze (silnie zależy od CMP i sposobu prezentacji) plus 5–15% adblocków, więcej w publice technicznej. Efekt: GA4 pokazuje 55–80% transakcji. To nie awaria, to definicja narzędzia.

Dlaczego trend zostaje użyteczny. Jeśli baner i CMP się nie zmieniają, wskaźnik zgody jest w miarę stały, więc porównania tydzień do tygodnia i miesiąc do miesiąca w procentach mają sens. Uwaga: podmiana CMP albo dodanie „akceptuj wszystko” na pierwszym planie podnosi wskaźnik zgody o kilkanaście punktów procentowych i łamie serię — oznacz to w raporcie jako zmianę metodyki.

Praktyka raportowania. W raporcie wewnętrznym podawaj udział kanałów w konwersjach w procentach, konwersję jako konwersje do zakończonych sesji oraz AOV i przychód z panelu sklepu. Z GA4 bierz wyłącznie wskaźniki względne i kierunek trendu. Kwoty w złotych zawsze z systemu, który wystawia dokumenty.

Co GA4 mówi naprawdę: 7 metryk, na których możesz podejmować decyzje

Zamiast pytać „czy GA4 pokazuje prawdę”, zapytaj „na jakie pytanie odpowiada”. Odpowiada na siedem, a każda odpowiedź przekłada się na konkretną decyzję w sklepie.

  1. Lejek zdarzeń: view_item → add_to_cart → begin_checkout → purchase. Przykład z życia: 40 000 sesji, 3 200 wyświetleń karty produktu, 1 200 add_to_cart, 480 begin_checkout, 300 purchase. Jeśli begin_checkout → purchase spada z 62% do 30%, problem jest w płatnościach lub koszcie dostawy, a nie w kampanii Google Ads. Najpierw naprawiasz checkout, potem zwiększasz budżet.
  2. Skuteczność źródeł i kampanii w ujęciu względnym. Konwersja sesji wg source/medium, koszt na sesję i przybliżony ROAS (przychód z GA4 / koszt z platformy reklamowej). „Przybliżony”, bo GA4 nie zna zwrotów ani korekt.
  3. Wyświetlenia produktów (view_item). Produkt z 50 wyświetleniami miesięcznie nie ma problemu z ceną — ma problem z widocznością.
  4. Stosunek add_to_cart do purchase per produkt. 180 dodania do koszyka i 12 zakupów (6,7%) to sygnał ceny, kosztu dostawy albo niedostępności rozmiaru. Porównuj do mediany sklepu, nie do „rynku”.
  5. Nowi vs powracający. Powracający kupują 2–3× częściej. Spadek udziału powracających to zwykle problem z obsługą posprzedażową, nie z reklamą.
  6. Urządzenie. Konwersja mobile 40% niższa niż desktop przy tym samym ruchu = do naprawy formularz, nie kreacja.
  7. Kanał. Ustalasz, gdzie naprawiać lejek: płatna kampania z wysokim begin_checkout i niskim purchase kontra organiczne z niskim add_to_cart.

Gdzie jest granica: każda z tych metryk jest względna i pomiarowa. GA4 nie zna faktur, korekt, zwrotów i chargebacków. W momencie pytania „ile faktycznie zarobiłem na kampanii X” wychodzisz z GA4 i sięgasz do panelu sklepu lub ERP — tam jest prawda finansowa, tu jest prawda behawioralna.

MetrykaCo realnie mówiKiedy idziesz do ERP / panelu sklepu
view_item → add_to_cartAtrakcyjność karty produktu i cenyGdy chcesz znać marżę na produkcie
add_to_cart → begin_checkoutTarcie w koszyku (koszt dostawy, próg darmowej wysyłki)Gdy weryfikujesz realny koszt wysyłki
begin_checkout → purchaseNiezawodność płatności i dostawGdy porównujesz statusy zamówień i płatności
Konwersja wg źródłaJakość ruchu, nie rentownośćGdy liczysz realny zwrot z kampanii
Przybliżony ROASKierunek, nie wynikZawsze przy rozliczeniu budżetu

GA4 zepsute czy źle skonfigurowane: diagnostyka w 30 minut

Zanim ktoś zleci przepisanie implementacji od zera, warto sprawdzić cztery rzeczy w ustalonej kolejności. Całość zajmuje około 30 minut.

  1. 0–5 min: Realtime. Wejdź na sklep w oknie incognito, odwiedź trzy podstrony, sprawdź, czy rośnie liczba aktywnych użytkowników i pojawia się page_view. Brak jakiegokolwiek zdarzenia oznacza problem z tagiem bazowym, consent mode albo blokadą skryptu — nie z e-commerce.
  2. 5–15 min: DebugView. Administracja → DebugView, z włączonym debugowaniem (rozszerzenie Google Analytics Debugger lub parametr debug_mode w GTM). Sprawdź, czy zdarzenia niosą parametry items, value, currency, transaction_id. Zdarzenie bez parametrów to jeszcze nie sukces.
  3. 15–22 min: Tag Assistant. Sprawdź, czy tag konfiguracji GA4 odpala się raz, czy trigger purchase wisi na stronie potwierdzenia zamówienia (a nie na podsumowaniu koszyka) i czy nie masz dwóch tagów purchase — jednego z GTM, drugiego z wtyczki.
  4. 22–30 min: BigQuery. Przy włączonym eksporcie sprawdź w tabeli events_intraday_* liczbę zdarzeń purchase i count distinct transaction_id z ostatnich 24 godzin. To jedyne miejsce z danymi surowymi, bez próbkowania.

Test zakupu od początku: wejście z UTM, dodanie do koszyka, przejście przez płatność, powrót na stronę sklepu. purchase powinien pojawić się w DebugView w kilkadziesiąt sekund (raporty standardowe mają 24–48 h opóźnienia). Sprawdź, czy transaction_id jest unikalny i niepusty — wartość „undefined” albo identyfikator sesji to klasyka. Ustal też, czy value zawiera VAT i dostawę, i czy dokładnie ta sama kwota leci do Google Ads.

Wina sklepu: redirect po płatności na domenę bramki, gdzie nie ma GTM; strona potwierdzenia renderowana po POST; purchase odpalany przy statusie „oczekujące na płatność”. Warto przejrzeć, jak zmieniają się statusy zamówień w dokumentacji WooCommerce — purchase powinien odpowiadać statusowi opłacenia, nie złożenia.

Wina kontenera: brak „Once per event”, dwa tagi purchase, trigger na wszystkich stronach, nieuzupełnione mapowanie pól dataLayer.

ObjawPierwsze sprawdzenieTypowa przyczyna
Zero danych w GA4Realtime w oknie incognitoBrak tagu bazowego, blokada consent
page_view jest, purchase nieDebugView po teście zakupuTrigger na złym URL (koszyk zamiast potwierdzenia)
purchase jest, value = 0Parametry zdarzenia w DebugViewBrak mapowania value i currency w GTM
purchase zdublowanyBigQuery: count vs count distinct transaction_idBrak „Once per event”, odświeżenie strony potwierdzenia
purchase tylko z jednej metody płatnościTest każdej bramki po koleiRedirect poza stronę z kontenerem GTM

Najczęstsze błędy i jak je wykryć

Traktowanie wartości „purchase revenue” z GA4 jako przychodu księgowego i rozliczanie na tej podstawie podatku lub prowizji.

Jak wykryć: Porównaj jedną fakturę z odpowiadającym jej zdarzeniem purchase w GA4 — zobaczysz różnicę w VAT, koszcie dostawy i rabacie na koszyk.

Jak naprawić: Ustal jedną definicję przychodu w GA4 (najczęściej netto, bez dostawy) i zapisz ją w dokumentacji pomiaru. Do rozliczeń używaj panelu sklepu, bazy danych lub ERP — nigdy GA4.

Tag purchase odpalany na stronie potwierdzenia zamówienia, zanim płatność zostanie potwierdzona.

Jak wykryć: Złóż zamówienie z metodą płatności, którą następnie porzucisz (np. przelew tradycyjny, Przelewy24 bez dokończenia). Sprawdź, czy purchase poleciał.

Jak naprawić: Przenieś wysyłkę eventu na moment zmiany statusu na opłacone — przez webhook bramki, status w bazie lub server-side tagging. Zamówienia porzucone przy płatności nie są sprzedażą.

Brak unikalnego transaction_id lub jego nadpisywanie przy każdym wejściu na stronę potwierdzenia.

Jak wykryć: W GA4 w raporcie Ecommerce → Transactions sprawdź liczbę zdarzeń purchase w stosunku do liczby unikalnych identyfikatorów transakcji.

Jak naprawić: Wymuś unikalny identyfikator z bazy sklepu (np. numer zamówienia z prefiksem) i zablokuj ponowną wysyłkę dla tego samego ID. Odświeżenie strony nie może generować drugiego purchase.

Porównywanie liczb z otwartego, bieżącego okresu, w którym dane jeszcze spływają, a zwroty nie zostały zaksięgowane.

Jak wykryć: Zestaw ten sam dzień w GA4 i w panelu sklepu dzień po dniu — rozbieżność rośnie przy najmłodszych datach.

Jak naprawić: Analizuj wyłącznie zamknięte okresy, najlepiej z co najmniej 7-dniowym opóźnieniem na zwroty i korekty. Do bieżącego monitoringu używaj trendów, nie kwot.

Ignorowanie Consent Mode i odrzuconych zgód analitycznych przy porównaniu 1:1 z backendem.

Jak wykryć: Zestaw liczbę sesji z GA4 z liczbą sesji z serwera WWW lub z logów — różnica to w dużej mierze użytkownicy bez zgody i z adblockami.

Jak naprawić: Zmierz udział ruchu bez zgody, a następnie ustal tolerancję dla raportów (często 10–25% w polskim e-commerce). Do decyzji o zgodności szukaj proporcji, nie równości co do złotówki.

Pomiar na własnych, testowych zamówieniach i na ruchu wewnętrznym bez wykluczeń.

Jak wykryć: Sprawdź, czy w ostatnich 30 dniach w GA4 występują zdarzenia purchase z adresów IP lub kont oznaczonych jako firmowe.

Jak naprawić: Dodaj filtr wewnętrznego IP w GA4 i w tagu GTM, oznacz zamówienia testowe w sklepie i wyklucz je z eksportu. Inaczej porównujesz dwie różne populacje.

Lista kontrolna do odklikania

Podsumowanie

GA4 odpowiada na pytanie, jak klient doszedł do zakupu — nie ile firma zarobiła. Rozbieżności z panelem sklepu są wpisane w naturę tego narzędzia: wynikają ze zgód, zwrotów, duplikatów i różnic w definicji przychodu. Zamiast szukać „błędu w GA4”, ustal definicję przychodu, porównuj wyłącznie zamknięte okresy i zestawiaj transakcje po identyfikatorze. Wtedy w ciągu godziny dostaniesz jasną odpowiedź, czy różnica jest w normie, czy wymaga naprawy.

Najczęściej zadawane pytania

Czy GA4 może pokazywać dokładnie ten sam przychód co panel sklepu?

W praktyce nie. GA4 nie zna zwrotów, korekt, chargebacków, VAT-u ani statusu płatności, a część użytkowników nie wyraża zgody na analitykę. Możesz zbliżyć liczby do siebie, ale równość co do złotówki nie jest realnym celem.

Jaka różnica między GA4 a panelem sklepu jest jeszcze normą?

W polskim e-commerce typowy przedział to kilkanaście procent na korzyść backendu, głównie z powodu braku zgód, adblocków i ograniczeń pomiaru w przeglądarkach. Wszystko powyżej 20–25% wymaga diagnozy, bo może oznaczać błąd w tagu lub duplikaty.

Dlaczego GA4 pokazuje więcej sprzedaży niż panel sklepu?

Najczęstsze powody to tag purchase odpalany przed potwierdzeniem płatności, duplikaty przy odświeżeniu strony potwierdzenia oraz zamówienia testowe. Sprawdź, czy każdy purchase ma unikalny transaction_id i czy event leci dopiero po zmianie statusu na opłacone.

Czy mogę rozliczać prowizję agencyjną na podstawie GA4?

Nie powinieneś. GA4 to narzędzie behawioralne — pokazuje, jak użytkownik doszedł do zakupu, a nie ile faktycznie wpłynęło na konto. Do rozliczeń używaj panelu sklepu, bazy danych lub systemu ERP.

Jak sprawdzić, czy problem jest w GA4, czy w sklepie?

Zestaw transakcje z GA4 i z backendu po transaction_id za ten sam zamknięty okres. Jeśli identyfikatorów ubywa po stronie sklepu, problem jest w konfiguracji tagu. Jeśli backend ma transakcje bez pary w GA4, przyczyną jest najczęściej brak zgody lub odcięty pomiar.

Czy włączenie Consent Mode poprawi zgodność raportów?

Consent Mode poprawia modelowanie, ale nie odtwarza danych ze wszystkich odrzuconych zgód. Różnica się zmniejszy, jednak nadal będzie widoczna. To narzędzie do oszacowania skali, nie do wyrównania raportów 1:1.

Jeśli chcesz mieć pewność, że pomiar w Twoim sklepie jest skonfigurowany poprawnie — od tagu purchase po obsługę zgód i wielowalutowości — odezwij się do DropDigital. Zrobimy audyt konfiguracji i pokażemy, gdzie tracisz dane.

Źródła i materiały