Moduł GA4 dla PrestaShop najczęściej mierzy cztery momenty: widok listy i karty produktu (view_item_list, view_item), dodanie do koszyka (add_to_cart), rozpoczęcie checkoutu (begin_checkout) i złożenie zamówienia (purchase). To nie jest cały lejek. Zdarzenia add_shipping_info i add_payment_info, czyli wybór dostawy i wybór płatności, w większości gotowych modułów nie występują — dlatego w Funnel exploration masz dziurę między begin_checkout a purchase i nie widzisz, na którym kroku odpada klient. Poniżej masz mapę zdarzeń, listę typowych luk i procedurę, która w 15 minut pokaże, co realnie wysyła Twój moduł.

Czym jest moduł GA4 dla PrestaShop i jak wstrzykuje pomiar

„Moduł GA4” to w praktyce trzy różne rzeczy, które klienci opisują jedną nazwą. Zanim zaczniesz diagnozować braki w danych, ustal, który wariant masz na sklepie — od tego zależy, gdzie szukać kodu.

Typowy moduł siedzi na czterech hookach: displayHeader (biblioteka gtag.js i konfiguracja), displayFooter (skrypty doczepiane na dole strony, np. śledzenie koszyka), hookDisplayOrderConfirmation (purchase liczony na stronie potwierdzenia) oraz hookActionValidateOrder (purchase po stronie serwera, także przez Measurement Protocol). Jeśli Twoje zdarzenia nie łapią się w żadnym z nich, ktoś dopisał kod w motywie — i aktualizacja szablonu go usunie.

Wymagania: PrestaShop 1.7.x to szablony Smarty (.tpl), 8.x to Twig (.twig) — moduł pisany pod 1.7 nie zawsze zadziała w 8.x bez zmian w szablonie. PHP: 1.7.8+ wymaga 7.4, PrestaShop 8 zaleca 8.1.

W konfiguracji wpisujesz Measurement ID (format G-XXXXXXX), nie Stream ID. Stream ID to liczba widoczna w GA4 → Administracja → Strumienie danych — wklejona w pole modułu nie zadziała i pomiar nie ruszy.

Nazewnictwo hooków i strukturę modułów opisuje dokumentacja dla deweloperów PrestaShop.

Pełna mapa: event GA4 → etap sprzedaży → miejsce w PrestaShop

Poniższa tabela odpowiada wprost na pytanie z tytułu. Trzecia kolumna mówi, gdzie w kodzie szukać zdarzenia — to punkt startowy do weryfikacji w GA4 DebugView.

Trzy zdarzenia wypadają najczęściej: select_item (klik w kafelek produktu z listy), view_promotion (banner czy slider na stronie głównej) i add_payment_info (wybór metody płatności). Gotowe moduły traktują checkout jako jeden krok, więc rozdzielenie dostawy i płatności trzeba dopisać ręcznie.

Zwroty to osobny temat: refund pojawi się tylko wtedy, gdy moduł nasłuchuje hookActionOrderStatusPostUpdate i reaguje na status „Zwrócone”. Domyślnie nikt tego nie robi.

Zdarzenie GA4Etap sprzedażyMiejsce w PrestaShop / hook
view_item_listPrzeglądanie ofertyLista kategorii, wyniki wyszukiwania — displayHeader + JS
select_itemZainteresowanie produktemKlik w kafelek na liście lub w wynikach wyszukiwania
view_itemKarta produktuproduct.tpl / product.twig, skrypt w displayFooter
add_to_cartKoszykhookActionCartSave, AJAX koszyka, przycisk „Do koszyka”
remove_from_cartKoszykStrona /koszyk, akcja usunięcia pozycji
view_cartKoszykStrona /koszyk (CartController)
begin_checkoutStart checkoutuPierwszy krok /zamowienie, displayHeader
add_shipping_infoWybór dostawyKrok dostawy — InPost, DPD, DHL, wybór kuriera
add_payment_infoWybór płatnościKrok płatności — wybór metody, np. Przelewy24, BLIK
purchaseTransakcjahookActionValidateOrder (serwer) lub hookDisplayOrderConfirmation
refundZwrothookActionOrderStatusPostUpdate przy statusie „Zwrócone”

