Cookie-Einwilligung für Next.js

Cookie-Einwilligung für Next.js,
mit einem Befehl

Führen Sie npx cookiecrumbs init in Ihrem Next.js-Repo aus. Es verknüpft die Website, schreibt cookiecrumbs.config.ts und setzt das Tag mit strategy="beforeInteractive" ein, sodass die Consent-Standardwerte vor der Hydration und vor jedem Tag-Manager stehen.

Was sich im Head einer Next.js-Seite ändert, sobald die Runtime an erster Stelle steht: Nichts Nicht-Notwendiges läuft, bis seine Kategorie erlaubt wird.

die Regel

Was das Gesetz von einer Next.js-Website verlangt

Eine Next.js-App hat keine Consent-Ebene. next/script lädt GA4 oder das Meta-Pixel, sobald die Seite hydratisiert, und jeder Besucher aus der EU wird getrackt, bevor er irgendetwas gesagt hat.

Die Regel ist überall in der EU und im Vereinigten Königreich dieselbe: Ohne Zustimmung darf nichts über das unbedingt Notwendige hinaus auf dem Gerät eines Besuchers gespeichert oder von dort ausgelesen werden. Das ist Artikel 5 Absatz 3 der ePrivacy-Richtlinie, und die Zustimmung muss der DSGVO-Definition von Einwilligung genügen: freiwillig, spezifisch, informiert und unmissverständlich, mit einer Ablehnung, die so einfach ist wie die Annahme. Das Vereinigte Königreich hält dieselbe Regel in PECR fest, mit engen Ausnahmen für risikoarme Statistiken seit dem 5. Februar 2026. Kalifornien und die anderen US-Bundesstaaten funktionieren umgekehrt: kein Opt-in, aber ein Opt-out-Link und Unterstützung für das Global-Privacy-Control-Signal.

Für eine Website folgen daraus drei Dinge. Analyse-, Werbe- und Social-Media-Skripte müssen auf eine Entscheidung warten. Die Entscheidung muss so aufgezeichnet werden, dass Sie sie später vorzeigen können, denn Artikel 7 Absatz 1 legt die Beweislast bei Ihnen. Und der Widerruf muss so einfach sein wie die Zustimmung, also braucht es auf jeder Seite ein Bedienelement, das das Banner wieder öffnet. Ein Banner, das zwei Buttons zeigt und Google Analytics trotzdem lädt, fällt beim ersten Test durch, und genau dieses Versagen ahnden die Aufsichtsbehörden, von den CNIL-Entscheidungen gegen Google und SHEIN bis zu den Prüfwellen der niederländischen und belgischen Behörden.

so funktioniert es

So funktioniert Einwilligung in einer Next.js-App

Next.js bietet genau einen guten Ort für eine Consent-Runtime: ein next/script-Tag mit strategy="beforeInteractive". Skripte mit dieser Strategie werden ins initiale HTML eingefügt und laufen vor jeder Hydration, dem einzigen Zeitpunkt, der früh genug ist. afterInteractive (der Standard) läuft nach der Hydration, wenn ein mit derselben Strategie eingefügter Tag-Manager womöglich schon gefeuert hat. lazyOnload ist noch schlechter.

Im App Router kommt das Tag in app/layout.tsx, das jede Route umschließt. Im Pages Router kommt es in pages/_document.tsx. Die CLI erkennt, welchen Sie nutzen, und gibt das passende Snippet aus; @cookiecrumbs/next verpackt das Tag als Komponente und ergänzt Server-Helfer, sodass eine Server Component oder ein Route Handler das Einwilligungs-Cookie lesen und entscheiden kann, was gerendert wird, bevor der Client läuft.

Von da an ist das Sperren eine Frage der Kategorie. Ein Dritt-Tag wird zu type="text/plain" mit data-cc-category; ein React-Teilbaum, der einen Tracker lädt, kommt in ConsentGate. Die Runtime gibt beide frei, wenn die Kategorie erlaubt wird, in Dokumentreihenfolge, sodass ein GTM-Container, der auf Statistik wartet, genau so läuft wie sonst, nur später. Alles, was der Scan auf Ihrer Produktions-Domain gefunden hat, wird beim Veröffentlichen in eine Block-Map kompiliert, sodass auch ungetaggte Skripte mit bekanntem Host an Ort und Stelle neutralisiert werden.

Einrichtung

Einrichtung in Next.js

