[ ENGINEERING_GUIDE ][ GOOGLE_ADS ][ KONWERSJE ][ MARKETING ][ ANALITYKA ]

Google Ads — śledzenie konwersji na stronie firmowej (kompletny przewodnik 2026)

28 maja 20269 min czytania
Autor: DevStudio.itStudio Web & AI

Tag Google, akcje konwersji, zdarzenia gtag i diagnostyka „niekompletna konfiguracja” — krok po kroku dla firm usługowych na Next.js.

READ_TIME: 9 MIN_COMPLEXITY: MED_
STAMP: VERIFIED_BY_DS_

TL;DR

Masz tag Google na stronie, a kampania w Google Ads nadal pokazuje „konfiguracja niekompletna”? W 90% przypadków problem nie leży w „braku kodu”, tylko w rozjazie trzech warstw: tag globalny AW-, akcja konwersji w panelu Ads (z etykietą send_to) oraz zdarzenie wysłane dopiero po sukcesie formularza (HTTP 200). Na produkcyjnej stronie Next.js 15 warto rozdzielić GA4 (afterInteractive) od tagów Ads (lazyOnload) — inaczej albo tracisz leady w analityce, albo psujesz LCP. Poniżej: jak to ustawić w panelu, co wysyłać z kodu i jak testować Tag Assistantem.

Dla kogo to jest

  • Firm usługowych z kampanią na lead (formularz kontaktowy, chatbot)
  • Właścicieli stron na Next.js / React, gdzie marketing dodał już jeden lub więcej kontenerów AW-
  • Osób widzących ostrzeżenie w diagnostyce kampanii mimo zielonego tagu w podglądzie strony
  • Zespołów łączących GA4 z Google Ads bez importu konwersji z Analytics

Fraza (SEO)

google ads śledzenie konwersji, tag google konwersje, konfiguracja konwersji google ads, gtag send_to AW, conversion_event_submit_lead_form, niekompletna konfiguracja google ads

Dlaczego sam tag AW- nie wystarczy

Google Ads rozróżnia podstawę śledzenia (tag globalny na każdej podstronie) i akcję konwersji (definicja celu biznesowego). Tag gtag/js?id=AW-XXXXXXXX + gtag('config', 'AW-XXXXXXXX') mówi Google: „ten ruch należy do tego konta reklamowego”. To nie oznacza jeszcze, że system wie, które kliknięcia „Wyślij” to wartościowe leady.

Element Co robi Czy wystarczy dla Smart Bidding?
Tag AW-... w layout Łączy sesję z kontem Ads Nie
Akcja konwersji w panelu Definiuje cel i etykietę Tak — po pierwszych hitach
gtag('event', ...) po sukcesie formularza Wysyła sygnał konwersji Tak — musi trafić w tę akcję

Kampanie z maksymalizacją konwersji lub docelowym CPA potrzebują zarejestrowanych konwersji przypiętych do celu kampanii. Dopóki panel pokazuje „Brak danych” lub „Szkic”, algorytm optymalizuje ruch jak przy kliknięciach — stąd wrażenie, że „reklama działa, ale leadów nie ma w raporcie”.

Architektura tagów na stronie Next.js 15 (przykład produkcyjny)

W nowoczesnym projekcie firmowym (np. strona software house) spotkasz wiele identyfikatorów naraz — to normalne przy migracji konta Ads lub wielu kampaniach historycznych.

GA4 — wcześnie, żeby nie gubić zdarzeń formularza

Google Analytics 4 (G-3HT7CZTN7P w tym projekcie) ładuje się ze strategią afterInteractive w layout.tsx. Komentarz w kodzie jest jednoznaczny: przy lazyOnload użytkownik często wysyła formularz zanim gtag będzie gotowy — wtedy generate_lead nie trafia do GA4, mimo że lead trafił do CRM.

<Script
  src={`https://www.googletagmanager.com/gtag/js?id=${GA4_MEASUREMENT_ID}`}
  strategy="afterInteractive"
/>

