Il cookie _fbc è un cookie first-party che salva il click ID di Meta, cioè l’fbclid aggiunto al tuo URL quando qualcuno clicca un annuncio, nel formato fb.<subdomainIndex>.<creationTime>.<fbclid>. Il Meta Pixel lo scrive quando un visitatore arriva con ?fbclid= nell’URL, e il tuo server può costruire lo stesso valore da solo. Il suo gemello _fbp identifica il browser.
Entrambi i valori finiscono nella Conversions API, senza hash, come user_data.fbc e user_data.fbp. Contano più di quanto sembri: l’articolo del centro assistenza di Meta sull’Event Match Quality classifica l’ID clic come identificatore a priorità alta, accanto all’email, e l’ID browser a priorità media. Se perdi l’fbclid, il tuo Lead perde il collegamento più diretto con il click sull’annuncio.
Cosa sono i cookie _fbc e _fbp
La documentazione per sviluppatori di Meta su ClickID e i parametri fbp e fbc li definisce entrambi. La durata viene dalla policy sui cookie di Meta.
_fbc | _fbp | |
|---|---|---|
| Cosa contiene | il click ID di Meta (fbclid) | un ID casuale del browser |
| Chi lo imposta | il Meta Pixel, quando l’URL contiene un fbclid; oppure il tuo server | il Meta Pixel, quando usa cookie first-party e non ne esiste già uno |
| Serve un click su un annuncio | sì | no |
| Formato | fb.<subdomainIndex>.<creationTime>.<fbclid> | fb.<subdomainIndex>.<creationTime>.<randomNumber> |
| Esempio | fb.1.1793787151204.IwAR2F4-dbP0l7Mn1IawQQGCINEz7PYXQvwjNwB_qa2ofrHyiLjcbCRxTDMgk | fb.1.1793787151880.1684203391 |
| Durata nella policy sui cookie di Meta | 90 giorni | 90 giorni |
| Campo della Conversions API | user_data.fbc | user_data.fbp |
L’fbclid dell’esempio è quello che Meta usa nella sua documentazione. Cosa identifica l’fbclid, e perché non può essere la tua unica chiave di attribuzione, è spiegato nella voce di glossario sull’fbclid.
Il formato del cookie _fbc, campo per campo
Dividi l’esempio sui punti:
| Parte | Esempio | Significato |
|---|---|---|
| version | fb | sempre fb |
| subdomainIndex | 1 | il dominio su cui è definito il cookie: com = 0, example.com = 1, www.example.com = 2. Usa 1 quando generi il valore su un server senza salvare un cookie |
| creationTime | 1793787151204 | tempo Unix in millisecondi in cui il cookie è stato salvato, qui il 4 novembre 2026, 10:12:31 UTC |
| fbclid | IwAR2F4-dbP0…TDMgk | l’fbclid dell’URL della landing page, invariato |
Due regole di Meta su cui si inciampa spesso. Il click ID distingue maiuscole e minuscole: Meta chiede di non applicare nessuna modifica prima di usarlo, nemmeno il passaggio a minuscolo o maiuscolo. E in un cookie salvato, l’fbclid è la stringa dopo l’ultimo punto. Meta aggiunge un’avvertenza: i valori formati con la sua libreria Parameter Builder hanno un’appendice in più alla fine.
Per scomporre un valore reale, o fare il percorso inverso, decodifica un valore _fbc o costruiscilo da un URL con il parser di fbclid.
_fbp ha la stessa struttura, con un numero casuale al posto del click ID. Il pixel genera quel numero per rendere unico ogni _fbp, quindi identifica un browser e non un click. Meta dice anche che entrambi i valori possono cambiare nel corso di più sessioni del browser e consiglia di aggiornarli con l’ultimo valore disponibile.
Come costruire fbc quando manca il cookie _fbc
Il cookie può mancare per tanti motivi ordinari: nessun pixel sulla landing page, un pixel bloccato dal browser o da un’estensione, un visitatore che invia il form prima che il pixel si carichi. Meta documenta la soluzione: puoi comunque inviare fbc con un evento della Conversions API, purché ci sia un fbclid nell’URL della richiesta corrente.
- Leggi
fbcliddall’URL della landing page nella richiesta che la genera. Non fare trim, non convertirlo in minuscolo, non ricodificarlo. - Formattalo come
fb.1.<millisecondi>.<fbclid>. Se non salvi un cookie_fbc, Meta dice di usare 1 come subdomain index e, come creation time, il momento in cui hai visto l’fbclidper la prima volta, cioè adesso. - Conservalo. Meta offre due opzioni: salvare il valore formattato nel tuo backend, oppure impostare tu stesso
_fbccome cookie HTTP nella risposta, con scadenza a 90 giorni. Se imposti il cookie, fallo solo quando non ne esiste uno o quando l’fbclidnell’URL è diverso da quello nel cookie, e fai corrispondere il subdomain index al dominio su cui lo imposti. - Invialo con ogni evento di quel visitatore, a partire dal Lead. Meta consiglia di inviare
fbccon ogni evento della Conversions API.
In codice, l’opzione backend si presenta così (saveClick sta per il punto in cui salvi il click):
// Nella richiesta che genera la landing page
const url = new URL(req.url, `https://${req.headers.host}`);
const fbclid = url.searchParams.get("fbclid"); // distingue maiuscole e minuscole: lascialo com'è
if (fbclid) {
const fbc = `fb.1.${Date.now()}.${fbclid}`; // 1 e millisecondi: la regola di Meta lato server
await saveClick({ clickId, fbclid, fbc });
}
Quando un visitatore torna da un secondo annuncio, il nuovo fbclid sostituisce il vecchio: Meta chiede il valore più recente, che tu lo tenga in un cookie o nel database. Costruire il valore lato server non cambia i tuoi obblighi sul consenso, cambia solo il punto in cui il valore viene calcolato.
DropCPL registra l’fbclid insieme al click, lato server, sullo stesso dominio che serve la tua landing page, e invia l’fbc corrispondente con l’evento Lead. Il valore non dipende mai da un cookie scritto da JavaScript. Inizia gratis →
Quanto durano i cookie _fbc e _fbp
La policy sui cookie di Meta dà a entrambi una durata di 90 giorni, e Meta consiglia gli stessi 90 giorni se imposti _fbc tu stesso. Questo è quello che chiede Meta. Su Safari è il browser a decidere quanto ne ottieni, in base a come è stato impostato il cookie.
Il motivo per cui Safari accorcia i cookie JavaScript
Il Meta Pixel è uno script, quindi i cookie che scrive sono cookie JavaScript, e l’Intelligent Tracking Prevention di Safari è severa con quelli. La documentazione di WebKit sulla tracking prevention elenca due regole:
- ITP cancella tutti i cookie creati in JavaScript, insieme agli altri spazi di archiviazione scrivibili da script, dopo 7 giorni senza interazione dell’utente con il sito.
- Quando ITP rileva la link decoration, cioè click ID aggiunti all’URL e letti da uno script sulla landing page, limita a 24 ore i cookie creati in JavaScript su quella landing page.
Un click su un annuncio che arriva con ?fbclid= e un pixel che lo copia in _fbc sono esattamente lo schema descritto dalla seconda regola.
Il vantaggio di un cookie impostato dal server
Entrambe le regole riguardano i cookie creati in JavaScript. Un cookie che il tuo server imposta con un header Set-Cookie non rientra, e la tabella di WebKit non indica nessun limite quando non c’è cloaking. Il cloaking è l’eccezione: ITP limita a 7 giorni qualsiasi cookie impostato nella risposta HTTP quando la richiesta passa per un CNAME cloaking di terze parti o per un cloaking tramite indirizzo IP di terze parti. Per il controllo sugli IP, WebKit al momento considera due indirizzi come parti diverse quando uno è IPv4 e l’altro IPv6, o quando condividono meno di metà dei bit.
Quindi «impostalo dal server» aiuta solo se il server è davvero tuo. Il caso più pulito è il cookie che arriva nella stessa risposta dell’HTML della landing page, perché allora il server che lo imposta è il sito stesso. È l’idea alla base del tracking first-party, e la storia completa è in tracciare dopo iOS.
| Come viene impostato il cookie | Cosa fa ITP di Safari |
|---|---|
| Scritto da JavaScript (il Meta Pixel, qualsiasi tag) | cancellato dopo 7 giorni senza interazione con il sito; 24 ore quando viene rilevata la link decoration |
Set-Cookie da un server di terze parti mascherato dietro un tuo sottodominio (CNAME o IP) | limitato a 7 giorni |
Set-Cookie nella risposta che genera la landing page | nessun limite ITP |
Quando manca l’fbclid
Safari può anche rimuovere il parametro prima che arrivi a chiunque. La sua Link Tracking Protection elimina, prima della navigazione, un sottoinsieme di parametri di query identificati come usati per il tracciamento cross-site diffuso, granulare a livello di utente o di click. È attiva nella navigazione privata, e nella navigazione normale per gli utenti che attivano Advanced Tracking and Fingerprinting Protection per tutta la navigazione (dal post di WebKit Private Browsing 2.0). Apple non pubblica l’elenco, ma un ID per click come fbclid è esattamente ciò che descrive.
In navigazione privata gli script di terze parti ricevono anche l’URL senza query string, quindi un pixel caricato dal dominio di Meta non può leggere fbclid nemmeno quando sopravvive. Il tuo server vede l’URL completo della richiesta. Quando il parametro non c’è più, nessuno può costruire fbc: invia fbp se ce l’hai, più email e telefono con hash, e non inventare un valore.
Come inviare fbc e fbp nella Conversions API
Entrambi vanno in user_data, come stringhe in chiaro. Il riferimento di Meta sui parametri delle informazioni dei clienti li indica come «Do not hash», come l’indirizzo IP e lo user agent, mentre email e telefono devono avere l’hash.
{
"user_data": {
"em": ["10928b45363b7d849e040470c3277657f8177ef5a953a092b4302f149757a02e"],
"fbc": "fb.1.1793787151204.IwAR2F4-dbP0l7Mn1IawQQGCINEz7PYXQvwjNwB_qa2ofrHyiLjcbCRxTDMgk",
"fbp": "fb.1.1793787151880.1684203391",
"client_ip_address": "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
"client_user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
}
}
Il payload completo del Lead, con event_id, è in deduplicazione tra Meta Pixel e CAPI, dove fbp compare anche come una delle chiavi di deduplicazione di riserva di Meta. Come questi valori pesano sul punteggio è spiegato in Event Match Quality per la lead generation.
Gli errori che rompono fbc
- Modificare l’
fbclid. Convertirlo in minuscolo, fare trim o ricodificarlo rompe un valore che distingue maiuscole e minuscole. - Fare l’hash di
fbcofbp. Sono entrambi campi da non sottoporre ad hash. - Secondi invece di millisecondi.
creationTimeè in millisecondi; un timestamp di 10 cifre è il segnale. - Usare l’ora del Lead invece di quella del click. Usa il momento in cui hai visto l’
fbclidper la prima volta, non quello dell’invio del form. - Riscrivere il valore a ogni visita. Impostalo solo se non c’è o se l’
fbclidè cambiato. - Tenere un click vecchio al posto di uno nuovo. Vince l’
fbclidpiù recente. - Inventare
fbcper visite senzafbclid. Non c’è un click ID da inviare, quindi non inviare niente. - Un redirect che perde la query string. Se un passaggio prima della landing page perde i parametri, l’
fbclidnon arriva mai al tuo server: per questo il dominio di tracking dovrebbe servire direttamente la landing page.