--- name: cookies-analytics description: Set up Google Analytics 4 with DSGVO-compliant cookie consent banner. Use when analytics tracking is needed. Triggers on "analytics", "GA4", "Google Analytics", "cookie consent", "tracking". --- # Cookies & Analytics Set up GA4 with DSGVO-compliant cookie consent. ## Overview 1. Create cookie consent banner component 2. Set up Google Analytics 4 3. Only load GA after consent 4. Store consent in localStorage ## Cookie Consent Banner Create `components/cookie-consent.tsx`: ```tsx 'use client' import { useState, useEffect } from 'react' import { Button } from '@/components/ui/button' export function CookieConsent() { const [showBanner, setShowBanner] = useState(false) useEffect(() => { const consent = localStorage.getItem('cookie-consent') if (!consent) setShowBanner(true) }, []) const acceptAll = () => { localStorage.setItem('cookie-consent', 'all') setShowBanner(false) loadAnalytics() } const acceptEssential = () => { localStorage.setItem('cookie-consent', 'essential') setShowBanner(false) } if (!showBanner) return null return (

Wir verwenden Cookies, um Ihre Erfahrung zu verbessern.{' '} Mehr erfahren

) } function loadAnalytics() { // Load GA4 script dynamically const script = document.createElement('script') script.src = `https://www.googletagmanager.com/gtag/js?id=${process.env.NEXT_PUBLIC_GA_ID}` script.async = true document.head.appendChild(script) window.dataLayer = window.dataLayer || [] function gtag(...args: any[]) { window.dataLayer.push(args) } gtag('js', new Date()) gtag('config', process.env.NEXT_PUBLIC_GA_ID) } ``` ## Environment Variables Add to `.env.local`: ``` NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX ``` ## Layout Integration Add to `app/layout.tsx`: ```tsx import { CookieConsent } from '@/components/cookie-consent' export default function RootLayout({ children }) { return ( {children} ) } ``` ## Check Existing Consent on Load Add to layout or a provider: ```tsx 'use client' import { useEffect } from 'react' export function AnalyticsProvider({ children }) { useEffect(() => { const consent = localStorage.getItem('cookie-consent') if (consent === 'all') { loadAnalytics() } }, []) return <>{children} } ``` ## Datenschutz Update Add to Datenschutz page: ```markdown ### Google Analytics Diese Website verwendet Google Analytics 4, einen Webanalysedienst der Google LLC. Die Nutzung erfolgt nur nach Ihrer ausdrücklichen Einwilligung. **Verarbeitete Daten:** - IP-Adresse (anonymisiert) - Besuchte Seiten - Verweildauer - Geräte- und Browserinformationen **Rechtsgrundlage:** Art. 6 Abs. 1 lit. a DSGVO (Einwilligung) Sie können Ihre Einwilligung jederzeit widerrufen, indem Sie die Cookies in Ihrem Browser löschen. ``` ## Checklist - [ ] Cookie consent component created - [ ] GA4 only loads after consent - [ ] Consent stored in localStorage - [ ] Datenschutz updated with GA info - [ ] Environment variable set - [ ] Banner displays on first visit - [ ] "Nur notwendige" doesn't load GA - [ ] "Alle akzeptieren" loads GA