Umów konsultację

Bezpłatna wycena w 24h

Analityka kampanii Google Ads — jak zmierzyć realny ROAS, a nie ROAS z raportu

Analityka kampanii Google Ads — jak zmierzyć realny ROAS, a nie ROAS z raportu

Narzędzia16 czerwca 202610 min czytania

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.

Max Mazurkiewicz

Max Mazurkiewicz

Founder

POTRZEBUJESZ SPERSONALIZOWANEJ WYCENY?

Chcesz się na coś zdecydować ale od nadmiaru możliwości boli głowa? Skontaktuj się z nami, dobierzemy rozwiązanie do potrzeb Twojej firmy.

Umów się na konsultację

Dashboard pod biznes, nie pod „CTR rośnie"

Standardowe raporty Google Ads pokazują CTR, CPC, impressions. Większość z tego jest mylącym szumem dla właściciela biznesu — to metryki dla operatora kampanii, nie dla podejmującego decyzję o budżecie. Co realnie pokazujemy klientowi w cotygodniowym dashboardzie Looker Studio:

  1. Realny ROAS (po deduplikacji, po dedup pikseli, po data-driven attribution) zestawiony z ROAS z panelu Ads — żeby klient widział, jak duża jest różnica między „raportem" a „rzeczywistością".
  2. Zysk biznesowy — przychód minus marża szacunkowa per kategoria produktu minus koszt Ads. Brak marży = brak zysku, niezależnie od ROAS. Ta jedna kolumna zmienia decyzje budżetowe szybciej niż wszystkie inne razem.
  3. Koszt pozyskania klienta (CAC) i LTV szacunkowy — zysk z klienta przez 12-24 miesiące, nie z jednej transakcji. Dla branż z powtarzalnymi zakupami (kosmetyka, suplementy, akcesoria dla zwierząt) różnica między „ROAS na pierwszej transakcji" a „LTV-based ROAS" potrafi być 3-5×.
  4. Skala vs efektywność per kampania — które kampanie skalują (rosnący budżet, stały ROAS), które są przy suficie (rosnący budżet, spadający ROAS), które wymagają restrukturyzacji (stały budżet, spadający ROAS).
  5. Sezonowość i trend — Y/Y, M/M, nie tylko ostatnie 30 dni. Dla branż sezonowych (pellet, beauty, świąteczne) to kluczowe — porównywanie sierpnia z lutym nie ma sensu.
  6. Top frazy w wyszukiwarce z wyłączeniami branżowymi i brand exclusion — żeby zobaczyć, na czym realnie Search wydaje budżet (zwykle 30% spotów na frazy do dodania jako negatywy).
  7. Konwersje per asset group w PMax — żeby zobaczyć, który segment marży realnie zarabia.
  8. Notatki kampanijne — co zmieniło się w danym tygodniu (wzrost budżetu, zmiana strategii, dodanie kampanii). Bez tego trend wykresów jest niezinterpretowalny dla klienta.

Implementacja per platforma — co realnie inne

Pomiar Google Ads dla sklepu różni się znacznie między platformami. Krótkie zestawienie z naszej praktyki:

  • WooCommerce — pełen dostęp do warstwy serwerowej. Conversions API (Enhanced Conversions) wdrażamy bezpośrednio w functions.php motywu potomnego z hookami woocommerce_thankyou i woocommerce_order_status_completed. Hashowanie SHA-256 emaila i telefonu, IP automatycznie, deduplikacja przez wspólny event_id. Najbardziej precyzyjna platforma z trzech.
  • IdoSell — zamknięta infrastruktura, ograniczony dostęp do warstwy serwerowej. Pomiar konfigurujemy w ramach możliwości platformy + Google Tag (gtag.js) z parametrami Enhanced Conversions. Pełen server-side jak w WooCommerce nie jest możliwy, ale jakość pomiaru w ramach możliwości jest wystarczająca do optymalizacji. Szczegóły: Google Ads dla IdoSell.
  • Shoper — inna integracja z Merchant Center i innym dostępem do event tracking niż w IdoSell. Wymaga dedykowanej konfiguracji per sklep. Szczegóły: Google Ads dla Shoper.
  • Custom sklep na Next.js (np. Giełda Biomasy) — Conversions API jako Route Handler w App Router, bez vendora. Najwięcej kontroli, najszybsza odpowiedź serwera, brak zewnętrznych zależności.

Wnioski

Bez wiarygodnego pomiaru Google Ads to spalanie budżetu w trybie ślepym. Algorytm uczy się na danych, które dostaje — jeśli dajesz mu śmieci, dostajesz śmieci z powrotem. Trzy poprawki, które robimy w pierwszej kolejności na każdym projekcie: (a) deduplikacja eventów, (b) Conversions API, (c) data-driven attribution. Każda z osobna podnosi precyzję pomiaru o 20-40%, razem dają obraz tego, co algorytm Ads realnie widzi.

Pełna oferta śledzenia konwersji: zaawansowane śledzenie konwersji. Case study uporządkowania pomiaru w sklepie WooCommerce: huka.com.pl. Dla sklepów na innych platformach (IdoSell, Shoper) prowadzimy kampanie Google Ads z dopasowaną do platformy warstwą pomiaru — szczegóły na landingu Google Ads dla sklepów internetowych.

Najczęściej zadawane pytania

Standardowo 30-100%. Bez deduplikacji eventów + bez CAPI + przy last-click attribution ROAS w panelu jest typowo 1.5-2× zawyżony. Po naprawie pomiaru (dedup + CAPI + data-driven attribution) ROAS spada na papierze, ale jest wiarygodny — można na nim oprzeć decyzje o skalowaniu.

Tak — Google wymaga 300+ konwersji w ostatnich 30 dniach na model data-driven (na poziomie konta). Poniżej tego progu model nie ma wystarczającej ilości danych. Alternatywy dla mniejszych kont: position-based attribution (40-20-20-20% lub 30-20-20-30%) lub linear attribution. Last-click nie używamy.

Enhanced Conversions to wzbogacenie konwersji o hashowane dane klienta (email, telefon) wysyłane do Google. Pomaga Google łączyć konwersję z konkretnym użytkownikiem (cross-device, cross-session) i poprawia jakość modelu atrybucji. Działa zarówno dla pikseli, jak i CAPI. Wdrożenie: 1-2 dni pracy, efekt: 5-15% wzrost rejestrowanych konwersji.

Nie ma „obowiązku" — ale bez Enhanced Conversions / Conversions API server-side w Google Ads traci się znaczącą część konwersji (15-30%) przez adblockery i Apple ITP. Dla sklepu z budżetem 10 000 zł/mies. na Google Ads brak server-side to realna strata 1500-3000 zł miesięcznie w niezarejestrowanym ROAS.

Max Mazurkiewicz
Max Mazurkiewicz
Founder
Digital marketing expert