Sari la conținutul principal
Înapoi la Blog
27 mai 2026, de Émile Ré GDPR & conformitate

Cum să configurați PostHog: GDPR, CCPA și legile globale privind confidențialitatea

Două modalități curate de a conecta PostHog într-un site care respectă GDPR, CCPA și restul supei alfabetice a legii privind confidențialitatea, fără a vă pierde analiza.

Doriți să puneți PostHog pe site-ul dvs. Echipa dvs. juridică a menționat GDPR. Liderul dvs. de vânzări din SUA tocmai a aflat despre CCPA. Echipa dvs. de asistență a întrebat despre acel lucru LGPD în Brazilia. Acum vă uitați la o setare "mod fără cookie-uri" și vă întrebați dacă trebuie să aruncați întreaga stivă de analiză.

Există două modalități curate de a face acest lucru, iar alegerea dvs. depinde de o singură întrebare: vă pasă de ceva dincolo de numărarea vizitatorilor unici și a vizualizărilor paginilor?

Acest ghid vă duce prin ambele, cu cantitatea minimă de cod, butoanele de configurare care contează de fapt și biturile conștiente de reglementare pe care platforma le gestionează pentru dvs., astfel încât să nu trebuie să le faceți.

TL;DR

  • PostHog cookieless mode elimină poarta de consimțământ în jurul lui PostHog însuși – dar pierdeți identificarea(), redarea sesiunii, sondaje, steaguri persistente de caracteristici și îmbogățirea geoIP.

  • Dacă aveți nevoie de oricare dintre acesteBannerul cookie al platformei alege modul corect (opt-in pentru GDPR/ UKGDPR/ ePrivacy / LGPD / FADP / POPIA / PIPL / PIPA / DPDP / PDPL, opt-out pentru CCPA / CPRA / PIPEDA / LFPDPPP / APPI) pe vizitator în funcție de țara lor, astfel încât să nu scrieți un tabel de țară în baza de cod.

  • Existing consent always wins asupra regulamentului implicit – dacă vizitatorul a acceptat deja sau a respins la o vizită anterioară, această decizie este onorată. strictly necessary (există pentru a asigura conformitatea) și, prin urmare, este permis să fie stabilit fără consimțământ.

  • Nu inițiați niciodată PostHog - sau nu setați niciun cookie non-esențial - înainte ca banner-ul să se fi rezolvat (1) modul de reglementare / consimțământ aplicabil și (2) consimțământul existent al vizitatorului. așteptați evenimentul gata de platformă. Inițializarea prea devreme fie aruncă un cookie pe un vizitator opt-in fără consimțământ (în afara etapei cu cerința de consimțământ prealabil a GDPR), fie aprinde o pagină de $ pe care nu o puteți aminti pentru un vizitator opt-out care a respins deja o vizită anterioară.

  • Don't forget the PostHog project setting: chiar și cu modul cookie-less_mode activat în SDK, trebuie să activați Cookieless server hash mode În secțiunea Setări proiect → Web Analytics, în caz contrar, numărul de utilizatori unici nu va fi calculat pentru vizitatorii respinși / anonimi.

  • Custom events that carry user data trebuie să fie gated pe posthog.has_opted_in_capturing() (sau un ajutor de verificare a consimțământului - acoperit mai jos) - nu aveți încredere în SDK pentru a șterge PII pentru dvs.

Forma problemei

PostHog-js, în mod implicit, aruncă un cookie de primă parte și scrie la localStorage, astfel încât acesta să poată oferi fiecărui vizitator o identitate distinctivă stabilă. În conformitate cu Directiva ePrivacy a GDPR, care contează ca accesarea echipamentelor terminale și necesită consimțământul prealabil. În conformitate cu CCPA/CPRA nu necesită consimțământul prealabil, dar trebuie să oferiți o opțiune de renunțare.

Există două căi de ieșire din acest labirint:

  1. Don't store anything. PostHog în sine nu mai declanșează o cerință de consimțământ - dar totuși aveți nevoie de un banner pentru restul paginii (fonturi, încorporări, widget-uri de suport, urmărire a erorilor, etichete de marketing), deci nu citiți acest lucru ca "nu este nevoie de banner".

  2. depozitare, dar numai cu acordul corespunzător. Rulați PostHog în mod normal acolo unde reglementările o permit (sau unde vizitatorul a fost de acord), și degradați grațios la fără cookie-uri acolo unde nu este.

