zgoda na cookies dla Nuxt

Zgoda na cookies dla Nuxt,
jeden moduł

@cookiecrumbs/nuxt wstawia tag na początek app.head.script z priorytetem critical, przed chunkiem wejściowym Nuxt, i automatycznie importuje composable useConsent().

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

zasada

Czego prawo wymaga od strony w Nuxt

Aplikacja Nuxt z pluginem GA lub piksela uruchamia go na wejściu klienta. Nic nie pyta wcześniej i nic nie może tego cofnąć.

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 Nuxt

Nuxt zarządza head dokumentu za Ciebie, a to dokładnie tam musi siedzieć runtime zgody. Moduł umieszcza tag w app.head.script z tagPriority: "critical", więc jest renderowany przed chunkiem wejściowym Nuxt na każdej stronie, serwerowej czy statycznej. Bez edycji layoutów, bez wywołań head na każdej stronie.

Pluginy klienckie to zwykłe źródło wczesnych trackerów w Nuxt: plugin gtag, plugin Pixel, moduł firmy trzeciej wstrzykujący własny skrypt. Composable useConsent() daje każdemu z nich isGranted(category) i możliwość subskrypcji zmian, więc plugin może poczekać i zainicjalizować się w chwili nadejścia zgody. Moduły Nuxt firm trzecich wstrzykujące skrypty dostają kategorię na swoim tagu albo ich host jest neutralizowany przez mapę blokowania ze skanu.

Z modułem przychodzą trzy komponenty: ConsentGate dla poddrzew, CookieDeclaration dla strony polityki prywatności i ManageCookiesLink dla stopki. Trasy serwerowe i middleware mogą odczytać cookie zgody tymi samymi helperami, więc strona może wyrenderować placeholder zamiast osadzenia jeszcze przed hydratacją.

konfiguracja

Konfiguracja w Nuxt

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 Nuxt, łączy stronę, zapisuje konfigurację.

    npx cookiecrumbs login
    npx cookiecrumbs init
  2. Dodaj moduł

    Klucz strony i środowisko trafiają do nuxt.config.ts.

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

    useConsent() udostępnia status, consent, regime, country, language, version oraz akcje accept, reject, open i withdraw.

    const { isGranted, open } = useConsent();
    
    <ConsentGate category="analytics">
      <AnalyticsWidget />
    </ConsentGate>
  4. Każ pluginom czekać

    Plugin kliencki inicjalizuje tracker tylko wtedy, gdy kategoria zostanie przyznana, i ponownie, jeśli zgoda później się zmieni.

    // plugins/pixel.client.ts
    export default defineNuxtPlugin(() => {
      const { isGranted, onChange } = useConsent();
      const start = () => { if (isGranted('marketing')) initPixel(); };
      start(); onChange(start);
    });
  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 Nuxt

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

  • Plugin gtag z mode: "client" i bez gate’aDziała w chunku wejściowym. Zablokuj go composable’em albo pozwól Consent Mode nieść wartości domyślne.
  • Używanie useHead na stronie, by dodać runtimeHead na poziomie strony działa po head aplikacji. To priorytet critical modułu utrzymuje tag na początku.
  • Trasy Nitro ustawiające cookies śledząceCookies serwerowe do atrybucji to nadal cookies. Trzymaj je ściśle niezbędne albo ustawiaj po zgodzie.
  • Ignorowanie środowiska podglądowegoKlucz preview na deployu stagingowym pozwala testować nową wersję banera bez dotykania odwiedzających.
  • Brak ponownego pytania po dodaniu kategoriiDodaj nowy cel, a runtime zapyta ponownie. Nie wyłączaj tego; to właśnie utrzymuje ważność zgody.

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 moduł utrzymuje tag przed moimi pluginami?
Tak. Jest wstrzykiwany z tagPriority critical, przed chunkiem wejściowym Nuxt, więc wartości domyślne zgody istnieją, zanim uruchomi się jakikolwiek plugin.
Jakie komponenty są w module?
ConsentGate, CookieDeclaration i ManageCookiesLink, plus composable useConsent() ze status, consent, regime, country, language, version, consentId oraz akcjami accept, reject, set, open, close, withdraw i setLang.
Czy działa z Nuxt Content lub buildem statycznym?
Tak. Generowanie statyczne zapisuje tag w każdym pliku HTML; SSR renderuje go przy każdym żądaniu.
Czy mogę odczytać zgodę w trasie serwerowej?
Tak. Helpery cookie działają w Nitro, więc trasa API może pominąć wywołanie śledzące dla odwiedzającego, który odmówił.
A co z Google Tag Managerem?
Zostaw moduł GTM. Runtime najpierw ustawia wartości domyślne Consent Mode v2, a szablon GTM dodaje wyzwalacze.
Czy jest wersja dla Vue 3 bez Nuxt?
Użyj tagu script i API runtime. Moduł to cienka nakładka na ten sam runtime.

następny krok

Wdróż baner z następnym deployem

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