Co realnie mierzy oficjalny moduł, a co jest luką

Po instalacji oficjalnego modułu dostajesz pięć zdarzeń: view_item_list, view_item (z parametrem item_list), add_to_cart, begin_checkout i purchase z tablicą items[]. To poprawny, ale niekompletny zestaw — obejmuje górę lejka i jego koniec, pomijając środek.

Najważniejszy brak to add_shipping_info i add_payment_info. Moduł nie rozdziela kroków checkoutu, więc w GA4 widzisz jedno begin_checkout i po nim purchase. Skutek jest policzalny: jeśli ze 100 rozpoczętych zamówień kończysz 40, nie wiesz, czy przepadło 30 osób na wyborze kuriera, czy 30 na wyborze płatności. W Funnel exploration masz dziurę i nie załatasz jej żadnym segmentem — brakuje danych źródłowych.

Kolejne luki: remove_from_cart (rzadko implementowane), select_item i view_promotion (praktycznie nigdy). Bez nich nie sprawdzisz, które produkty z listy faktycznie przyciągają kliknięcia, ani czy baner na stronie głównej generuje ruch do karty produktu.

Osobno zwroty. Jeśli moduł nie reaguje na zmianę statusu zamówienia, refund nigdy nie trafi do GA4 — raporty przychodu są zawyżone o wartość zwrotów, co przy sklepie z 5–10% zwrotów realnie zniekształca ROI kampanii.

Pułapka wdrożeniowa: gdy purchase leci jednocześnie z hookDisplayOrderConfirmation i z Measurement Protocol, zamówienie policzy się dwa razy. Wybierz jedno źródło.

Zanim dopiszesz brakujące zdarzenia, sprawdź zakres modułu i jego ograniczenia w PrestaShop oraz pozostałe wdrożenia PrestaShop — część modułów da się rozszerzyć konfiguracją, część wymaga własnego kodu.

Element pomiaruOficjalny modułSkutek w raportach
view_item_list / view_itemTak, standardowoMasz dane o przeglądaniu oferty
add_to_cartTakZnasz konwersję z karty produktu do koszyka
begin_checkoutTakWidzisz start checkoutu, ale jako jeden zbiorczy krok
purchase z items[]TakMasz sprzedaż i strukturę zamówień
add_shipping_infoZwykle nieNie wiesz, ilu klientów odpada na wyborze dostawy
add_payment_infoZwykle nieNie wiesz, czy blokuje ich wybór płatności
remove_from_cartRzadkoNie widzisz, co klienci wycofują z koszyka
select_itemRzadkoBrak danych o kliknięciach z listy produktów
view_promotionPraktycznie nigdyPromocje na stronie głównej są niemierzalne
refundNie bez nasłuchu statusuPrzychód zawyżony o wartość zwrotów

Jak w 15 minut sprawdzić, które etapy mierzy Twój moduł

Zamiast czytać opis na marketplace, uruchom trzy testy. Wszystkie zmieszczą się w 15 minut, jeśli masz dostęp do GA4 i do sklepu — najlepiej na kopii stagingowej. Testy rób w jednej sesji i notuj każdy event, który zobaczysz.

Test 1 — DebugView + GA Debugger. W Chrome włącz rozszerzenie Google Analytics Debugger, otwórz sklep i przejdź ścieżkę: lista produktów → karta produktu → koszyk → checkout. Równolegle trzymaj otwarte w GA4: Administracja → DebugView. Powinieneś zobaczyć kolejno view_item_list, view_item, add_to_cart, begin_checkout. Kliknij nazwę zdarzenia, żeby rozwinąć parametry — interesują Cię items[] oraz item_id, item_name, price, quantity.

Test 2 — Realtime z filtrem po nazwie. GA4 → Raporty → Realtime → „Zdarzenia”. Widok pokazuje tylko ostatnie 30 minut, więc testuj punktowo: dodaj produkt do koszyka i sprawdź, czy licznik add_to_cart właśnie się zwiększył. Jeśli event jest w DebugView, a nie ma go w Realtime, sprawdź stan filtrów danych — nowy filtr domyślnie działa w trybie testowym.

