ROAS w panelu Google Ads wygląda zwykle 1.5-2× lepiej, niż jest naprawdę. Trzy główne powody: zdublowane eventy (purchase odpalany 2× przy odświeżeniu strony), brak deduplikacji między pikselem a CAPI, naiwna atrybucja (ostatnie kliknięcie = wszystko, mimo że klient miał 5 dotknięć przed zakupem). Jak budujemy wiarygodny pomiar Google Ads w naszej praktyce — server-side, atrybucja per kanał, dashboard pod biznes, nie pod „CTR rośnie".
Trzy źródła zafałszowania ROAS
1. Zdublowane eventy purchase
Konwersja zakupu odpalana błędnie: na każdym refreshu strony „dziękujemy", na każdym powrocie z PayU, przy odświeżeniu koszyka po zamówieniu. Wynik: jeden zakup liczony 2-5×. W panelu Google Ads ROAS rośnie, w księgach firmy stoi.
To dokładnie sytuacja, którą zdiagnozowaliśmy w sklepie huka.com.pl — konwersja zakupu odpalała się na każdej stronie i z wartością zerową, dodatkowo „Wyświetlenie strony" było ustawione jako konwersja podstawowa, więc Smart Bidding trenowany był na 20 000 odsłon zamiast 90 realnych zakupów. Pełen audyt + naprawa opisaliśmy w osobnym case study.
Naprawa: flagowanie w bazie danych zakończonego zamówienia (meta _capi_purchase_sent w bazie WooCommerce dla danego order_id) — purchase wysyłany tylko raz, niezależnie od liczby refreshy. Dodatkowo dataLayer z transaction_id + warunkiem w GTM („wyślij tylko gdy transaction_id nieobecny w cookie sesyjnej").
2. Brak deduplikacji między pikselem a CAPI
Server-side tracking (Conversions API) wysyła purchase z serwera. Piksel po stronie przeglądarki wysyła go też. Bez wspólnego event_id Google liczy oba jako dwie konwersje. ROAS w raporcie 2× zawyżony — co przekłada się na decyzje skalujące budżet w oparciu o fałszywą metrykę.
Naprawa: generowanie wspólnego event_id po stronie serwera (np. pur_2525_662a3f8b1e4c97) w momencie rejestracji zamówienia, przekazanie go zarówno do piksela (przez dataLayer i parametr eventID), jak i do CAPI (pole event_id). Google dedupliuje na podstawie identycznego ID, niezależnie od kanału. To samo dotyczy Meta Conversions API — opisaliśmy to dokładnie w case study wdrożenia analityki e-commerce dla hurtowni narzędzi kosmetycznych, gdzie wszystkie cztery zdarzenia (ViewContent, AddToCart, InitiateCheckout, Purchase) miały dedykowany event_id generowany w PHP.
3. Naiwna atrybucja last-click
Klient przyszedł z organic → 3 dni później wrócił z PMax → kupił. Last-click przypisuje całość zakupu do PMax. Realnie: organic zasiało zakup, PMax tylko zamknął. Bez wieloźródłowej atrybucji Google Ads wygląda 2× silniej niż jest.
Konkretny przykład z naszej praktyki: w sklepach, gdzie prowadzimy zarówno SEO, jak i Google Ads, regularnie widzimy, że klient miał 3-5 dotknięć przed konwersją (organic blog → organic kategoria → PMax retargeting → bezpośrednie wejście brand → zakup). Last-click przypisuje 100% PMaxowi, choć ten ostatni krok kosztował kilka groszy CPC, a organic budowało zaufanie przez tygodnie. Decyzje skalowania budżetu PMax oparte na last-click wycinają finansowanie SEO, bo „SEO nie konwertuje" — co prowadzi do utraty fundamentu, na którym PMax w ogóle ma kogo retargetować.
Naprawa: model atrybucji data-driven (DDA) w Google Ads (wymaga 300+ konwersji w 30 dniach na koncie) + cross-channel attribution w GA4 z modelem position-based dla mniejszych kont. Po przejściu na DDA ROAS „rzeczywisty" zwykle wychodzi 30-50% niższy niż w last-click — co brzmi źle w raporcie, ale jest jedynym sposobem na sensowne decyzje budżetowe. Dla branż z długimi ścieżkami (B2B, drogie produkty) różnica bywa większa.
Konwersje serwerowe (Conversions API) — must-have, nie opcja
Bez server-side trackingu tracisz 30-50% danych o konwersjach przez:
- Adblockery (15-30% ruchu, w zależności od branży),
- Apple ITP (Intelligent Tracking Prevention) — Safari iOS,
- Tryb prywatny / incognito,
- Disable JavaScript (rzadko, ale jest).
Server-side: PHP/Node wysyła event bezpośrednio do API Google (z hashami emaili klientów dla Enhanced Conversions). Dane są kompletne, ROAS bardziej wiarygodny, algorytm Smart Bidding lepiej trenuje.
Atrybucja i okna konwersji — co realnie skalować
Domyślne okno konwersji Google Ads to 30 dni od kliknięcia, 1 dzień od wyświetlenia. Dla większości e-commerce sensowne, dla niektórych branż (B2B, drogie produkty) za krótkie.
Co dostosowujemy:
- B2B / wysokie ceny — okno 60-90 dni kliknięcie, 7-30 dni wyświetlenie,
- Pellet, opał — okno sezonowe; klient sprawdza w kwietniu, kupuje w sierpniu,
- Beauty, fashion — okno krótsze (7-14 dni), bo decyzja zakupowa szybka.
Atrybucja: data-driven (jeśli masz wolumen) lub linear/position-based (jeśli nie). Last-click to model „dla leniwych" — nie używamy.


