# ANALYTICS IMPLEMENTATION - KOMPLETT-GUIDE **AegisSight UG** **Datum:** 2026-03-20 **Version:** 2.0 **Status:** Implementation Complete --- # PHASE 1: BESTANDSAUFNAHME ## Dienste & Tracking Katalog ### **Dienste im Einsatz:** - **AegisSight Analytics (Umami v3.0.3)** - Self-Hosted, Deutschland - Keine Google Analytics - Keine Facebook Pixel - Keine Third-Party CDNs - Keine Social Media Widgets ### **Cookies:** **Keine.** Umami arbeitet vollständig cookieless. Es werden weder Session-Cookies noch Tracking-Cookies gesetzt. Die Identifikation erfolgt ohne Cookies und ohne Fingerprinting. | Eintrag | Zweck | Typ | Opt-In? | |---------|-------|-----|---------| | `analytics-consent` (LocalStorage) | Consent-Status | LocalStorage | Nein (technisch) | ### **Tracking-Daten (anonymisiert):** - Browser, OS, Device, Screen Resolution - Land, Region (kein Stadtlevel, kein GeoIP-Lookup) - Seiten, Referrer, Session-Dauer - Traffic Source, UTM-Parameter ### **Personenbezug:** Nein Umami speichert keine IP-Adressen und verwendet kein Fingerprinting. Alle Daten sind aggregiert und nicht auf einzelne Nutzer rückführbar. **Rechtsgrundlage:** Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse) - da cookieless und ohne Personenbezug ist kein Opt-In zwingend erforderlich. Der Consent-Banner wird dennoch aus Transparenzgründen eingesetzt. --- # PHASE 2: ENTSCHEIDUNG & DESIGN ## **Entscheidung: CUSTOM BANNER** **Gründe:** - Nur 1 Dienst - CMP wäre Overkill - Volle Kontrolle, keine Abhängigkeiten - Schneller (<5KB vs. 50-100KB für CMP) - Kostenlos --- ## **UI-Design: Slim Layer** ### Banner (Primary): ``` ┌─────────────────────────────────────────┐ │ Website-Analyse │ │ │ │ Text: Cookieless Analytics, Self- │ │ Hosted in Deutschland, keine │ │ Weitergabe an Dritte... │ │ │ │ [Details & Einstellungen] │ │ [Alles akzeptieren] [Nur notwendige] │ └─────────────────────────────────────────┘ ``` ### Settings Modal: ``` ┌─────────────────────────────────────┐ │ Analyse-Einstellungen [×] │ ├─────────────────────────────────────┤ │ ☑ Notwendig (immer aktiv) │ │ ☐ Statistik & Analyse │ │ └─ AegisSight Analytics (Umami) │ │ • Keine Cookies │ │ • Keine IP-Speicherung │ │ • Self-Hosted, Deutschland │ │ │ │ [Auswahl speichern] [Alle akz.] │ └─────────────────────────────────────┘ ``` --- ## **Texte (DE/EN)** **Deutsch:** - Titel: "Website-Analyse" - Text: "Wir nutzen cookielose Analyse-Software auf unserem eigenen Server in Deutschland. Es werden keine persönlichen Daten gespeichert und nichts an Dritte weitergegeben." - Buttons: "Alles akzeptieren" / "Nur notwendige" **Englisch:** - Title: "Website Analytics" - Text: "We use cookieless analytics software on our own server in Germany. No personal data is stored and nothing is shared with third parties." - Buttons: "Accept all" / "Only necessary" --- # PHASE 3: IMPLEMENTATIONSPLAN ## **3.1 Gating-Pattern** ``` Page Load ↓ Check LocalStorage['analytics-consent'] ↓ ├─→ null → Show Banner + Block Tracking ├─→ 'accepted' → Load Umami Script └─→ 'rejected' → Block Tracking ``` **Ablauf:** Das Umami-Script `/analytics-und-so/datenblick.js` wird erst nach Zustimmung geladen. --- ## **3.2 Script-Einbindung** ### Umami Tracking-Script (wird dynamisch geladen bei Consent): ```html ``` ### API-Endpoint: ``` POST /analytics-und-so/api/erfassen ``` --- ## **3.3 Storage-Schema** ### LocalStorage Keys: ```javascript // Consent Status "analytics-consent": { value: "accepted" | "rejected", expires: 1774051200000 // Timestamp (12 Monate) } // Consent Details (Audit-Trail) "analytics-consent-details": { timestamp: "2026-03-20T12:00:00Z", version: "2.0", categories: { necessary: true, analytics: true }, language: "de", gpcSignal: false } ``` --- ## **3.4 Footer-Link (Persistent)** ```html ``` **Funktion:** Öffnet Banner erneut, ermöglicht Widerruf --- ## **3.5 Re-Prompt Regeln** **Banner erneut zeigen bei:** 1. Consent abgelaufen (nach 12 Monaten) 2. Version-Change (z.B. 2.0 → 2.1) 3. User löscht LocalStorage 4. Klick auf "Analyse-Einstellungen" --- ## **3.6 Global Privacy Control (GPC)** ```javascript if (navigator.globalPrivacyControl === true) { // Auto-reject analytics localStorage.setItem('analytics-consent', JSON.stringify({ value: 'rejected', expires: Date.now() + 365 * 24 * 60 * 60 * 1000 })); } ``` --- # PHASE 4: UMSETZUNG + TESTS ## **4.1 Dateien** ### **1. cookie-consent.css** - Responsive Design (Mobile-First) - Accessibility (Focus-Trap, ARIA, Keyboard) - Animations (Fade-In, Slide-Up) - Dark Mode kompatibel ### **2. cookie-consent.js** - Consent Management Logic - GPC Detection - LocalStorage mit Expiry - Multilingual (DE/EN) - Public API - Version Control - Dynamisches Laden von `/analytics-und-so/datenblick.js` ### **3. DATENSCHUTZ_ANALYTICS.md** - Fertige Datenschutzerklärung - DSGVO-konforme Texte --- ## **4.2 Features implementiert** - **Opt-In vor Tracking** (Gating) - **Backdrop-Overlay** (verhindert Interaktion) - **Two-Step Design** (Banner → Settings) - **Consent-Versionierung** (Re-Prompt bei Updates) - **GPC/DNT Support** (Auto-Reject) - **LocalStorage mit Expiry** (12 Monate) - **Audit-Trail** (Consent-Details) - **Multilingual** (DE/EN) - **Accessibility** (ARIA, Focus-Trap, Keyboard) - **Responsive** (Mobile-optimiert) - **Public API** (programmatischer Zugriff) - **Cookieless Tracking** (keine Cookies nötig) --- ## **4.3 Test-Checkliste** ### **Funktional:** - [ ] Banner erscheint beim ersten Besuch - [ ] "Alles akzeptieren" lädt `/analytics-und-so/datenblick.js` - [ ] "Nur notwendige" blockiert Script-Laden - [ ] Re-Visit: Kein Banner (Consent gespeichert) - [ ] Footer-Link öffnet Banner erneut - [ ] Widerruf funktioniert (Accept → Reject) - [ ] GPC-Signal wird erkannt und respektiert - [ ] Version-Change löst Re-Prompt aus ### **Script-Integration:** - [ ] Script hat korrektes `data-website-id="598ef5fd-d2dc-4540-9e65-602889981dac"` - [ ] Pageview wird an `/analytics-und-so/api/erfassen` gesendet - [ ] Keine Cookies im Browser nach Tracking ### **Accessibility & Responsive:** - [ ] Keyboard-Navigation funktioniert (Tab, Enter, Esc) - [ ] Screen Reader liest Banner korrekt vor - [ ] Mobile: Buttons sind touchbar, kein horizontaler Scroll --- ## **4.4 Browser-Kompatibilität** | Browser | Version | Status | |---------|---------|--------| | Chrome | 120+ | - | | Firefox | 121+ | - | | Safari | 17+ | - | | Edge | 120+ | - | | Chrome Mobile | 120+ | - | | Safari iOS | 17+ | - | **Minimum Support:** ES6 (2015+), LocalStorage, Fetch API --- # PHASE 5: DATENSCHUTZERKLÄRUNG ## **5.1 Textbausteine** **Datei:** `DATENSCHUTZ_ANALYTICS.md` **Enthält:** - Art und Umfang der Datenverarbeitung - Rechtsgrundlage (Art. 6 Abs. 1 lit. f DSGVO - berechtigtes Interesse) - Hinweis auf cookieloses Tracking - Keine IP-Speicherung, kein Fingerprinting - Self-Hosted auf eigenem Server (Deutschland) - Keine Datenübermittlung an Dritte - Widerruf der Einwilligung - GPC-Unterstützung - Betroffenenrechte (Art. 15-21 DSGVO) --- ## **5.2 Integration in Website** ```html