Test 3 — zamówienie testowe. Utwórz produkt „Test produkt” i kod rabatowy TEST-INTERNAL. Złóż zamówienie najtańszą metodą płatności i w DebugView kliknij purchase. Sprawdź transaction_id, value, currency oraz pełną tablicę items[]. Brak currency albo value oznacza puste raporty przychodu mimo poprawnie wysłanego zdarzenia.

Higiena danych. W Administracja → Strumienie danych → Ustawienia tagów zdefiniuj IP biura jako internal traffic, a w Administracja → Filtry danych przełącz filtr ruchu wewnętrznego z „Testowanie” na „Aktywne”. Filtr działa dopiero od momentu włączenia — nie usunie niczego wstecz. Zamówienie testowe anuluj w PrestaShop i opisz w komentarzu, żeby nikt nie policzył go w sprzedaży.

Wynik testu to lista zdarzeń, które faktycznie poleciały — porównaj ją z tabelą z kolejnej sekcji. Więcej o konfiguracji modułów GA4 dla PrestaShop zebraliśmy w jednym miejscu.

TestGdzie patrzećCo sprawdzićKryterium zaliczenia
DebugView + GA DebuggerGA4 → Administracja → DebugViewNazwy zdarzeń i parametryview_item_list, view_item, add_to_cart, begin_checkout
RealtimeGA4 → Raporty → Realtime → ZdarzeniaŚwieże zdarzenia z 30 minadd_to_cart rośnie po dodaniu do koszyka
Zamówienie testoweDebugView → purchasetransaction_id, value, currency, items[]Wszystkie pola wypełnione
Filtr ruchu wewnętrznegoAdministracja → Filtry danychStan filtra„Aktywne” przed startem kampanii

Pięć pułapek, które psują pomiar nawet gdy moduł działa

Moduł może wysyłać zdarzenia poprawnie, a raporty i tak kłamią. Poniżej pięć sytuacji, które najczęściej widzimy przy audytach pomiaru w sklepach na PrestaShop.

1. Duplikacja purchase po odświeżeniu strony „Zamówienie przyjęte”. Wejdź na order-confirmation i odśwież ją dwa razy. W DebugView zobaczysz dwa purchase. Jeśli oba mają ten sam transaction_id, GA4 zwykle je zdeduplikuje w raportach. Jeśli transaction_id nie ma wcale — oba wejdą do przychodu i nie dowiesz się o tym z żadnego ostrzeżenia.

2. Płatności przekierowujące (Przelewy24, PayU, tpay). Klient kończy płatność na obcej domenie. Kiedy zamknie kartę albo nie wróci na stronę potwierdzenia, purchase nie poleci. Obejście: zdarzenie wysyłane z webhooka płatności przez Measurement Protocol, z transaction_id i value, plus wersja awaryjna po powrocie do sklepu. Sprawdź, ile zamówień z opłaconym statusem nie ma odpowiadającego purchase w GA4.

3. Brak currency i value oraz niepełne items[]. Objaw: zdarzenia są, a raporty przychodu i „Ecommerce purchases” świecą pustkami. W DebugView kliknij purchase i zweryfikuj, czy na poziomie zdarzenia jest currency i value, a w items[] — item_id, price i quantity dla każdej pozycji.

4. Consent Mode v2. Od marca 2024 brak wdrożonego trybu zgody obniża skuteczność modelowania konwersji u odbiorców w EEA. Efekt praktyczny: rozjazd między GA4 a statystykami PrestaShop sięgający kilkunastu procent — tyle zjada brak zgody, blokery i niedokończone powroty z płatności. Porównuj liczbę zamówień, nie sesje.

5. Zamówienia poza sklepem. B2B, zapytania ofertowe, zamówienia telefoniczne, przelew z odroczonym terminem — klient nie przechodzi checkoutu, więc w GA4 go nie ma. Rozwiązanie: zdarzenie offline przez Measurement Protocol, wysyłane przy zmianie statusu zamówienia w back office.