To świadomy kompromis wydajność vs. jakość danych: kluczowe zdarzenia biznesowe (lead) muszą być niezawodne.

Trzy kontenery Ads ładują się lazyOnload:

  • AW-17557280025
  • AW-17769880693
  • AW-18151506857

Każdy ma własny gtag/js i gtag('config', 'AW-...'). Dzięki temu skrypt reklamowy nie blokuje pierwszego renderu (LCP), ale nadal jest dostępny przed typowym czasem wypełnienia formularza — o ile użytkownik nie wysyła leada w pierwszych 2–3 sekundach od wejścia (rzadkie na stronie usługowej).

Nie usuwaj starych tagów AW-, gdy dodajesz nowy kontener. Historyczne konwersje, raporty atrybucji i stare kampanie mogą być na poprzednim ID. Dodaj nowy config, utwórz nową akcję konwersji i przypnij do niej nową kampanię.

Co wysyłać po udanym formularzu

Konwersję licz dopiero po potwierdzeniu serwera (response.ok), nie na onClick przycisku „Wyślij”. Inaczej Ads i GA4 zawyżą wyniki o porzucone wysyłki i błędy walidacji.

W tym projekcie ten sam wzorzec jest w formularzu kontaktowym (page.tsx) i chatbocie (Chatbot.tsx):

1. Zdarzenie GA4 — generate_lead

gtag('event', 'generate_lead', {
  send_to: 'G-3HT7CZTN7P', // stała GA4_MEASUREMENT_ID w kodzie
  form_type: 'contact_form', // lub 'chatbot_form'
  locale: 'pl',
  project_type: '...',
});

send_to z ID pomiaru GA4 wymusza trafienie do właściwej usługi Analytics (osobny stream ≠ automatyczny import do Ads).

2. Zdarzenie Google Ads — conversion_event_submit_lead_form

gtag('event', 'conversion_event_submit_lead_form', {
  event_callback: goThanks,      // np. redirect na /dziekujemy
  event_timeout: 2000,
  form_type: 'contact_form',
  project_type: '...',
  budget: '...',
});

event_callback + event_timeout: 2000 dają Tagowi czas wysłać hit przed nawigacją — bez tego przeglądarka często przerywa request konwersji. W formularzu kontaktowym jest też fallback setTimeout(goThanks, 2200) na wypadek braku callbacku.

3. Klasyczna konwersja z send_to: 'AW-xxx/etykieta'

Jeśli w panelu Ads utworzysz akcję typu „Strona internetowa” z identyfikatorem konwersji, Google poda format:

AW-123456789/AbCdEfGhIjKlMnOpQr

Wtedy alternatywnie (lub dodatkowo) wyślij:

gtag('event', 'conversion', {
  send_to: 'AW-123456789/AbCdEfGhIjKlMnOpQr',
  value: 1.0,
  currency: 'PLN',
});

Nazwa zdarzenia conversion_event_submit_lead_form musi dokładnie odpowiadać konfiguracji w koncie (zdarzenie zdefiniowane w Ads). Rozjazd nazwy = zero konwersji w raporcie kampanii, mimo że Tag Assistant coś „miga”.

Konfiguracja w Google Ads — krok po kroku

Utworzenie akcji konwersji

  1. Narzędzia i ustawienia → Konwersje → Nowa akcja konwersji.
  2. Źródło: Strona internetowa (lub import z GA4 — osobna ścieżka).
  3. Kategoria: Wysłanie formularza kontaktowego lub zdarzenie niestandardowe zgodne z kodem.
  4. Skopiuj ID konwersji (AW-.../label) lub instrukcję zdarzenia.
  5. Status: Aktywna (nie „Szkic”).

Powiązanie z kampanią

W ustawieniach kampanii: Cele → Konwersje — zaznacz tę samą akcję, która dostaje hity z www. Jeśli kampania celuje AW-17769880693, a send_to lub domyślny kontener wskazuje AW-17557280025, zobaczysz ruch w jednym koncie, a optymalizacja w drugim — klasyczny powód „niekompletnej konfiguracji”.