Fünf Schritte. Die CLI erledigt die meisten davon, und jeder ist auch ein Klick im Dashboard.

  1. Init aus dem Repo

    Erkennt Next.js, verknüpft oder erstellt die Website in Ihrem Workspace, schreibt die Konfiguration und die Textdateien und gibt das Snippet für Ihren Router aus.

    npx cookiecrumbs login
    npx cookiecrumbs init
  2. Das Tag an erste Stelle

    App Router: in app/layout.tsx. Pages Router: in pages/_document.tsx. beforeInteractive hält es vor der Hydration und vor jedem Tag-Manager.

    // app/layout.tsx
    import Script from 'next/script';
    
    <Script src="https://app.cookiecrumbs.eu/runtime/cc.js"
      strategy="beforeInteractive"
      data-cc-site="pk_live_…" data-cc-env="production" />
  3. Sperren, was Einwilligung braucht

    Geben Sie einwilligungspflichtigen Tags type="text/plain" und eine Kategorie, oder verpacken Sie Komponenten in ConsentGate aus @cookiecrumbs/next. Die Runtime gibt sie frei, wenn die Kategorie erlaubt wird.

    import { ConsentGate } from '@cookiecrumbs/next';
    
    <ConsentGate category="analytics" fallback={null}>
      <Analytics />
    </ConsentGate>
  4. Scannen, einsortieren, veröffentlichen

    Der erste Scan findet, was die App wirklich lädt. Sortieren Sie jeden Anbieter einmal ein, setzen Sie Ihre rechtlichen Links, veröffentlichen Sie, und das Einwilligungsprotokoll beginnt aufzuzeichnen.

    npx cookiecrumbs scan --wait
    npx cookiecrumbs push --env production
  5. Den Deploy absichern

    Lassen Sie in CI den Build fehlschlagen, wenn ein neuer Tracker unklassifiziert auftaucht. SARIF-Ausgabe landet im Code-Scanning.

    npx cookiecrumbs scan --wait --fail-on-unknown --fail-on-preconsent --sarif results.sarif

aufgepasst

Fehler, die wir in Next.js-Apps sehen

Jeder davon taucht im ersten Scan als Tracker auf, der vor der Einwilligung gefeuert hat.

  • Die Runtime mit afterInteractive ladenDann ist die Seite schon hydratisiert und ein Tag-Manager mit derselben Strategie womöglich schon gelaufen. Nur beforeInteractive ist früh genug.
  • Eine Banner-Komponente, die sich nur ausblendetEin Cookie setzen und die Box ausblenden ändert nichts an den Skripten, die schon gelaufen sind. Blockiert werden muss am Script-Tag, nicht in der UI.
  • Vercel Analytics und Speed Insights als „notwendig“Das ist Statistik. Sortieren Sie sie unter Statistik ein und sperren Sie sie; auch der kostenlose Tarif zählt.
  • Middleware, die Marketing-Cookies setztEin A/B-Test oder ein Referrer-Cookie aus der Middleware läuft, bevor irgendeine Einwilligung existiert. Halten Sie diese unbedingt notwendig oder stellen Sie sie hinter die Einwilligung.
  • Das Preview-Deployment vergessenPreview-URLs bekommen den Preview-Schlüssel und eine eigene Umgebung, sodass Tests nie echte Besucher berühren.

vor dem Livegang

Die Compliance-Checkliste

Acht Zeilen. Die letzten beiden hakt das Dashboard anhand echter Daten ab.

  • Das Tag ist das erste Skript im HeadAlles darüber kann ein Cookie setzen, das die Runtime nicht zurücknehmen kann.
  • Jedes Analyse-, Werbe- und Social-Skript wartet auf seine KategorieEntweder type="text/plain" mit einer Kategorie, oder der Host steht in der Block-Map aus dem Scan.
  • „Alle ablehnen“ steht auf der ersten EbeneGleiche Größe, gleiches Gewicht wie „Alle akzeptieren“. Kein „X“, das als Einwilligung zählt, keine vorangekreuzten Kästchen.
  • Die Consent-Mode-Standardwerte stehen auf „denied“, bevor Google lädtPrüfen Sie die sieben Signale im Tag Assistant bei verweigerter Einwilligung.
  • Die Links zu Impressum und Datenschutzerklärung sind gesetztOhne beide wird die Veröffentlichung verweigert; die Banner-Fußzeile verlinkt darauf.
  • Ein Widerrufs-Element ist auf jeder Seite erreichbarDas dauerhafte Bedienelement oder ein Link „Cookies verwalten“ in Ihrer Fußzeile.
  • Der erste vollständige Scan ist gelaufen und jeder Anbieter ist einsortiertDas Urteil auf der Startseite sagt datiert, was vor der Einwilligung gefeuert hat.
  • Der Installations-Check ist bestandenEr lädt Ihre Seite wie ein Besucher und bestätigt, dass das Banner vor jedem Tracker lief.

