How _fbp and _fbc work
When the Meta Pixel loads on your site it writes a cookie called _fbp under your own domain. The value is a random browser identifier — not a name, not a Facebook account — generated on your site and stored there. It is what allows a page view and a later purchase from the same browser to be recognised as one visit rather than two strangers.
The second cookie, _fbc, only appears when someone arrives from a Meta ad. The ad link carries a click identifier in the URL, and the pixel copies that value into _fbc so it survives once the parameter has gone from the address bar. One cookie says which browser; the other says which ad click. Both are first-party, which is why they behave far better than the cross-site cookies advertisers used to depend on.
Why _fbp and _fbc matter
They are the two strongest signals Meta has for matching a conversion back to an ad without needing anything personal. When you send events from your server through the Pixel and Conversions API, these cookie values are the parameters that let the browser event and the server event be recognised as the same action rather than counted twice.
Where they are missing, matching quality falls, conversions go unattributed, and the optimisation the campaign is doing gets worse — because the system is learning from a thinner and more biased sample of what actually happened. That effect is quiet. Nothing in Ads Manager announces that a signal is absent; results simply drift.
Where _fbp and _fbc go wrong
The first failure is a server-side setup that forgets to pass them. A developer builds Conversions API events from the order record, sends name and email, and never reads the cookies from the request — so every server event arrives without the two parameters that would have matched it cleanly to the click.
The second is a redirect that strips the click identifier before the pixel can read it. Link shorteners, tracking templates and marketing plugins all do this, and once the parameter is gone from the URL, _fbc is never written at all.
The third is expecting them where they cannot exist. In-app browsers, strict privacy settings and refused consent all mean no cookie, so a share of your traffic will always arrive unidentified. Plan for that gap rather than treating it as a bug to be eliminated.
What to do about it
Click one of your own live ads on a phone, land on the site, and check both cookies in the browser’s storage panel. If _fbc is missing, follow the URL through every redirect until you find the step that removed the click identifier. This is the single most common cause of poor matching I see, and it is usually a plugin nobody remembers installing.
Then confirm your server events actually include both values. In Meta’s Events Manager, the event match quality indicator and the deduplication warnings will tell you whether browser and server events are being joined correctly. Fix the plumbing before you touch bids, budgets or the click identifier settings — no amount of campaign tuning compensates for signals that never arrive.