PułapkaObjaw w raportachJak wykryćCo zrobić
Duplikacja purchasePrzychód wyższy niż w PrestaShopOdśwież order-confirmation w DebugViewWysyłka raz + kontrolna flaga w sesji, deduplikacja po transaction_id
Płatność z przekierowaniemBrak purchase przy opłaconych zamówieniachPorównanie statusów płatności z listą eventówWebhook + Measurement Protocol
Brak currency/value/items[]Puste raporty e-commercePodgląd parametrów purchase w DebugViewUzupełnić parametry po stronie modułu
Consent Mode v2Spadek liczby konwersji i rozjazd z PrestaShopPorównanie liczby zamówień dzień do dniaWdrożenie trybu zgody i modelowanie konwersji
Sprzedaż poza sklepemKampanie wyglądają lepiej niż sprzedażZestawienie zamówień z back office i GA4Event offline z back office

Jak uzupełnić brakujące etapy: własny moduł kontra GTM

Jeśli test z pierwszej sekcji pokazał braki, masz dwie realne drogi. Wybór sprowadza się do tego, kto będzie robił zmiany i jak często.

Wariant GTM. Wstawiasz warstwę dataLayer w szablonach i hookach, a tagi GA4 Event konfigurujesz w kontenerze. 8–16 godzin pracy. Zmiany robisz bez deployu — marketing sam doda parametr albo nowy event. Minusy: zależność od kontenera, dodatkowy JS na stronie i ryzyko podwójnych tagów, gdy ktoś doda event „na zapas”.

Wariant własnego modułu. Wykorzystujesz hookActionCartSave (dodanie do koszyka), hookDisplayOrderConfirmation (purchase) i hookActionOrderStatusPostUpdate (zmiany statusu, w tym zwroty) plus własną walidację danych przed wysyłką. 12–24 godziny. Zero zależności od zewnętrznych wtyczek i subskrypcji, kod zostaje u Ciebie — ale każda zmiana wymaga wdrożenia. Listę hooków znajdziesz w dokumentacji dla deweloperów PrestaShop, a sposób pracy opiszemy w materiale o generatorze modułów PrestaShop.

add_shipping_info i add_payment_info. Najprościej przez nasłuch AJAX-a na stronie zamówienia: zmiana przewoźnika i zmiana metody płatności. PrestaShop odświeża te sekcje asynchronicznie, więc podpinamy się pod samo zdarzenie zmiany, nie pod wyświetlenie strony.

Refundy. Gdy zamówienie przechodzi w status zwrotu, wyślij event refund z transaction_id i wartością zwrotu. Bez tego przychód w GA4 zostaje zawyżony o każdą reklamację.

Kiedy wystarczy darmowy moduł: do ~30 zamówień miesięcznie, jeden kanał sprzedaży, detal, jedna płatność online. Kiedy warto dopłacić: B2B, kilka kanałów, płatności odroczone, zamówienia obsługiwane poza sklepem.

WariantCzas wdrożeniaZmiany po wdrożeniuKiedy wybrać
GTM + dataLayer8–16 hBez deployu, w kontenerzeZespół marketingowy chce samodzielnie dodawać zdarzenia
Własny moduł12–24 hWymagają wdrożenia koduPotrzebna pełna kontrola, brak zewnętrznych zależności
Uzupełnienie add_shipping_info i add_payment_info3–6 hNasłuch AJAX na stronie zamówieniaChcesz widzieć, gdzie klient odpada w checkoutcie
Refundy2–4 hPrzy zmianie statusu na zwrotMasz realne zwroty i chcesz prawdziwy przychód

Jak czytać te etapy w raportach GA4 (i porównać z PrestaShop)

Funnel exploration to jedyne miejsce w GA4, w którym widzisz ścieżkę, a nie sumy zdarzeń. Kroki: Eksploracje → Funnel exploration → Konfiguracja → Steps. W każdym kroku wybierz „Event name” i wpisz kolejno: view_item, add_to_cart, begin_checkout, purchase. Ustaw Funnel type: Closed — wtedy GA4 policzy tylko tych użytkowników, którzy przeszli całą ścieżkę, a nie sumy niezależnych zdarzeń. Time dimension zostaw na 1 dzień; dłuższy okres rozmywa ścieżkę, bo użytkownik wraca po tygodniu z innego urządzenia. Rozbicie włączasz w sekcji „Breakdown”: dodaj „Device category” (mobile vs desktop) albo „Session source/medium”. Uwaga praktyczna: rozbicie na źródła dzieli ruch na małe próbki — wnioski zaczynają się od kilkuset sesji na segment, wcześniej widzisz szum.