Opóźnienie 24–48 godzin

Po pierwszym teście na produkcji status w liście konwersji często zmienia się z „Brak ostatniej aktywności” dopiero po 24–48 h. Nie restartuj kampanii po jednym teście; sprawdź Ostatnia aktywność następnego dnia.

„Konfiguracja niekompletna” — najczęstsze przyczyny

  1. Tylko tag globalny — brak akcji konwersji lub brak zdarzenia po submit.
  2. Kampania startowała przed pierwszą konwersją — Google czeka na dane do uczenia algorytmu.
  3. Cel kampanii ≠ akcja odbierająca zdarzenia — inne AW- lub inna etykieta.
  4. Test na localhost / preview — Ads oczekuje domeny zgodnej z reklamami (produkcja).
  5. GA4 widzi generate_lead, Ads nie — to osobne systemy; bez send_to do AW- lub importu konwersji dane nie przepłyną.
  6. Adblock / Brave / Firefox ETP — u Ciebie test „nie działa”, u klientów tak; testuj incognito bez rozszerzeń na produkcyjnej domenie.
  7. lazyOnload + bardzo szybki submit — rzadko, ale możliwe; wtedy rozważ afterInteractive dla jednego głównego kontenera kampanii lub opóźnienie redirectu (jak event_timeout).

Testowanie — 5–15 minut, które oszczędzają tygodnie

Tag Assistant (Chrome)

  1. Zainstaluj Tag Assistant Companion.
  2. Wejdź na produkcyjną stronę (ta sama domena co w reklamach).
  3. Wyślij testowy formularz z unikalnym emailem (test+ads2026@twojadomena.pl).
  4. W podglądzie sprawdź: GA4generate_lead; Adsconversion lub conversion_event_submit_lead_form.
  5. W Google Ads → Konwersje — czy pojawił się hit (czasem z opóźnieniem).

Podgląd w czasie rzeczywistym (GA4)

W Raporty → Realtime szukaj zdarzenia generate_lead z parametrem form_type. Jeśli tu jest, a Ads milczy — problem leży w warstwie AW-, nie w formularzu.

Checklist przed uruchomieniem budżetu

  • Tag AW- na wszystkich wersjach językowych (/pl, /en, …)
  • Jedna kanoniczna ścieżka wysyłki konwersji (form + chatbot → ten sam event Ads)
  • Akcja konwersji Aktywna i przypięta do kampanii
  • Redirect na thank-you po event_callback lub z buforem 2 s
  • Brak fałszywych konwersji na klik „Wyślij”

Wydajność vs. kompletność danych

Na stronie firmowej typowy układ to:

  • GA4 afterInteractive — nie tracisz leadów w raportach marketingu i CRM-attribution.
  • Ads lazyOnload — chronisz LCP i Performance score (ważne też dla jakości landing page w Ads).

Jeśli diagnostyka Ads wymaga wcześniejszego załadowania głównego AW-, rozważ afterInteractive tylko dla kontenera powiązanego z aktywną kampanią, pozostawiając pozostałe AW- jako lazy — nie wszystkie trzy muszą konkurować o ten sam slot w <head>.

FAQ

Czy muszę usuwać stary tag AW-, gdy dodam nowy?

Nie, jeśli na starym ID wiszą historyczne konwersje i raporty. Dodaj nowy gtag('config'), utwórz nową akcję konwersji i przypnij nową kampanię do nowego celu. Stare tagi możesz wygasić dopiero po migracji raportów i wygaśnięciu starych kampanii.

Ile tagów AW- na jednej stronie to za dużo?

2–3 bywa akceptowalne przy migracji konta. Każdy ładuje osobny skrypt — pilnuj lazyOnload, jednego miejsca wysyłki konwersji przy formularzu i nie duplikuj tego samego conversion trzy razy (zawyżenie). Lepiej jeden hit na submit niż trzy „na wszelki wypadek”.

Dlaczego GA4 widzi generate_lead, a Google Ads nie?

