zgoda na cookies dla Next.js

Zgoda na cookies dla Next.js,
jednym poleceniem

Uruchom npx cookiecrumbs init w repozytorium Next.js. Łączy stronę, zapisuje cookiecrumbs.config.ts i wstawia tag ze strategy="beforeInteractive", żeby wartości domyślne zgody były gotowe przed hydratacją i przed jakimkolwiek menedżerem tagów.

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

zasada

Czego prawo wymaga od strony w Next.js

Aplikacja Next.js nie ma warstwy zgody. next/script ładuje GA4 lub piksel Meta w chwili hydratacji strony, a każdy odwiedzający z UE jest śledzony, zanim cokolwiek powie.

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 Next.js

Next.js daje dokładnie jedno dobre miejsce na runtime zgody: tag next/script ze strategy="beforeInteractive". Skrypty z tą strategią są wstrzykiwane do początkowego HTML i uruchamiane przed jakąkolwiek hydratacją, jedynym wystarczająco wczesnym momentem. afterInteractive (domyślna) uruchamia się po hydratacji, kiedy menedżer tagów dodany z tą samą strategią mógł już odpalić. lazyOnload jest jeszcze gorsze.

W App Routerze tag trafia do app/layout.tsx, który opakowuje każdą trasę. W Pages Routerze trafia do pages/_document.tsx. CLI wykrywa, którego używasz, i wypisuje właściwy snippet; @cookiecrumbs/next opakowuje tag w komponent i dodaje helpery serwerowe, więc Server Component lub route handler może odczytać cookie zgody i zdecydować, co wyrenderować, zanim uruchomi się klient.

Od tego miejsca blokowanie to kwestia kategorii. Tag firmy trzeciej staje się type="text/plain" z data-cc-category; poddrzewo React ładujące tracker trafia do ConsentGate. Runtime uwalnia oba, gdy kategoria zostanie przyznana, w kolejności dokumentu, więc kontener GTM czekający na statystyki działa dokładnie tak, jak by działał, tylko później. Wszystko, co skan znalazł na Twojej domenie produkcyjnej, jest przy publikacji kompilowane do mapy blokowania, więc nieotagowane skrypty ze znanym hostem też są neutralizowane na miejscu.

konfiguracja

Konfiguracja w Next.js

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 Next.js, łączy lub tworzy stronę w Twoim workspace’ie, zapisuje konfigurację i pliki tekstów oraz wypisuje snippet dla Twojego routera.

    npx cookiecrumbs login
    npx cookiecrumbs init
  2. Umieść tag na początku

    App Router: w app/layout.tsx. Pages Router: w pages/_document.tsx. beforeInteractive utrzymuje go przed hydratacją i przed jakimkolwiek menedżerem tagów.

    // 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. Zablokuj to, co wymaga zgody

    Nadaj tagom wymagającym zgody type="text/plain" i kategorię albo opakuj komponenty w ConsentGate z @cookiecrumbs/next. Runtime uwalnia je, gdy kategoria zostanie przyznana.

    import { ConsentGate } from '@cookiecrumbs/next';
    
    <ConsentGate category="analytics" fallback={null}>
      <Analytics />
    </ConsentGate>
  4. Skanuj, przypisz, opublikuj

    Pierwszy skan znajduje to, co aplikacja naprawdę ładuje. Przypisz każdego dostawcę raz, ustaw linki prawne, opublikuj, a dziennik zgód zaczyna rejestrować.

    npx cookiecrumbs scan --wait
    npx cookiecrumbs push --env production
  5. Zabezpiecz deploy

    W CI przerywaj build, gdy pojawi się nowy niesklasyfikowany tracker. Wyjście SARIF trafia do skanowania kodu.

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

uwaga

Błędy, które widzimy w aplikacjach Next.js

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

  • Ładowanie runtime z afterInteractiveWtedy strona jest już zhydratowana, a menedżer tagów z tą samą strategią mógł już się uruchomić. Tylko beforeInteractive jest wystarczająco wczesne.
  • Komponent banera, który tylko się ukrywaUstawienie cookie i ukrycie okienka nic nie robi ze skryptami, które już się wykonały. Blokowanie musi odbywać się na poziomie tagu script, nie w UI.
  • Vercel Analytics i Speed Insights jako „niezbędne”To statystyki. Przypisz je do statystyk i zablokuj; darmowy plan też się liczy.
  • Middleware ustawiający cookies marketingoweTest A/B lub cookie referrera ustawione w middleware działają, zanim istnieje jakakolwiek zgoda. Trzymaj je ściśle niezbędne albo przenieś za zgodę.
  • Zapominanie o deployu podglądowymAdresy podglądowe dostają klucz preview i własne środowisko, więc testy nigdy nie dotykają prawdziwych odwiedzających.

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 działa z App Routerem i Pages Routerem?
Tak. Tag trafia do app/layout.tsx z next/script i strategy="beforeInteractive" dla App Routera albo do pages/_document.tsx dla Pages Routera. CLI wypisuje właściwy snippet dla Twojego projektu.
Czy baner pogarsza moje Core Web Vitals?
Runtime to 21 kB (gzip), jeden plik, ładowany asynchronicznie, a układy pasek i wstążka rezerwują miejsce przed renderowaniem, więc nie powoduje przesunięć układu. Na Vercelu jest serwowany z naszej własnej domeny z długim czasem cache.
Czy mogę trzymać konfigurację w gicie?
Tak. cookiecrumbs.config.ts zawiera design, teksty, kategorie, języki i reguły regionalne. cookiecrumbs push ją wdraża, a cookiecrumbs pull ściąga zmiany z panelu do repozytorium, więc zmiana banera to pull request.
Czy Server Component może odczytać zgodę?
Tak. @cookiecrumbs/next udostępnia cookie zgody helperom serwerowym, więc możesz wyrenderować placeholder zamiast osadzenia, zanim klient w ogóle się uruchomi.
A co z Google Tag Managerem w Next.js?
Zostaw go. Runtime ustawia wartości domyślne Consent Mode v2 przed załadowaniem GTM i aktualizuje je po zgodzie; szablon GTM dodaje wyzwalacze. Albo nadaj tagowi GTM kategorię i pozwól mu w całości czekać.
Czy darmowy plan wystarczy na poboczny projekt w Next.js?
Dwie domeny, 100 skanowanych podstron miesięcznie na domenę, wszystkie regulacje, SDK, CLI i serwer MCP. Rekordy zgód są przechowywane 12 miesięcy w planie Free i 60 miesięcy w każdym planie płatnym.

następny krok

Wdróż baner z następnym deployem

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