TrackParity

HomeGuides › fbc and fbp Are Missing — Why Your EMQ Stays Low (and the Fix)

fbc and fbp Are Missing — Why Your EMQ Stays Low (and the Fix)

Independent, evidence-based guidance for Shopify & DTC operators — grounded in primary Google, Meta & Shopify docs and specialist analyses, with sources listed at the end.

← All guides

If your Meta Event Match Quality is stuck in the 4–6 band and you’ve already added email and phone, the next place to look is almost always _fbc and _fbp. These two parameters are quiet but powerful match signals — and on Shopify they go missing more often than store owners realize.

What fbc and fbp actually are

  • _fbp (browser ID). The Meta Pixel drops this first-party cookie on every visitor the first time it loads. Format: fb.1.<timestamp>.<random>. It’s a stable identifier for the browser, sent with both Pixel and CAPI events.
  • _fbc (click ID). Set only when a shopper lands from a Meta ad whose URL carries an fbclid parameter. Format: fb.1.<timestamp>.<fbclid>. It ties the event back to the exact ad click — a very strong match signal.

Both are sent alongside hashed email/phone to help Meta decide which person an event belongs to. Missing them means weaker matching, lower EMQ, and worse attribution — the same problem iOS and cookie loss create from the other direction.

Set expectations first: fbc is supposed to be partial

Before you “fix” anything: _fbc will never be near 100%. It only exists for visitors who clicked a Meta ad. Organic, direct, email and non-Meta paid traffic legitimately have no fbc. So a low overall fbc rate isn’t automatically a bug.

The real problem is when ad-clickers lose it. That’s what’s worth fixing.

Why they go missing on Shopify

CauseWhich one it hitsWhat happens
ITP / Safari cookie caps_fbp (and _fbc)JS-set cookies expire in ~7 days (sometimes 24h); returning shoppers show up without them
Pixel loads too late_fbpThe event fires before the pixel set the cookie, so nothing is attached
fbclid not captured/persisted_fbcAd-clicker lands, but the id is never read from the URL and stored, so checkout has no _fbc
CAPI-only, browser values not forwardedbothServer event is sent without the fbp/fbc the browser had — a very common server-side gap
Ad blocker blocks the pixel_fbpCookie never set at all
Domain/subdomain mismatchbothCookie set on one host isn’t readable on the checkout host

The fix, in order of payoff

  1. Load the Pixel early, and send both parameters with CAPI. Your Conversions API events must include the fbp and fbc your browser captured. In a properly wired Pixel + CAPI setup, the browser passes fbp/fbc to the server, and the server includes them in the matching payload. If you only send server events without these, you’re leaving match quality on the table.

  2. Capture and persist fbclid yourself. When a shopper arrives with ?fbclid=..., read it, build the fb.1.<timestamp>.<fbclid> value, and store it (cookie or storage) so it survives to checkout — even if the native cookie is later capped. Many server-side templates and apps do this for you; verify yours actually does.

  3. Set the cookies server-side (first-party). A cookie written by your server in an HTTP response survives ITP far better than one written by JavaScript. This is a core reason server-side tracking lifts EMQ: it extends _fbp/_fbc lifetime and makes them harder to block.

  4. Keep everything on one domain. Make sure the pixel and your checkout run under the same first-party domain so the cookies are in scope end-to-end.

How to verify

  • In Events Manager → Test Events, place a test order and inspect the Purchase event: confirm fbp and (for an ad-click test) fbc appear in the parameters.
  • In Events Manager → your event → Event Match Quality, check the per-parameter breakdown — Meta shows coverage for fbc, fbp, email, phone and the rest. Chase the parameters with low coverage that you can control.
  • Full method: how to raise EMQ, parameter by parameter.

Want a coverage read on your match parameters without digging through Events Manager? The free Tracking-Health Mini-Audit flags weak EMQ signals and the fastest fixes in ~10 minutes.

FAQ

What are _fbc and _fbp? _fbp is the browser-pixel cookie set on every visitor; _fbc is the click cookie set only when someone arrives from a Meta ad with fbclid. Both are match signals sent with events.

Why is _fbc always empty? It only exists for ad-clickers. Non-Meta traffic never has one — but ad-clickers losing it (unpersisted fbclid) is a real, fixable problem.

Do they improve EMQ? Yes — after email and phone, sending fbc/fbp consistently through CAPI is one of the quickest EMQ wins.

Why does _fbp vanish on Safari? ITP caps JS-set cookie lifetimes; setting the cookie server-side as first-party extends it.

Sources

Before you go — is your tracking gap normal, or a real bug?

Get the free Tracking-Health Mini-Audit: drop in your Shopify, GA4 & Meta numbers, get a red/yellow/green score in ~10 minutes, plus your top 3 fixes.

We'll email a confirmation link first (GDPR), then send the worksheet — one click away.

No spam. Unsubscribe anytime. We never sell your data. By subscribing you agree to our privacy policy.