Alegeți unul pe baza a ceea ce aveți nevoie de fapt de la analiză. În ambele cazuri, banner-ul cookie-ului platformei rămâne pe pagină.

Decide which track you're on

You're on Track 1 (cookieless-only) Dacă tot ce ai nevoie de PostHog este:

  • Pageviews și analize web de bază (referenți, pagini de top, rata de respingere)

  • Custom events that contain no user-level data

  • Top-level conversion funnels measured per-day

You're on Track 2 (consent-aware) Dacă aveți nevoie de oricare dintre:

  • identify() pentru a lega comportamentul unui utilizator cunoscut (înregistrare, autentificare, ID cont)

  • Session replay

  • Surveys

  • Caracteristici de steaguri cu cache (fără tururi suplimentare pe fiecare încărcare a paginii)

  • Călătoriile de utilizator de-a lungul zilei sau de-a lungul dispozitivelor (reținere săptămânală/lunară, atribuire)

  • GeoIP îmbogățirea, detectarea bot, sau web analytics harta lumii

  • Profiluri de persoane care leagă mai multe evenimente de o singură persoană

Dacă ați încercat să revendicați Track 1, dar doriți, de asemenea, redarea sesiunii, nu puteți avea ambele.

In practice, most companies need both — one per surfaceSite-ul de marketing public → Track 1 (vizualizări de pagină agregate, nu sunt necesare date per utilizator). Aplicație web autentificată → Track 2 (veți ști deja cine este utilizatorul și doriți replay, steaguri, retenție). use a separate banner per surface (un banner ID pentru site, altul pentru app): diferite inventaruri de cookie-uri, liste de categorii diferite, traseu de audit mai curat.


Track 1: cookieless-only

Aceasta este setarea minimă de frecare pentru PostHog. SDK-ul nu stochează nimic în browser-ul vizitatorului. Utilizatorii unici sunt numărați de un hash pe partea serverului care se rotește zilnic (team_id, daily_salt, ip_address, user_agent, hostname) – niciodată reversibil, niciodată date personale, iar sarea este ștersă la sfârșitul zilei.

O interpretare greșită comună a documentelor PostHog este că modul fără cookie vă permite să eliminați banner-ul cookie. need banner-ul. banner-ul încă aparține site-ului pentru fiecare alt instrument care stochează ceva - fonturi web, încorporate YouTube / Vimeo, Calendly, Intercom, Sentry, etichete de marketing, pixeli de anunțuri. Tratați Track 1 ca "PostHog nu mai are nevoie de un port de consimțământ", nu ca "nu este nevoie de banner". banner-ul platformei este conștient de reglementare și de categorie, așa că îl păstrați în funcțiune pentru acele alte instrumente și pur și simplu nu porniți PostHog în spatele acestuia.

Pasul 1 – porniți setarea proiectului

În proiectul dvs. PostHog, mergeți la Project Settings → Web Analytics and enable Cookieless server hash modeFără aceasta, hash-ul nu este calculat, iar tablourile dvs. vor afișa zero utilizatori pentru vizitatorii fără cookie. Acesta este singurul motiv cel mai frecvent pentru care oamenii cred că modul fără cookie "nu funcționează".

Step 2 — initialize the SDK

import posthog from "posthog-js";

posthog.init("<YOUR_POSTHOG_KEY>", {
api_host: "https://us.i.posthog.com", // or your reverse proxy
defaults: "2026-01-30",
cookieless_mode: "always",
respect_dnt: true,
});

Capturează vizualizările paginilor și evenimentele ca de obicei:

posthog.capture("checkout_started", {
plan: "pro",
// never include emails, names, IPs, etc. — see "Custom events" below
});

La ce renunţi

Modul fără cookie-uri are limitări reale: nici o identificare(), nici o reluare a sesiunii, nici sondaje, nici cache-uri cu steaguri de caracteristici, nici îmbogățire GeoIP, nici detectare bot, WAU/MAU umflată (rotatia zilnică de sare de hash) și coliziuni ocazionale de hash pe rețelele corporative partajate. their cookieless tracking guide.

Dacă oricare dintre acestea contează pentru produsul dvs., sunteți pe Track 2.


Track 2: consent-aware, with a regulation-smart banner

Partea grea a analizei de conformitate nu este de a scrie codul PostHog – este de a ști ce mod (opt-in vs opt-out) să se aplice pentru care vizitator, și dovedind că ați făcut-o corect în timpul unui audit.

De ce contează bannerul