Proporcje między krokami to najszybszy sposób znalezienia dziury w lejku:

KrokWskaźnikPunkt odniesieniaCo oznacza odchylenie w dół
view_item → add_to_cartadd_to_cart / view_item8–15%Poniżej 5%: problem z kartą produktu, ceną, kosztem dostawy lub dostępnością
add_to_cart → begin_checkoutbegin_checkout / add_to_cart40–60%Poniżej 30%: koszyk straszy kosztami wysyłki, wymusza konto lub gubi się na mobile
begin_checkout → purchasepurchase / begin_checkout30–50%Poniżej 20%: brakuje add_shipping_info i add_payment_info, brak BLIK, wysyłka zbyt droga

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

Mylenie modułu GA4 z tagiem gtag.js wstawionym w szablon albo z kontenerem GTM wklejonym do motywu. To trzy różne rzeczy i każda daje inny zestaw zdarzeń.

Jak wykryć: Sprawdź źródło strony (Ctrl+U) — jeśli widzisz tylko gtag.js lub kontener GTM, a w back office nie ma pozycji modułu z konfiguracją pomiaru, to nie masz modułu GA4, tylko ręcznie wklejony kod.

Jak naprawić: Zapisz w notatce, który wariant masz: moduł z PrestaShop Addons, GTM czy własny moduł z hookiem displayHeader. Od tego zależy, gdzie dodasz brakujące zdarzenia.

Założenie, że moduł mierzy cały lejek, w tym wybór dostawy i wybór płatności.

Jak wykryć: W GA4 DebugView przejdź checkout do końca. Jeśli po begin_checkout widzisz od razu purchase, nie ma add_shipping_info ani add_payment_info.

Jak naprawić: Dodaj brakujące zdarzenia przez GTM albo rozszerz moduł o hooki na stronie zamówienia i na akcji zapisu wybranej dostawy i płatności. Sam moduł tego za Ciebie nie zrobi.

Zdarzenie purchase bez parametru items[] albo bez value i currency. Wtedy raport Monetyzacja pokazuje przychód, ale nie pokazuje, co klient kupił.

Jak wykryć: Złóż zamówienie testowe i sprawdź w DebugView parametry purchase. Brak items[] widać też po tym, że w raportach sprzedaży nie rozwijają się nazwy produktów.

Jak naprawić: Popraw konfigurację modułu albo nadpisz zdarzenie purchase w GTM, przekazując tablicę items z item_id, item_name, price i quantity oraz value i currency z zamówienia.

Brak obsługi zwrotów. Moduł, który nie nasłuchuje zmiany statusu zamówienia, nigdy nie wyśle zdarzenia refund.

Jak wykryć: Zmień status zamówienia testowego na „Zwrócone” i sprawdź, czy w DebugView pojawia się refund z parametrem transaction_id.

Jak naprawić: Dodaj nasłuchiwanie hooka hookActionOrderStatusPostUpdate i wysyłaj refund dopiero wtedy, gdy status faktycznie oznacza zwrot. Inaczej zdublujesz przychody i zwroty.

Podanie Stream ID tam, gdzie moduł oczekuje Measurement ID (G-XXXXXXX). Dane nie płyną, a autor wdrożenia szuka błędu w kodzie.

Jak wykryć: Sprawdź pole konfiguracyjne modułu i porównaj wartość z tym, co widzisz w Administracji GA4 → Strumienie danych. Identyfikator strumienia ma inną postać niż G-XXXXXXX.

Jak naprawić: Wpisz dokładnie Measurement ID ze strumienia www. Zapisz zmianę i potwierdź w Realtime, że po odświeżeniu strony pojawia się jakiekolwiek zdarzenie.

Testowanie na produkcyjnym ruchu bez wykluczenia własnego IP i bez oznaczenia zdarzeń testowych jako ruchu wewnętrznego.

Jak wykryć: W Realtime widzisz siebie na liście aktywnych użytkowników, a w raportach zaczynają się pojawiać zamówienia, których nikt nie złożył.

