zylior
← Blog

Atribuicao first-party: segue os visitantes sem cookies de terceiros

Lanças uma campanha, vês 400 visitantes no Google Analytics, 12 inscrições… e és incapaz de dizer quais vêm de que origem. Bem-vindo à atribuição pós-cookies de terceiros, onde 30 a 50 % do teu tráfego se tornou invisível. A boa notícia: não precisas de GA nem de pixels de terceiros. Um pixel servido pelo teu próprio domínio basta para reconstruir a cadeia visita → inscrição → receita, e sobrevive a tudo o que parte os trackers clássicos.

Porque é que as soluções clássicas se desmoronam

Os pixels de terceiros (Meta Pixel, o `gtag.js` da Google, Hotjar…) põem um cookie ou leem um identificador a partir de um domínio diferente do teu. É exatamente o que os navegadores decidiram matar. Três forças convergem e já as estás a sofrer:

O ponto comum destas três ruturas: visam o terceiro. Se o identificador vem do teu domínio e só te serve a ti, a maioria destas regras não se aplica da mesma forma.

O princípio: um pixel first-party + um visitor_id anónimo

A ideia cabe em três peças. Serves um endpoint de recolha no teu próprio domínio (idealmente um subdomínio como `t.tuaapp.com`, não um domínio de tracking externo). Na primeira visita, geras um `visitor_id` aleatório e guarda-lo num cookie first-party, HttpOnly, Secure. Em cada página vista, o navegador devolve esse cookie ao teu servidor, que regista o evento. O detalhe que muda tudo: o cookie é posto por uma resposta HTTP `Set-Cookie` do lado do servidor, não por `document.cookie` em JavaScript. É essa nuance que contorna o limite de 7 dias do ITP — o limite visa os cookies postos em JS, não os postos pelo servidor em first-party. E `HttpOnly` torna-os ilegíveis por qualquer script, logo inexploráveis para roubo via XSS.

# Réponse de ton endpoint /t/collect servi sur t.tonapp.com
HTTP/1.1 204 No Content
Set-Cookie: vid=8f3c1a9e-...; Max-Age=63072000; Path=/;
  Domain=.tonapp.com; HttpOnly; Secure; SameSite=Lax

// pixel.js côté client (~10 lignes) :
// fetch("https://t.tonapp.com/t/collect", {
//   method: "POST", credentials: "include", keepalive: true,
//   headers: { "Content-Type": "application/json" },
//   body: JSON.stringify({ path: location.pathname,
//     ref: document.referrer, utm: location.search, ts: Date.now() }) });

A fusão: do visitor_id anónimo à identidade provada

Enquanto o visitante é anónimo, acumulas eventos ligados a um `visitor_id` opaco. A magia acontece no momento da inscrição: o utilizador prova o seu email (link de confirmação ou OTP), e fazes o stitching — ligas o `visitor_id` do cookie à conta acabada de criar. Nesse instante, toda a história anónima de antes (primeira visita, origem, páginas vistas) liga-se retroativamente a uma identidade real.

  1. No momento do signup, lê o cookie `vid` do lado do servidor no mesmo pedido.
  2. Escreve uma linha `identity(visitor_id, user_id, email_verified_at)` — o email provado, não apenas escrito.
  3. Recola todos os eventos anónimos que levam esse `visitor_id` ao `user_id`. Obténs o percurso completo: Twitter → /pricing → /signup → email confirmado.
  4. Bónus: se o mesmo email se voltar a ligar a partir de outro dispositivo, funde dois `visitor_id` sob um único `user_id`.
NUNCA fundas a partir de um email simplesmente escrito num campo. Espera pela prova (confirmação/OTP). Caso contrário, um visitante que escreve `concorrente@gmail.com` polui a atribuição de uma conta real — e acabaste de introduzir uma falha de enumeração de contas. A prova de email é a fronteira entre anónimo e identificado.

O que ganhas face ao Google Analytics e aos pixels de terceiros

Isto não é uma licença para fazer tracking de tudo sem consentimento. First-party reduz o risco técnico e algumas necessidades de banner consoante a finalidade, mas o RGPD raciocina por finalidade e por jurisprudência (CNPD incluída). Se fazes profiling de marketing, precisas de uma base legal. Mantém o pixel de medição interna separado de qualquer enriquecimento publicitário.

As armadilhas que partem o setup em produção

Começa pequeno: um endpoint, um cookie `Set-Cookie` HttpOnly servido no teu subdomínio, uma tabela `events(visitor_id, path, ref, ts)` e uma tabela `identity(visitor_id, user_id)` preenchida quando o email está provado. Terás numa tarde uma atribuição que sobrevive ao Safari, aos bloqueadores e ao consentimento — e que se liga diretamente ao teu MRR. Quando estiver a funcionar, acrescenta o multi-dispositivo e a contagem das origens. O resto é SQL.

A newsletter

Ao subscreveres aceitas receber a newsletter da Zylior. Cancelamento em 1 clique em cada email.