Bannerul cookie al platformei este regulation-awareDetectează țara vizitatorului din IP-ul său și rezolvă automat modul de consimțământ. Nu scrieți dacă (țară === "FR") {... } oriunde. Geolocation and Regulations pentru cartografierea completă, dar versiunea scurtă este:

Opt-inOpt-out E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail: E-mail
| ----------- | ------------------------------------------------------------------------ | -------------------------------------------------------- |
WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB
|

The banner also detects Global Privacy Control (navigator.globalPrivacyControl) și înregistrează automat o respingere - necesară pentru conformitatea CCPA - fără a afișa bannerul.

Consimțământul existent are întotdeauna prioritate față de standardul de reglementare. Banner-ul reamintește ultima decizie a vizitatorului într-un cookie probo_consent (și cade înapoi la platforma API pentru a returna vizitatorii ale căror cookie-uri au expirat sau care au sosit de pe un alt dispozitiv).

Cookie-ul probo_consent în sine este strictly necessary - singura sa sarcină este de a memora și de a aplica decizia de consimțământ a vizitatorului la încărcăturile ulterioare ale paginii. Cookie-urile necesare sunt scutite de obligația de consimțământ în temeiul articolului 5 alineatul (3) din GDPR/ ePrivacy și de sculpturile echivalente din alte reglementări, astfel încât cookie-ul este întotdeauna setat indiferent de ceea ce a acceptat vizitatorul.

Pe partea serverului, fiecare acțiune este înregistrată cu o captură instantanee a versiunii bannerului, IP anonimizată, agentul utilizatorului și alegerile pe categorii. audit trail Aveți nevoie atunci când un DPA vine să bată.

Cum funcționează integrarea

Înainte de orice cod, o regulă că toate celelalte depind: nu atingeți PostHog - sau setați orice cookie non-esențial - până când două lucruri au fost rezolvate.

  1. Reglementarea aplicabilă și modul de consimțământ, calculate de platforma API din geolocalizarea vizitatorului (opt-in pentru GDPR, opt-out pentru CCPA, etc.).

  2. The visitor's existing consent, citit din cookie-ul probo_consent sau, atunci când cookie-ul este lipsit, preluat de pe platforma API prin ID-ul vizitatorului.

Banerul expune ambele ca un singur semnal: evenimentul DOM gata de platformă, care se aprinde o dată după ce snapshot-ul este calculat. atârnă fiecare inițiere de setare a cookie-ului de acel eveniment - inițializarea riscurilor anterioare de scriere a unui cookie înainte de consimțământ (în afara etapei cu cerința de consimțământ prealabil a GDPR) sau lansarea unei vizualizări $pageview pe care nu o puteți anula pentru un vizitator care a refuzat deja.

Cu această regulă în vigoare, integrarea are două părți:

  1. PostHog inițiază din snapshot-ul actual al consimțământului. Dacă este permisă analiza (opt-out vizitator în mod implicit, sau un opt-in vizitator care a acceptat deja), PostHog se activează cu cookie-uri.

  2. Un abonament la starea de consimțământ reflectă orice opt-in/opt-out viitor apel la posthog.opt_in_capturing() / posthog.opt_out_capturing() – nu este necesară reîncărcarea paginii.

Starea de consimțământ provine de la getConsent(), agnosticul cadru. Consent Manager API Este un singleton pe care îl puteți apela din orice modul pentru a citi starea actuală per categorie (consent.has("analytics"), consent.getAll()) sau pentru a vă abona la schimbări (consent.subscribe(cb)).

Minimum configuration

Aceasta este cea mai mică setare React viabilă. Exemplul complet de lucru cu interfața de utilizare a consimțământului plutitor, panoul de debugare și trei stiluri de bannere diferite trăiește la ZebraByte/the platform/examples/cookie-banner-reactRăspunsul corespunzător al postului este în src/lib/posthog.ts.

// posthog.ts
import posthog from "posthog-js";
import { getConsent } from "@probo/cookie-banner/consent";
import type { BannerConfig } from "@probo/cookie-banner";

let initialized = false;
const ANALYTICS_CATEGORY = "analytics";

