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.
Naprawa: flagowanie w bazie danych zakończonego zamówienia (meta _capi_purchase_sent) — purchase wysyłany tylko raz, niezależnie od liczby refreshy.
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.
Naprawa: generowanie wspólnego event_id po stronie serwera (np. pur_2525_662a3f8b1e4c97), przekazanie go zarówno do piksela (przez dataLayer), jak i do CAPI. Google dedupliuje na podstawie identycznego ID.
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.
Naprawa: model atrybucji data-driven w Google Ads (wymaga 300+ konwersji w 30 dniach) + cross-channel attribution w GA4. ROAS „rzeczywisty" zwykle 30-50% niższy niż last-click.
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.