GA4 i Ads to osobne produkty. Zdarzenie z send_to: G-... trafia do Analytics. Ads wymaga send_to: AW-.../label, zdarzenia zdefiniowanego w koncie lub importu konwersji z GA4 (z opóźnieniem i innymi regułami atrybucji). Sam wspólny gtag w dataLayer nie wystarczy bez poprawnej konfiguracji celu.

Czy conversion_event_submit_lead_form zastępuje klasyczne conversion?

To zależy od tego, jak utworzyłaś/eś akcję w panelu. Jeśli Ads podał zdarzenie niestandardowe — używaj dokładnie tej nazwy. Jeśli podał identyfikator AW-xxx/yyy — używaj gtag('event', 'conversion', { send_to: '...' }). W praktyce często stosuje się oba: GA4 dla analityki, Ads dla optymalizacji kampanii.

Czy test na Vercel Preview URL zadziała?

Zwykle nie dla pełnej diagnostyki Ads, jeśli reklamy kierują na domenę produkcyjną. Preview może mieć inne cookies, inny robots i inny ruch. Testuj finalną domenę z kampanii.

Import konwersji z GA4 — kiedy ma sens

Google Ads pozwala importować zdarzenia z GA4 jako konwersje. To wygodne, gdy marketing „żyje” w Analytics, a developer wysyła tylko generate_lead z send_to: G-.... Wady:

  • Opóźnienie i inne reguły atrybucji niż natywny tag AW-
  • Trudniejsza diagnostyka „czy hit dotarł” w jednym miejscu
  • Ryzyko, że filtr GA4 wykluczy część ruchu (np. cookie consent)

Dla kampanii z twardym CPA i krótkim horyzontem uczenia algorytmu lepiej trzymać bezpośredni hit do Ads (conversion lub zdarzenie z panelu) oraz GA4 równolegle — tak jak w opisanym projekcie. Import z GA4 traktuj jako backup raportowy, nie jako jedyny sygnał optymalizacji.

Jeśli baner cookies blokuje gtag przed zgodą marketingową, Ads może pokazywać „tag zainstalowany”, ale konwersje modelowane lub zerowe do czasu zgody. Upewnij się, że:

  • Tag ładuje się zgodnie z polityką (np. Consent Mode v2),
  • Test konwersji robisz po akceptacji kategorii marketingowych w banerze,
  • W dokumentacji wewnętrznej jest zapis: „lead w CRM” ≠ „konwersja w Ads” przy odmowie cookies.

Wielojęzyczność (/pl, /en, /de)

Każda wersja językowa musi mieć ten sam zestaw tagów w layoucie wspólnym lub locale layout. Formularz w page.tsx i chatbot wysyłają zdarzenia z parametrem locale — w raportach Ads/GA4 filtruj po nim, żeby nie mieszać kampanii PL z ruchem DE. Jeśli osobne konta Ads per kraj, send_to musi wskazywać właściwy AW- dla tej kampanii.

Podsumowanie

Śledzenie konwersji Google Ads na stronie Next.js to układanka: tag globalny AW-, akcja w panelu, zdarzenie po sukcesie API formularza, spójny send_to i cierpliwość 24–48 h na pierwsze dane. Rozdzielenie GA4 (afterInteractive) i Ads (lazyOnload) to dojrzały kompromis między Core Web Vitals a niezgubionymi leadami. Zanim zwiększysz budżet, potwierdź konwersję Tag Assistantem na produkcji — nie na localhost. Przy wielu kontenerach AW- — nie usuwaj starych bez migracji celów kampanii.

Chcesz wdrożyć śledzenie u siebie?

O autorze

Budujemy szybkie strony WWW, aplikacje web/mobile, chatboty AI i hosting — z naciskiem na SEO i konwersję.

Przydatne linki

Od teorii do produkcji — Branchly, hosting, opieka i realizacje.

PODOBA CI SIĘ NASZA ARCHITEKTURA MYŚLENIA? ZBUDUJMY COŚ RAZEM.

[ ROZPOCZNIJ_KONFIGURACJĘ_PROJEKTU ]