Souhlas s cookies pro Next.js, Gatsby a statické weby: Průvodce integrací pro vývojáře

Problém souhlasu u statických webů

Moderní JavaScriptové frameworky jako Next.js, Gatsby a Nuxt.js přinesly zásadní změnu v tom, jak se webové stránky vytvářejí a doručují. Stránky se předrenderují v době sestavení nebo na serveru a poté se na klientovi hydratují. To vytváří jedinečnou výzvu pro souhlas s cookies: banner souhlasu musí být připraven dříve, než se spustí jakékoli sledovací skripty, ale samotná stránka už může být vyrenderovaná a uložená v cache na hraně.

Tradiční CMP byly navrženy pro serverově renderované PHP nebo jednoduché HTML stránky, kde se dokument načítá lineárně shora dolů. Ve světě frameworků s dělením kódu, líným načítáním a streamovaným serverovým renderováním se tyto předpoklady hroutí. Správné zajištění souhlasu v těchto prostředích vyžaduje pochopení renderovacího pipeline.

Proč je načasování důležitější, než si myslíte

Na standardní HTML stránce je umístění CMP skriptu do <head> před ostatní skripty jednoduché. V Next.js App Routeru nebo Gatsby je situace složitější:

Základní princip je tento: souhlas musí být stanoven na úrovni skriptu, nikoli na úrovni komponenty. React komponenta, která renderuje banner souhlasu, je příliš pozdě, pokud se stane interaktivní až po hydrataci.

Integrace s Next.js App Router

Next.js 13+ s App Routerem zavedl nový způsob práce se skripty. Zde je doporučený přístup pro integraci souhlasu:

Krok 1: Načtěte CMP skript v kořenovém Layoutu

Použijte komponentu Script Next.js se strategií beforeInteractive ve vašem kořenovém layout.tsx. To říká Next.js, aby injektoval skript do počátečního HTML dokumentu, před zahájením hydratace:

Strategie beforeInteractive je klíčová. Výchozí strategie afterInteractive načítá skripty po hydrataci, což je pro souhlas příliš pozdě. S beforeInteractive je CMP skript zahrnut v serverově renderovaném HTML a spouští se při načítání stránky.

Krok 2: Nastavte výchozí souhlas před Google tagy

Před váš Google Tag Manager nebo gtag.js snippet zahrňte inline skript, který nastaví výchozí stavy souhlasu. To zajistí, že i když se GTM načte před zobrazením CMP banneru, bude respektovat zamítnuté výchozí hodnoty:

Tento inline skript by měl být umístěn v <head> vašeho kořenového layoutu, před CMP a GTM skripty. V Next.js můžete pro tento účel použít běžný tag <script> uvnitř elementu <head> vašeho layoutu.

Krok 3: Zpracování změn trasy

Při navigaci v jednostránkové aplikaci se CMP skript načte jednou, ale změny trasy nevyvolávají úplné znovunačtení stránky. Vaše CMP musí přetrvávat přes navigace na straně klienta. FlexyConsent to zpracovává automaticky — jakmile je načten, zůstává aktivní přes všechny změny trasy bez opětovné inicializace.

Integrace s Next.js Pages Router

Pro projekty, které stále používají Pages Router, je přístup podobný, ale používá _document.tsx místo kořenového layoutu. Umístěte CMP skript do komponenty <Head> vaší vlastní třídy Document. Strategie beforeInteractive funguje stejným způsobem v Pages Routeru.

Klíčový rozdíl je v tom, že _document.tsx se renderuje pouze na serveru, takže jakákoli logika souhlasu zde má zaručeno, že bude v počátečním HTML payloadu.

Integrace statického webu s Gatsby

Gatsby generuje plně statické HTML v době sestavení. V době požadavku neprobíhá žádné serverové renderování, což zjednodušuje některé aspekty, ale komplikuje jiné:

Přístup Gatsby v době sestavení znamená, že každý HTML soubor na vašem CDN bude obsahovat skript souhlasu. To je vlastně ideální — neexistuje žádná serverová logika, která by mohla selhat nebo být nesprávně cachovaná.

Úvahy o Nuxt.js

Nuxt.js (založený na Vue) má své vlastní vzory. V Nuxt 3 použijte composable useHead nebo konfiguraci hlavičky aplikace v nuxt.config.ts pro globální přidání CMP skriptu. Nuxt podporuje volbu body: false (která umísťuje skripty do hlavičky) a atribut async pro neblokující načítání.

Pro režim serverového renderování Nuxt platí stejný princip: CMP skript musí být v počáteční HTML odpovědi, ne dynamicky injektován Vue komponentou po připojení.

Vyhýbání se posunu rozvržení

Bannery souhlasu jsou proslulé tím, že způsobují Kumulativní posun rozvržení (CLS), Core Web Vital metriku, která ovlivňuje SEO hodnocení. Když se banner objeví po vyrenderování stránky, posune obsah dolů nebo ho neočekávaně překryje.

Strategie pro minimalizaci CLS z bannerů souhlasu:

Frameworkově nezávislý přístup FlexyConsent

FlexyConsent byl navržen tak, aby fungoval s jakýmkoli frameworkem — nebo bez jakéhokoli frameworku — tím, že operuje na úrovni skriptu místo úrovně komponenty. Zde je důvod, proč na tom záleží:

Tip pro vývojáře: Nejjednodušší test správné CMP integrace je otevřít záložku Network v prohlížeči, filtrovat podle Google domén a znovu načíst stránku. Žádné Google požadavky by se neměly spustit předtím, než se v konzoli objeví příkaz výchozího souhlasu. Pokud se spustí, vaše CMP se načítá příliš pozdě.

Bezplatný plán FlexyConsent podporuje neomezený počet zobrazení stránek a funguje s Next.js, Gatsby, Nuxt, Astro, SvelteKit, Remix a obyčejným HTML. Integrace je stejná napříč všemi: jeden skriptový tag, správně umístěný.

← Blog Číst vše →