zgoda na cookies dla SvelteKit

Zgoda na cookies dla SvelteKit,
jeden hook serwerowy

cookiecrumbsHandle wstawia tag jako pierwszy element head każdej odpowiedzi HTML i ustawia event.locals.consent dla Twoich funkcji load.

Co zmienia się w head strony SvelteKit, gdy runtime jest pierwszy: nic nieniezbędnego nie uruchamia się, dopóki jego kategoria nie zostanie przyznana.

zasada

Czego prawo wymaga od strony w SvelteKit

Aplikacja SvelteKit ładuje trackery z +layout.svelte po stronie klienta. Bez kroku zgody, bez zapisu.

Zasada jest taka sama w całej UE i w Wielkiej Brytanii: bez zgody nie wolno zapisywać na urządzeniu odwiedzającego ani odczytywać z niego niczego poza tym, co ściśle niezbędne. To artykuł 5 ust. 3 dyrektywy ePrivacy, a zgoda musi spełniać definicję z RODO: dobrowolna, konkretna, świadoma i jednoznaczna, z odmową równie łatwą jak akceptacja. Wielka Brytania utrzymuje tę samą zasadę w PECR, z wąskimi wyjątkami dla statystyk niskiego ryzyka od 5 lutego 2026 r. Kalifornia i inne prawa stanowe USA działają odwrotnie: bez opt-in, ale z linkiem opt-out i obsługą sygnału Global Privacy Control.

Dla strony wynikają z tego trzy rzeczy. Skrypty analityczne, reklamowe i społecznościowe muszą poczekać na decyzję. Decyzję trzeba zapisać tak, aby dało się ją później pokazać, bo artykuł 7 ust. 1 przerzuca ciężar dowodu na Ciebie. A wycofanie zgody musi być równie łatwe jak jej udzielenie, co oznacza element na każdej stronie, który ponownie otwiera baner. Baner, który pokazuje dwa przyciski i mimo to ładuje Google Analytics, oblewa pierwszy test, i właśnie za to organy nadzoru nakładają kary, od decyzji CNIL wobec Google i SHEIN po kontrole organów holenderskiego i belgijskiego.

jak to działa

Jak działa zgoda w aplikacji SvelteKit

SvelteKit renderuje HTML przez hooks.server.ts i to najczystsze miejsce na runtime zgody: handle, który przekształca każdą odpowiedź HTML i zapisuje tag jako pierwszy w head, niezależnie od tego, co robi strona czy layout. Połącz go z innymi hookami przez sequence(); umieść %cookiecrumbs.head% w app.html, jeśli chcesz sam wybrać dokładną pozycję.

Ten sam hook ustawia event.locals.consent, więc funkcja load w +page.server.ts może po stronie serwera zdecydować, czy dołączyć osadzenie, czy jego placeholder. Po stronie klienta store’y zgody utrzymują każdy komponent w rytmie: $consent dla kategorii, $regime dla obowiązującej reguły i akcje do otwierania, akceptacji, odmowy lub wycofania.

onMount w SvelteKit to miejsce, gdzie zwykle startują trackery. Opakuj poddrzewo w ConsentGate albo sprawdź store przed inicjalizacją. Wszystko, co skan znajdzie na wdrożonej domenie bez tagu, obsługuje mapa blokowania, więc zapomniany skrypt w starym layoucie i tak czeka.

konfiguracja

Konfiguracja w SvelteKit

Pięć kroków. CLI wykonuje większość z nich, a każdy to także jedno kliknięcie w panelu.

  1. Init z repozytorium

    Wykrywa SvelteKit, łączy stronę, zapisuje konfigurację.

    npx cookiecrumbs login
    npx cookiecrumbs init
  2. Dodaj hook

    Połącz go z innymi hookami przez sequence(). Umieść %cookiecrumbs.head% w src/app.html, aby samodzielnie wybrać dokładną pozycję.

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

    Komponenty Svelte ConsentGate, CookieDeclaration i ManageCookiesLink oraz store’y zgody są w pakiecie.

    <script>
      import { ConsentGate } from '@cookiecrumbs/sveltekit';
    </script>
    
    <ConsentGate category="marketing">
      <MetaPixel />
    </ConsentGate>
  4. Decyduj na serwerze, gdy możesz

    Funkcja load może odczytać zgodę i pominąć osadzenie dla odwiedzających, którzy odmówili, zanim uruchomi się jakikolwiek kod kliencki.

    // +page.server.ts
    export const load = ({ locals }) => ({
      showMap: locals.consent?.isGranted('marketing') ?? false,
    });
  5. Skanuj, przypisz, opublikuj

    Skanuj, przypisz raz na dostawcę, opublikuj.

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

uwaga

Błędy, które widzimy w aplikacjach SvelteKit

