Přeskočit na obsah

GA4 + Meta CAPI deduplikace: co se ti rozbije a jak to spravit

Pixel + CAPI běží paralelně, deduplikace se má dít přes event_id. V praxi 30 % deploymentů má někde bug. Tady jsou 5 nejčastějších a jak je opravit.

6 min · Středně pokročilý · 09.05.2026

Server-side CAPI je výborná věc, ale když se deduplikace s pixelem rozbije, máte v Ads Manageru o 40–80 % víc konverzí, než reálně tečlo na účet. Pět nejčastějších bugů, které vidíme v Care auditu.

1. event_id se nepřenáší z webu na server

Klasický bug: GTM web container generuje event_id = uuid() v dataLayeru, ale server-side request ho neobsahuje (neprošlo přes payload). Meta dedupluje jen pokud má v obou událostech stejné event_id — chybějící event_id = každá konverze se počítá 2×.

Fix: v GTM web → Meta Pixel tag → Advanced → Event ID → vložit {{Event - Event ID}}. V GTM server → Meta CAPI tag → Event ID → stejná proměnná z incoming requestu.

2. event_time se liší o víc než 5 minut

Meta dedupluje jen pokud event_time klient-side a server-side jsou v okně 5 minut. Pokud server-side běží v cron jobu (Stripe webhook s delay), může vznikat až 30minutová prodleva.

Fix: server-side event_time = původní client-side timestamp z dataLayeru, ne time.time() v server-side handleru.

3. Test Event Code v produkci

V Meta Test Events tabu si vytvoříte test code (TEST12345), zapomenete ho odebrat z server-side configu, deploy do produkce. Všechna produkční konverzy končí v Test Events místo v Live — nikdy se nedostanou do Ads atribuce.

Fix: Test Event Code má být env variable, ne hardcoded. V production nastavit prázdné. DataNostro dashboard má separátní pole „Test Event Code" které je oddělené od produkčního nastavení.

4. Hashing email/telefon nesprávně

Meta CAPI chce em = sha256(lowercase(trim(email))). Časté chyby:

  • Hashe zachovaná interpunkce nebo whitespace (např. „[email protected]" → různý hash než „[email protected]")
  • Telefon bez E.164 formátu (musí být +420..., ne 123456789)
  • Externí ID v plain textu (Meta dělá hash sama, ale server-side ho posílá hashované — double hashing rozbije match)

Fix: normalizace předtím, než se cokoli odešle. DataNostro to dělá automaticky podle Meta CAPI specifikace.

5. Pixel pošle, server-side ne (a opačně)

Server-side požadavek selže (timeout, network error), pixel projde — Meta dostane jen 1 hit místo 2. Meta to neumí rozpoznat jako problém, prostě méně dat.

Fix: v DataNostro debug konzoli vidíte status každého server-side hitu. Pokud máte vyšší než 2% error rate na Meta CAPI, něco nesedí (typicky Access Token expired nebo IP blocked Meta-em).

Jak to debugovat

Meta Events Manager → Test Events → posílá pixel + CAPI. Pokud vidíte „Deduplikováno" zelený štítek, je to OK. Pokud vidíte dva oddělené eventy se stejným typem, nesedí event_id.

DataNostro Debug Events ukazuje payload obou cest s diff highlightem.

Zpět na Tracking