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..., ne123456789) - 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.