Cum măsurăm traficul
Conformitate CNIL Sheet 16 + EDPB Guidelines 2/2023
1. Ce nu folosim
- Niciun cookie de analiză: nici propriu, nici al altcuiva. (Cookie-urile strict necesare, adică sesiunea de login, limba și codul de invitație, sunt listate în politica de confidențialitate.)
- Niciun identificator persistent în localStorage sau IndexedDB pentru a te urmări de la o zi la alta
- Nicio dată trimisă către Google Analytics, Meta Pixel, TikTok, Mixpanel sau orice alt furnizor terț de analiză
- Nicio profilare cross-site: nu există pixel Civia pe alte site-uri
- Adresa IP nu se salvează niciodată în clar, nici în baza de date, nici în loguri
- Niciun fingerprinting (canvas, audio context, enumerare de fonturi)
2. Cum derivăm vizitatorul anonim
La fiecare cerere către /api/analytics, serverul Civia calculează un identificator de vizitator anonim după formula:
visitor_id = sha256(sare_zilnică + host + ip + user_agent).slice(0, 16)
Sarea se schimbă la fiecare 24 de ore și e ștearsă automat din depozitul de contoare după 26 de ore. Odată ștearsă sarea, hash-ul devine matematic ireversibil: nu mai există nicio cale prin care să-ți reidentificăm sesiunea, nici măcar noi.
IP-ul și User-Agent-ul sunt folosite doar în momentul calculului și aruncate imediat. Nu se scriu nicăieri.
În browser rămâne un marcaj de sessionStorage (se șterge când închizi tab-ul), ca aceeași vizită să nu fie numărată de zece ori. Nu supraviețuiește sesiunii, deci nu e un identificator persistent.
Modelul e cel folosit de Plausible Analytics, validat juridic, și e aliniat cu interpretarea CNIL (Sheet 16) pentru excepția de la consimțământ.
3. Ce câmpuri capturăm
Date strict tehnice, agregate ca simple contoare:
Pathname
ruta din URL (ex: /sesizari)
Referrer
domeniul de unde vii (ex: google.com)
Țară
derivată din IP, de rețeaua Vercel (RO/EU/etc.)
Oraș
derivat din IP, la nivel de oraș (ex. București)
Browser
Chrome / Firefox / Safari / Edge
OS
Windows / macOS / iOS / Android / Linux
Device
desktop / mobile / tablet
Viewport
interval xs/sm/md/lg/xl/2xl
Limbă browser
navigator.language (ex: ro-RO)
Temă preferată
dark / light
Conexiune
2G/3G/4G/wifi (când browserul o expune)
Parametri UTM
utm_source/medium/campaign/content/term
Evenimente de produs
ce pas din formular s-a atins, ce buton s-a apăsat
Erori și Web Vitals
ruta unde a picat ceva + viteza de încărcare
Niciun câmp de aici nu permite reidentificarea ta. Evenimentele de produs sunt etichete („s-a deschis pasul 3"), nu conținut: nu trimitem niciodată în analize textul sesizării, emailul sau adresa.
4. Statistici legate de cont
Dacă ești autentificat, ținem separat un contor simplu pe contul tău: câte pagini ai văzut, pe ce rute, ultima vizită, țara și tipul de dispozitiv. Serverul îl leagă de id-ul contului, deci nu e anonim: e o dată personală pseudonimizată. E folosit exclusiv ca să înțelegem ce funcționează în platformă.
- Temei legal: interes legitim (art. 6(1)(f)).
- Retenție: 90 de zile, apoi cheile expiră singure.
- Nu se trimite niciodată id-ul sau emailul tău din browser; serverul îl citește din sesiune.
- Te poți opune (art. 21): scrie-ne și te excludem complet din măsurători, sau folosește opțiunea de excludere de mai jos.
5. Cât timp păstrăm datele
- Sarea zilnică: 26 de ore, apoi ștearsă automat → hash-ul devine ireversibil
- Contoare pe zi / dispozitiv / țară: 90 de zile, apoi expiră automat
- Contoare pe oră: 7 zile
- Fluxul de evenimente recente: 7 zile, ultimele 200 de rânduri
- Măsurători Web Vitals: 14 zile (eșantion pentru percentile)
- Erori de client, click-uri: 30 de zile
- Vizitator anonim (istoric în panoul de admin): 30 de zile
- Căutări, utilizatori activi săptămânal: 60 de zile
- Statistici legate de cont: 90 de zile (vezi secțiunea 4)
- Experimente A/B: 180 de zile (un experiment rulează săptămâni)
- Agregate lunare: păstrate pe termen lung, dar sunt doar numere, fără nimic identificabil în ele
6. Filtre anti-bot
Ca metricile să însemne ceva, serverul aruncă automat:
- User-Agent care se declară „bot", „crawler", „spider", „scraper"
- Unelte headless (Selenium, Playwright, Puppeteer, curl, wget)
- Crawlere mari (Googlebot, Bingbot, AhrefsBot etc.)
- Cereri fără header
Accept-Language(browserele reale îl trimit mereu) - User-Agent suspect de scurt (sub 20 de caractere)
- Tipare de comportament imposibile (mai multe evenimente sub 200 ms)
Context: peste jumătate din traficul web global e automatizat (Imperva Bad Bot Report).
7. Opt-out: nu vreau să fiu numărat
Două căi, ambele definitive:
- Marcaj local, instantaneu, fără cont:
deschide consola browserului (F12 → Console) și rulează:localStorage.setItem("civia_exclude_tracking", "1")
Din acel moment browserul tău nu mai trimite nimic. Marcajul e pus de tine, în propriul dispozitiv, nu-l scrie Civia. - Ștergerea contului, dacă ești autentificat: Setări → Contul meu → Șterge contul. Statisticile legate de cont dispar odată cu el.
8. Cadru legal
- Directiva ePrivacy 2002/58/CE + Legea 506/2004 (RO) art. 4(5): consimțământul e necesar pentru stocarea pe terminal. Analiza Civia nu stochează nimic pe dispozitiv, deci nu intră sub obligație.
- GDPR (UE) 2016/679: după rotația sării, hash-ul de vizitator devine ireversibil, deci încetează să fie dată cu caracter personal. Statisticile legate de cont RĂMÂN date personale și sunt tratate ca atare (secțiunea 4).
- EDPB Guidelines 2/2023: confirmă că „fără cookie-uri" nu e suficient în sine; Civia merge mai departe, cu zero stocare pe dispozitiv.
- CNIL Sheet 16: respectăm condițiile pentru excepția de la consimțământ: măsurare de audiență proprie, fără corelare cu alte seturi de date, fără IP păstrat, fără identificator care trăiește peste 13 luni, izolat per site.
- ANSPDCP: autoritatea română de protecția datelor. Putem demonstra structural că nu există stocare pe terminal.
9. Cum răspundem la cereri GDPR
Scrie-ne prin formularul de contact GDPR (răspuns în maximum 30 de zile) pentru:
- Dreptul la informare (art. 13–14): asta e pagina pe care o citești
- Dreptul de acces (art. 15): ce date avem despre tine. Pentru măsurătorile anonime răspunsul e, sincer, „nimic identificabil"
- Dreptul la ștergere (art. 17): statisticile legate de cont se șterg odată cu contul; restul expiră singur
- Dreptul la opoziție (art. 21): te excludem din măsurători, permanent
- Dreptul la portabilitate (art. 20): export JSON din Setări → Datele mele
- Plângere la ANSPDCP: dataprotection.ro dacă crezi că nu respectăm GDPR
Versiune: 2.0 · Ultima actualizare: 29 iulie 2026