4. Website-Analyse

Wir nutzen AegisSight Analytics (Umami), eine cookielose, datenschutzfreundliche Analyse-Software. Diese wird auf unserem eigenen Server in Deutschland betrieben. Es werden keine Cookies gesetzt, keine IP-Adressen gespeichert und kein Fingerprinting eingesetzt. Die erhobenen Daten sind nicht auf einzelne Personen rückführbar.

``` --- ## **5.3 Rechtliche Checkliste** - [x] Opt-In vor Tracking (Consent-Banner) - [x] Widerruf ermöglichen (Footer-Link) - [x] Datenschutzerklärung (vollständig) - [x] Rechtsgrundlage benannt (Art. 6 I f DSGVO) - [x] Hinweis cookieloses Tracking - [x] Betroffenenrechte (Art. 15-21) - [ ] Impressum vollständig (muss geprüft werden) - [ ] Aufsichtsbehörde (muss eingefügt werden) --- # DEPLOYMENT-ANLEITUNG ## **1. Dateien auf Server** ``` /var/www/html/ ├── cookie-consent.css ├── cookie-consent.js └── cookie-consent-demo.html (optional) ``` ## **2. Umami-Infrastruktur** ``` Analytics-System: Umami v3.0.3 (Node.js/Next.js) Datenbank: PostgreSQL Script-Pfad: /analytics-und-so/datenblick.js API-Endpoint: /analytics-und-so/api/erfassen Website-ID: 598ef5fd-d2dc-4540-9e65-602889981dac ``` --- ## **3. In HTML-Seiten integrieren** ```html Ihre Seite ``` --- ## **4. Container neu laden** ```bash docker exec aegis-website-nginx nginx -s reload ``` --- # WARTUNG & UPDATES ## **Vierteljährlich:** - [ ] Umami-Version prüfen und ggf. updaten - [ ] Datenschutzerklärung überprüfen ## **Jährlich:** - [ ] Rechtsgrundlagen aktualisieren - [ ] Consent-Version erhöhen (bei Änderungen) --- # TROUBLESHOOTING ## **Problem: Banner erscheint nicht** ```javascript // In Browser-Console: localStorage.removeItem('analytics-consent'); localStorage.removeItem('analytics-consent-details'); location.reload(); ``` --- ## **Problem: Tracking funktioniert nicht trotz Zustimmung** **Check 1:** LocalStorage ```javascript JSON.parse(localStorage.getItem('analytics-consent')) // Erwartet: { value: "accepted", expires: ... } ``` **Check 2:** Script geladen? ```javascript document.querySelector('script[src="/analytics-und-so/datenblick.js"]') // Erwartet: