Cookie-Einwilligung für Nuxt

Cookie-Einwilligung für Nuxt,
ein Modul

@cookiecrumbs/nuxt stellt das Tag mit kritischer Priorität an den Anfang von app.head.script, vor den Nuxt-Entry-Chunk, und importiert automatisch ein useConsent()-Composable.

Was sich im Head einer Nuxt-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 Nuxt-Website verlangt

Eine Nuxt-App mit einem GA- oder Pixel-Plugin führt es beim Client-Entry aus. Nichts fragt vorher, und nichts kann es zurücknehmen.

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 Nuxt-App

Nuxt verwaltet den Dokument-Head für Sie, und genau dort muss eine Consent-Runtime sitzen. Das Modul setzt das Tag mit tagPriority: "critical" in app.head.script, sodass es auf jeder Seite vor dem Nuxt-Entry-Chunk gerendert wird, serverseitig oder statisch. Keine Layout-Änderungen, keine Head-Aufrufe pro Seite.

Client-Plugins sind in Nuxt die übliche Quelle früher Tracker: ein gtag-Plugin, ein Pixel-Plugin, ein Drittmodul, das sein eigenes Skript einschleust. Das useConsent()-Composable gibt jedem davon isGranted(category) und eine Möglichkeit, Änderungen zu abonnieren, sodass ein Plugin warten und in dem Moment initialisieren kann, in dem die Einwilligung eintrifft. Nuxt-Drittmodule, die Skripte einschleusen, bekommen eine Kategorie an ihrem Tag, oder ihr Host wird von der Block-Map aus dem Scan neutralisiert.

Drei Komponenten kommen mit dem Modul: ConsentGate für Teilbäume, CookieDeclaration für die Datenschutzseite und ManageCookiesLink für die Fußzeile. Server-Routen und Middleware können das Einwilligungs-Cookie über dieselben Helfer lesen, sodass eine Seite vor der Hydration einen Platzhalter statt eines Embeds rendern kann.

Einrichtung

Einrichtung in Nuxt

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

  1. Init aus dem Repo

    Erkennt Nuxt, verknüpft die Website, schreibt die Konfiguration.

    npx cookiecrumbs login
    npx cookiecrumbs init
  2. Modul hinzufügen

    Site-Schlüssel und Umgebung kommen in nuxt.config.ts.

    npm i @cookiecrumbs/nuxt
    
    // nuxt.config.ts
    export default defineNuxtConfig({
      modules: ['@cookiecrumbs/nuxt'],
      cookiecrumbs: { site: 'pk_live_…', env: 'production' },
    });
  3. Das Composable nutzen

    useConsent() stellt status, consent, regime, country, language, version und die Aktionen accept, reject, open und withdraw bereit.

    const { isGranted, open } = useConsent();
    
    <ConsentGate category="analytics">
      <AnalyticsWidget />
    </ConsentGate>
  4. Plugins warten lassen

    Ein Client-Plugin initialisiert seinen Tracker erst, wenn die Kategorie erlaubt wird, und erneut, wenn sich die Einwilligung später ändert.

    // plugins/pixel.client.ts
    export default defineNuxtPlugin(() => {
      const { isGranted, onChange } = useConsent();
      const start = () => { if (isGranted('marketing')) initPixel(); };
      start(); onChange(start);
    });
  5. Scannen, einsortieren, veröffentlichen

    Scannen, einmal pro Anbieter einsortieren, veröffentlichen.

    npx cookiecrumbs scan --wait
    npx cookiecrumbs push --env production

aufgepasst

Fehler, die wir in Nuxt-Apps sehen

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

  • Ein gtag-Plugin mit mode: "client" und ohne GateEs läuft im Entry-Chunk. Sperren Sie es mit dem Composable oder lassen Sie Consent Mode die Standardwerte tragen.
  • useHead in einer Seite nutzen, um die Runtime einzufügenHead auf Seitenebene läuft nach dem App-Head. Die kritische Priorität des Moduls hält das Tag an erster Stelle.
  • Nitro-Routen, die Tracking-Cookies setzenServerseitige Cookies für Attribution sind trotzdem Cookies. Halten Sie sie unbedingt notwendig oder setzen Sie sie nach der Einwilligung.
  • Die Preview-Umgebung ignorierenDer Preview-Schlüssel auf einem Staging-Deploy lässt Sie eine neue Banner-Version testen, ohne Besucher zu berühren.
  • Kein erneutes Fragen nach einer neuen KategorieFügen Sie einen neuen Zweck hinzu, fragt die Runtime erneut. Unterdrücken Sie das nicht; genau das hält die Einwilligung gültig.

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

Hält das Modul das Tag vor meinen Plugins?
Ja. Es wird mit tagPriority critical eingefügt, vor dem Nuxt-Entry-Chunk, sodass die Consent-Standardwerte existieren, bevor irgendein Plugin läuft.
Welche Komponenten kommen mit dem Modul?
ConsentGate, CookieDeclaration und ManageCookiesLink, plus das useConsent()-Composable mit status, consent, regime, country, language, version, consentId und den Aktionen accept, reject, set, open, close, withdraw und setLang.
Funktioniert es mit Nuxt Content oder einem statischen Build?
Ja. Die statische Generierung schreibt das Tag in jede HTML-Datei; SSR rendert es pro Anfrage.
Kann ich die Einwilligung in einer Server-Route lesen?
Ja. Die Cookie-Helfer funktionieren in Nitro, sodass eine API-Route einen Tracking-Aufruf für einen Besucher überspringen kann, der Nein gesagt hat.
Und Google Tag Manager?
Behalten Sie das GTM-Modul. Die Runtime setzt zuerst die Consent-Mode-v2-Standardwerte, und die GTM-Vorlage ergänzt die Trigger.
Gibt es eine Vue-3-Version ohne Nuxt?
Nutzen Sie das Script-Tag und die Runtime-API. Das Modul ist ein dünner Wrapper um dieselbe Runtime.

nächster Schritt

Das Banner mit dem nächsten Deploy ausliefern

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