Jak naprawić: Wyklucz swoje IP w filtrach danych GA4 albo oznacz ruch jako internal traffic i używaj go wyłącznie do testów. Zamówienia testowe rób z kodem rabatowym, który łatwo rozpoznasz w raportach.

Lista kontrolna do odklikania

Podsumowanie

Moduł GA4 w PrestaShop mierzy zwykle górę lejka i sam zakup, a pomija środek checkoutu oraz zwroty. Bez add_shipping_info i add_payment_info nie ustalisz, czy klienci odpadają na wyborze kuriera, czy na metodzie płatności. Zacznij od 15-minutowego testu w DebugView i porównania wyniku z mapą zdarzeń — dopiero potem zlecaj rozbudowę pomiaru. Zakres prac przy PrestaShop opisujemy na https://dropdigital.pl/prestashop.

Najczęściej zadawane pytania

Które etapy sprzedaży mierzy moduł GA4 dla PrestaShop?

Standardowo: przeglądanie produktów (view_item_list, view_item), dodanie do koszyka (add_to_cart), rozpoczęcie checkoutu (begin_checkout) i zakup (purchase). To pokrywa początek i koniec lejka, ale nie środek. Kroki „wybór dostawy” i „wybór płatności” najczęściej nie są mierzone wcale.

Czy oficjalny moduł GA4 z PrestaShop Addons mierzy cały lejek sprzedaży?

Nie. Zakres modułu zależy od jego wersji i konfiguracji, dlatego trzeba to sprawdzić u siebie, a nie wierzyć opisowi ze sklepu z modułami. Typowo brakuje select_item, remove_from_cart, add_shipping_info, add_payment_info i obsługi zwrotów. Jedynym wiarygodnym testem jest DebugView na Twojej instalacji.

Dlaczego w GA4 nie widzę zdarzeń add_shipping_info i add_payment_info?

Bo moduł nie rozdziela kroków checkoutu na osobne zdarzenia — wysyła tylko begin_checkout, a potem purchase. Aby je dodać, trzeba przechwycić moment wyboru kuriera i metody płatności, np. przez GTM albo własny hook. Bez tego w Funnel exploration masz dziurę i nie wiesz, czy klient odpada na dostawie, czy na płatności.

Skąd mam wiedzieć, czy moduł wysyła purchase z items[], value i currency?

Złóż zamówienie testowe i sprawdź parametry zdarzenia w DebugView. Jeżeli brakuje items[], w raportach sprzedaży nie zobaczysz, co konkretnie kupiono — zostanie sam przychód. Brak value lub currency psuje również porównania przychodów między kanałami.

Czy zwroty (refund) pojawiają się w GA4 automatycznie?

Nie. Zdarzenie refund musi być wysłane w momencie zmiany statusu zamówienia, a nie każdy moduł nasłuchuje takich zmian. Jeśli tego nie ma, w GA4 widzisz przychód brutto bez korekty, co zaniża zaufanie do raportów. Sprawdź to jednym zamówieniem testowym i zmianą statusu na „Zwrócone”.

Czy muszę używać GTM, jeśli mam moduł GA4?

Nie musisz, ale przy brakach w module GTM bywa najszybszą drogą do dodania brakujących zdarzeń i ich parametrów. Warunek jest jeden: musisz zdjąć z modułu te zdarzenia, które przejmuje GTM, żeby nie wysyłać ich podwójnie. Dokumentację hooków znajdziesz w dokumentacji deweloperskiej PrestaShop: https://devdocs.prestashop-project.org/

Jak sprawdzić pomiar, jeśli nie mam dostępu do kodu motywu?

Wystarczy GA4 DebugView albo rozszerzenie do podglądu zdarzeń w przeglądarce i przejście ścieżki zakupowej. Widzisz wtedy nazwy zdarzeń i ich parametry, bez zaglądania do plików. Jeśli lista jest krótsza niż mapa z tabeli w artykule, masz odpowiedź, czego brakuje.

Jeśli po teście widzisz braki w zdarzeniach albo nie chcesz zgadywać, które hooki dopisać — napisz do nas, przejrzymy konfigurację i powiemy, co dokładnie warto uzupełnić.

Źródła i materiały