Każdy z nich pojawia się w pierwszym skanie jako tracker uruchomiony przed zgodą.

  • Dodawanie tagu w +layout.svelteTo po stronie klienta i po hydratacji. Hook zapisuje go w odpowiedzi HTML, jako pierwszy.
  • Strony prerenderowane bez hookaPrerendering przechodzi przez ten sam handle, więc tag jest też w statycznym HTML. Jeśli omijasz hook własnym app.html, użyj placeholdera.
  • Form actions ustawiające cookies analityczneCookies ustawiane przez serwer to cookies. Trzymaj je niezbędne albo blokuj.
  • Wiele adapterów, jeden kluczProdukcja i preview mają różne klucze. Użyj klucza preview na stagingu.
  • Brak ścieżki wycofaniaManageCookiesLink w stopce to dwie linie.

przed publikacją

Lista kontrolna zgodności

Osiem punktów. Dwa ostatnie panel odhacza na podstawie prawdziwych danych.

  • Tag jest pierwszym skryptem w headWszystko powyżej może ustawić cookie, którego runtime nie cofnie.
  • Każdy skrypt analityczny, reklamowy i społecznościowy czeka na swoją kategorięAlbo type="text/plain" z kategorią, albo host jest w mapie blokowania ze skanu.
  • „Odrzuć wszystko” jest na pierwszej warstwieTen sam rozmiar i ta sama waga co „Akceptuj wszystko”. Żadnego „X” liczonego jako zgoda, żadnych zaznaczonych z góry pól.
  • Domyślne wartości Consent Mode są „denied”, zanim załaduje się GoogleSprawdź siedem sygnałów w Tag Assistant przy odmowie zgody.
  • Linki do impressum i polityki prywatności są ustawionePublikacja jest odrzucana, dopóki nie ma obu; stopka banera do nich prowadzi.
  • Na każdej stronie dostępny jest element do wycofania zgodyStały element lub link „Zarządzaj cookies” w stopce.
  • Pierwszy pełny skan został wykonany i każdy dostawca jest przypisanyWerdykt na stronie głównej mówi, z datą, co uruchomiło się przed zgodą.
  • Test instalacji zaliczonyŁaduje Twoją stronę jak odwiedzający i potwierdza, że baner uruchomił się przed jakimkolwiek trackerem.

co dostajesz

Co zawiera darmowy plan

Dwie domeny, 100 skanowanych podstron miesięcznie na domenę, wszystkie regulacje, CLI, SDK i serwer MCP.

Skaner, który czyta wyrenderowaną stronę

Każda strona, w każdym stanie zgody, w prawdziwej przeglądarce. Cookies, piksele, iframe’y i klucze storage, wraz ze stroną i skryptem, które je ustawiły. Skanowane ponownie według harmonogramu.

Deklaracja cookies pisze się sama na podstawie wyniku.

Baner, który najpierw blokuje

Tagi pozostają nieaktywne, dopóki ich kategoria nie zostanie przyznana. „Odrzuć wszystko” jest tak samo widoczne jak „Akceptuj wszystko”. Siedem układów, 25 języków, Consent Mode v2 i właściwa zasada dla każdego regionu.

21 kB, jeden plik, żadnych własnych żądań do firm trzecich.

Dowód, który możesz przekazać

Każdy wybór jest zapisywany ze znacznikiem czasu, wersją banera i skrótem pokazanych tekstów, powiązany łańcuchowo z poprzednim rekordem. Eksporty są podpisane. Hostowane we Frankfurcie.

Artykuł 7 ust. 1, w darmowym planie.

darmowy test

Sprawdź, co Twoja strona ładuje w tej chwili

HTML strony głównej porównany z bazą trackerów. Bez konta, nic nie jest zapisywane. Pełny skan w panelu robi to samo dla każdej strony, w prawdziwej przeglądarce.

pytania

Proste odpowiedzi

Czy mogę odczytać zgodę na serwerze?
Tak. Hook ustawia event.locals.consent z cookie zgody, więc funkcja load może zdecydować, co wyrenderować, zanim uruchomi się klient.
Czy działa z adapterami Vercel, Netlify i Node?
Hook działa wewnątrz obsługi żądań SvelteKit, więc działa z każdym adapterem serwującym odpowiedzi HTML i z prerenderingiem.
Jakie komponenty i store’y są w zestawie?
ConsentGate, CookieDeclaration i ManageCookiesLink, plus store’y dla stanu zgody, reżimu i akcji.
A co z Google Tag Managerem?
Zostaw go. Runtime najpierw ustawia wartości domyślne Consent Mode v2, a szablon GTM dodaje wyzwalacze; albo nadaj tagowi GTM kategorię.
Czy wpływa na wydajność?
Runtime to 21 kB (gzip), asynchroniczny, bez własnych żądań do firm trzecich, a układy pasek i wstążka rezerwują miejsce przed renderowaniem.
Czy mogę sam umieścić tag?
Tak. Umieść %cookiecrumbs.head% w src/app.html, a hook wypełni to tam zamiast na początku head.

następny krok

Wdróż baner z następnym deployem

Dodaj stronę, uruchom npx cookiecrumbs init w repozytorium SvelteKit, a dziennik zgód zaczyna rejestrować w UE.