export function configurePosthogFromBanner(_config: BannerConfig) {
if (initialized) return;
initialized = true;

const consent = getConsent();
const analyticsAllowed = consent.getAll()[ANALYTICS_CATEGORY] === true;

posthog.init("<YOUR_POSTHOG_KEY>", {
api_host: "https://us.i.posthog.com",
defaults: "2026-01-30",
cookieless_mode: analyticsAllowed ? "on_reject" : "always",
opt_out_capturing_by_default: !analyticsAllowed,
person_profiles: "identified_only",
respect_dnt: true,
});

consent.subscribe((data) => {
if (data[ANALYTICS_CATEGORY]) {
posthog.opt_in_capturing();
} else {
posthog.opt_out_capturing();
}
});
}

Bannerul emite platforma gata odată ce a rezolvat locația vizitatorului și modul de consimțământ:

import { useEffect } from "react";
import { registerCookieBanner } from "@probo/cookie-banner";
import { configurePosthogFromBanner } from "./posthog";

registerCookieBanner();

export function CookieBanner() {
useEffect(() => {
const onReady = (e: Event) => {
const { config } = (e as CustomEvent).detail;
configurePosthogFromBanner(config);
};
document.addEventListener("probo-ready", onReady);
return () => document.removeEventListener("probo-ready", onReady);
}, []);

return (
<probo-cookie-banner
banner-id="YOUR_BANNER_ID"
base-url="https://your-probo-instance.com/api/cookie-banner/v1/"
/>
);
}

Aceasta este regula de comandă de mai sus făcută concret. posthog.init trăiește în interiorul operatorului gata de platformă, deci rulează numai după ce banner-ul a rezolvat reglementarea și consimțământul existent al vizitatorului. opțiunile cookieless_mode și opt_out_capturing_by_default sunt derivate din instantaneu în acel moment - nu din "ce regulament suntem sub" (care ar pierde regula de prioritate pentru vizitatorii care au ales deja), ci din starea actuală de consimțământ.

The PostHog init options worth knowing

Exemplul de mai sus utilizează o mână de opțiuni care afectează în mod semnificativ conformitatea și calitatea analizelor.

default: "2026-01-30"cookieless_mode: "on_reject"cookieless_mode: "always"opt_out_capturing_by_default: true Belt-and-suspenders. Dacă cookieless_mode este "always"person_profiles: "identified_only"respect_dnt: true Honor navigator.doNotTrackapi_host Set this to a first-party subdomain (e.g.https://t.yourdomain.combefore_sendLast chance to scrub PII from event properties before they leave the browser. Strip e-mails, query strings with tokens, anything you can't guarantee won't sneak in.
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
Pins PostHog SDK este setat în mod implicit la o dată cunoscută, astfel încât viitoarele actualizări SDK să nu schimbe în tăcere comportamentul dvs. PostHog recomandă întotdeauna să setați acest lucru.
Când vizitatorul a acceptat analiza, rulați în mod normal; când respinge (sau nu a decis), rulați fără cookie-uri.
Ceea ce folosiți atunci când snapshot-ul spune că analiza este negată la momentul init. garanție tare că nimic nu este scris în browser.
În orice caz, nu sunt trimise evenimente, dar setarea acestui lucru evită cazul de margine în care vizitatorul se întoarce pentru a accepta și PostHog încearcă să umple vizualizarea paginii inițiale.
Nu creați un profil de persoană pentru traficul anonim. Reduce facturarea MTU și se potrivește cu spiritul principiilor de minimizare a datelor din GDPR și CCPA.
Ieftin de setat, fără dezavantaje, iar mai multe legi ale statului american (și viitoarele reguli de confidențialitate ale UE AI Act) tratează semnalele DNT / GPC ca fiind obligatorii.
PostHog) pentru a evita blocarea anunțurilor și Safari ITP. PostHog are un ghid reverse-proxy.
|

Setarea proiectului PostHog (nu treceți peste acest lucru)

Same as Track 1: enable Cookieless server hash mode under Project Settings → Web Analytics Vizitatorii care resping consimțământul se vor întoarce la hash-ul de pe server pentru numărarea utilizatorilor unici.Fără această setare, acești vizitatori sunt invizibili – graficul dvs. „vizitatori unici” scade de fiecare dată când cineva respinge.

Wiring the banner category

În cadrul consolei de platformă, bannerul are o Analytics fie să păstreze slug-ul său ca analitic (corespunzător constantei din exemplu) sau să semneze o altă categorie cu PostHog consent în consola şi utilizaţi slug-ul său în codul dumneavoastră. JavaScript SDK and Consent Manager API Docs pentru referință completă.

Want feature flags?

