Cookie-Einwilligung für SvelteKit

Cookie-Einwilligung für SvelteKit,
ein Server-Hook

cookiecrumbsHandle fügt das Tag als erstes Element in den Head jeder HTML-Antwort ein und setzt event.locals.consent für Ihre Load-Funktionen.

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

Eine SvelteKit-App lädt ihre Tracker aus +layout.svelte auf dem Client. Kein Einwilligungsschritt, kein Nachweis.

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

SvelteKit rendert HTML über hooks.server.ts, und das ist der sauberste Ort für eine Consent-Runtime: ein Handle, das jede HTML-Antwort transformiert und das Tag als erstes in den Head schreibt, egal was Seite oder Layout tun. Kombinieren Sie es über sequence() mit Ihren anderen Hooks; setzen Sie %cookiecrumbs.head% in app.html, wenn Sie die genaue Position selbst wählen wollen.

Derselbe Hook setzt event.locals.consent, sodass eine +page.server.ts-Load-Funktion serverseitig entscheiden kann, ob sie ein Embed oder seinen Platzhalter einbindet. Auf dem Client halten Consent-Stores jede Komponente im Gleichschritt: $consent für die Kategorien, $regime für die geltende Regel und Aktionen zum Öffnen, Akzeptieren, Ablehnen oder Widerrufen.

SvelteKits onMount ist der Ort, an dem Tracker typischerweise starten. Verpacken Sie den Teilbaum in ConsentGate oder prüfen Sie den Store vor der Initialisierung. Alles, was der Scan auf der deployten Domain findet und nicht getaggt ist, übernimmt die Block-Map, sodass auch ein vergessenes Skript in einem alten Layout wartet.

Einrichtung

Einrichtung in SvelteKit

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

  1. Init aus dem Repo

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

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

    Kombinieren Sie ihn über sequence() mit Ihren anderen Hooks. Setzen Sie %cookiecrumbs.head% in src/app.html, um die genaue Position selbst zu wählen.

    npm i @cookiecrumbs/sveltekit
    
    // src/hooks.server.ts
    import { cookiecrumbsHandle } from '@cookiecrumbs/sveltekit/server';
    
    export const handle = cookiecrumbsHandle({ site: 'pk_live_…', env: 'production' });
  3. Im Baum sperren

    Die Svelte-Komponenten ConsentGate, CookieDeclaration und ManageCookiesLink sowie Consent-Stores kommen mit dem Paket.

    <script>
      import { ConsentGate } from '@cookiecrumbs/sveltekit';
    </script>
    
    <ConsentGate category="marketing">
      <MetaPixel />
    </ConsentGate>
  4. Entscheiden Sie auf dem Server, wenn möglich

    Eine Load-Funktion kann die Einwilligung lesen und ein Embed für Besucher, die Nein gesagt haben, auslassen, bevor irgendein Client-Code läuft.

    // +page.server.ts
    export const load = ({ locals }) => ({
      showMap: locals.consent?.isGranted('marketing') ?? false,
    });
  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 SvelteKit-Apps sehen

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

  • Das Tag in +layout.svelte einfügenDas ist clientseitig und nach der Hydration. Der Hook schreibt es in die HTML-Antwort, an erste Stelle.
  • Prerendered Seiten ohne den HookPrerendering läuft durch dasselbe Handle, das Tag steht also auch im statischen HTML. Wenn Sie den Hook mit einem eigenen app.html umgehen, nutzen Sie den Platzhalter.
  • Form Actions, die Analyse-Cookies setzenServerseitig gesetzte Cookies sind Cookies. Halten Sie sie notwendig oder sperren Sie sie.
  • Mehrere Adapter, ein SchlüsselProduktion und Preview haben verschiedene Schlüssel. Nutzen Sie den Preview-Schlüssel auf Staging.
  • Kein WiderrufswegManageCookiesLink in der Fußzeile braucht zwei Zeilen.

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

Kann ich die Einwilligung auf dem Server lesen?
Ja. Der Hook setzt event.locals.consent aus dem Einwilligungs-Cookie, sodass eine Load-Funktion entscheiden kann, was gerendert wird, bevor der Client läuft.
Funktioniert es mit Adaptern für Vercel, Netlify und Node?
Der Hook läuft in SvelteKits Request-Handling, funktioniert also mit jedem Adapter, der HTML-Antworten ausliefert, und mit Prerendering.
Welche Komponenten und Stores sind enthalten?
ConsentGate, CookieDeclaration und ManageCookiesLink, plus Stores für den Einwilligungsstatus, das Regime und die Aktionen.
Und Google Tag Manager?
Behalten Sie ihn. Die Runtime setzt zuerst die Consent-Mode-v2-Standardwerte, und die GTM-Vorlage ergänzt die Trigger; oder geben Sie dem GTM-Tag eine Kategorie.
Beeinträchtigt es die Performance?
Die Runtime ist 21 kB gzip, asynchron, ohne eigene Anfragen an Dritte, und die Layouts Bar und Ribbon reservieren Platz vor dem Rendern.
Kann ich das Tag selbst platzieren?
Ja. Setzen Sie %cookiecrumbs.head% in src/app.html, und der Hook füllt es dort statt am Anfang des Heads.

nächster Schritt

Das Banner mit dem nächsten Deploy ausliefern

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