Sări la conținut
Înapoi acasă

Cum măsurăm traficul

Zero cookie-uri de analiză, zero identificator persistent pe dispozitiv, zero date trimise altcuiva. Doar contoare care expiră singure.

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:

  1. 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.
  2. Ș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