Dacă aveți nevoie de steaguri de caracteristici PostHog (sau de identificare() în mijlocul sesiunii după o acceptare), păstrați Track 2 în modul cookie-less_mode: "on_reject" pentru fiecare pornire - nu "întotdeauna" atunci când analiza este refuzată la init - și porniți UI până când consimțământul este acordat și utilizatorul este identificat. model complet, __ph_opt_in_out_* ca stocare de consimțământ necesară și un exemplu de lucru: PostHog feature flags behind a cookie banner.


Custom events that touch user data

Aceasta este partea care mușcă echipele timp de șase luni. mașina de excludere a PostHog oprește doar evenimentele pe care SDK le trimite automat. Dacă propriul dvs. cod cheamă posthog.capture("invoice_paid", {e-mail, suma }) pentru un vizitator opt-out, nimic în SDK nu îl va bloca - opt_out_capturing() oprește doar capturile din același apel SDK după ce a fost setat, dar dacă codul dvs. personalizat rulează înainte ca ascultătorul de consimțământ să aprindă, capturați PII fără consimțământ.

Modelul de siguranță este de a introduce fiecare captură care poartă date identificabile pe o verificare explicită a consimțământului:

import posthog from "posthog-js";
import { getConsent } from "@probo/cookie-banner/consent";

export function trackInvoicePaid(amount: number, email: string) {
if (!getConsent().has("analytics")) return;
if (posthog.has_opted_out_capturing()) return;

posthog.capture("invoice_paid", { amount, email });
}

Două controale pentru că protejează împotriva diferitelor moduri de eșec. getConsent().has („analytics”) este sursa adevărului din banner. posthog.has_opted_out_capturing() surprinde cazul în care PostHog însuși a fost optat (de exemplu, de către un vizitator care respectă DNT), dar se întâmplă să fie permisă categoria de analiză a bannerului.

Pentru evenimentele fără date de utilizator – posthog.capture („homepage_cta_clicked”) fără proprietăți – puteți sări peste verificare; modul fără cookie-uri le va număra prin intermediul hash-ului de pe server pentru vizitatorii care au optat.

Dacă uitați să porniți, nu degradați doar analiza - prelucrați date cu caracter personal fără o bază legală, ceea ce este genul de lucru pe care acțiunile de aplicare a GDPR și CCPA tind să se concentreze.


Putting it together

The two-track view in one decision:

Need identify(), replay, surveys, retention, or feature flag caching?
├─ No → Track 1: cookieless_mode: "always", no PostHog consent gate
└─ Yes → Track 2: cookieless_mode: "on_reject" + consent subscription
(Probo banner stays on the page in both tracks for everything else you load.)

In either case:

  • Enable Cookieless server hash mode in your PostHog project's Web Analytics settings.

  • Always gate captează datele utilizatorului la o verificare a consimțământului.

  • Use defaults: "2026-01-30" to lock SDK behavior.

  • Rulați de la o primă parte api_host pentru a supraviețui blocantelor de anunțuri.

Bannerul cookie al platformei se ocupă de cartografierea regulamentului-mod, detectarea GPC, prioritatea consimțământului existent, blocarea resurselor terțe și pista de audit, astfel încât să nu trebuie să o vedeți. examples/cookie-banner-react Puneți-l în evidență pe platforma dvs.

Dacă nu aveți încă o instanță de platformă, Cookie Banner overview and quickstart ajungeți la un banner publicat în mai puțin de cincisprezece minute.


platforma este platforma de conformitate care livrează, de asemenea, un banner cookie gratuit, fără dependență, cu suport încorporat pentru GDPR, UKGDPR, FADP, CCPA, CPRA, LGPD, PIPEDA, POPIA, PDPA, PIPL, PIPA, APPI, DPDP, LFPDPPP și PDPL. Programează o discuție.


Scris de Émile Ré
Émile Ré scrie despre integrări, engineering workflows și partea tehnică a platformelor de conformitate.
Portret Émile Ré
Primește analize și ghiduri ZebraByte despre cyber security, privacy și compliance.
ZebraByte

Framework-uri gestionate Managed frameworks

Nu găsești framework-ul pe care îl cauți?
Discută cu noi — este posibil să îl putem include în program.
Nu vedeți cadrul pe care îl căutați?
Reach out – este posibil să o susținem deja în program.

SOC 2 Type 1
ISO 27001
ISO 42001
CCPA
GDPR
ISO 27701
HIPAA
FERPA
CASA
SOC 2
Discută cu un expert Discută cu un expert