was Sie bekommen

Was der kostenlose Tarif enthält

Zwei Domains, 100 gescannte Unterseiten pro Monat und Domain, jede Regulierung, die CLI, die SDKs und der MCP-Server.

Ein Scanner, der die gerenderte Seite liest

Jede Seite, in jedem Einwilligungszustand, in einem echten Browser. Cookies, Pixel, iFrames und Storage-Schlüssel, mit der Seite und dem Skript, die sie gesetzt haben. Regelmäßig neu gescannt.

Die Cookie-Erklärung schreibt sich aus dem Ergebnis von selbst.

Ein Banner, das zuerst blockiert

Tags bleiben inaktiv, bis ihre Kategorie erlaubt wird. „Alle ablehnen“ ist so sichtbar wie „Alle akzeptieren“. Sieben Layouts, 25 Sprachen, Consent Mode v2 und die richtige Regel pro Region.

21 kB, eine Datei, keine eigenen Anfragen an Dritte.

Ein Nachweis, den Sie vorlegen können

Jede Entscheidung wird mit Zeitstempel, Banner-Version und einem Hash der angezeigten Texte gespeichert, verkettet mit dem Datensatz davor. Exporte sind signiert. Gehostet in Frankfurt.

Artikel 7 Absatz 1, im kostenlosen Tarif.

kostenloser Check

Prüfen Sie, was Ihre Website gerade lädt

Das HTML der Startseite, abgeglichen mit der Tracker-Datenbank. Kein Konto, nichts wird gespeichert. Der vollständige Scan im Dashboard macht dasselbe für jede Seite, in einem echten Browser.

Fragen

Klare Antworten

Funktioniert es mit dem App Router und dem Pages Router?
Ja. Das Tag kommt für den App Router in app/layout.tsx mit next/script und strategy="beforeInteractive", für den Pages Router in pages/_document.tsx. Die CLI gibt das passende Snippet für Ihr Projekt aus.
Verschlechtert das Banner meine Core Web Vitals?
Die Runtime ist 21 kB gzip, eine Datei, asynchron geladen, und die Layouts Bar und Ribbon reservieren ihren Platz vor dem Rendern, also keine Layoutverschiebung. Auf Vercel wird sie von unserer eigenen Domain mit langen Cache-Laufzeiten ausgeliefert.
Kann ich die Konfiguration in Git halten?
Ja. cookiecrumbs.config.ts enthält Design, Texte, Kategorien, Sprachen und Regionsregeln. cookiecrumbs push deployt sie, und cookiecrumbs pull holt Dashboard-Änderungen zurück ins Repo, sodass eine Banner-Änderung ein Pull Request ist.
Kann eine Server Component die Einwilligung lesen?
Ja. @cookiecrumbs/next stellt das Einwilligungs-Cookie Server-Helfern zur Verfügung, sodass Sie statt eines Embeds einen Platzhalter rendern können, bevor der Client überhaupt läuft.
Und Google Tag Manager in Next.js?
Behalten Sie ihn. Die Runtime setzt die Consent-Mode-v2-Standardwerte, bevor GTM lädt, und aktualisiert sie bei Einwilligung; die GTM-Vorlage ergänzt die Trigger. Oder geben Sie dem GTM-Tag eine Kategorie und lassen es ganz warten.
Deckt der kostenlose Tarif ein Next.js-Nebenprojekt ab?
Zwei Domains, 100 gescannte Unterseiten pro Monat und Domain, alle Regulierungen, das SDK, die CLI und der MCP-Server. Einwilligungsdatensätze werden im Free-Tarif 12 Monate und in jedem bezahlten Tarif 60 Monate aufbewahrt.

nächster Schritt

Das Banner mit dem nächsten Deploy ausliefern

Website hinzufügen, npx cookiecrumbs init im Next.js-Repo ausführen, und das Einwilligungsprotokoll beginnt in der EU aufzuzeichnen.