Soglasje za piškotke v Next.js, Gatsby in statičnih straneh: integracijski vodnik za razvijalce

Težava soglasja pri statičnih straneh

Sodobna JavaScript ogrodja, kot so Next.js, Gatsby in Nuxt.js, so uvedla spremembo paradigme v tem, kako so spletne strani zgrajene in dostavljene. Strani so predizrisane v času gradnje ali na strežniku, nato pa na odjemalcu hidrirane. To ustvarja edinstven izziv za soglasje za piškotke: pasica za soglasje mora biti pripravljena, še preden se izvedejo kakršni koli sledilni skripti, vendar je lahko sama stran že izrisana in predpomnjena na robu (edge).

Tradicionalni CMP-ji so bili zasnovani za strežniško izrisane PHP ali preproste HTML strani, kjer se dokument nalaga linearno od vrha navzdol. V svetu ogrodij z razbitjem kode (code splitting), lenim nalaganjem (lazy loading) in pretočnim strežniškim izrisom (streaming server-side rendering) te predpostavke odpovejo. Pravilno upravljanje soglasja v takih okoljih zahteva razumevanje upodabljalnega cevovoda (rendering pipeline).

Zakaj je časovna usklajenost pomembnejša, kot si mislite

V standardni HTML strani je postavitev CMP skripta v <head> pred druge skripte preprosta. V Next.js App Router ali Gatsby je situacija bolj zapletena:

Osnovno načelo je naslednje: soglasje mora biti vzpostavljeno na ravni skriptov, ne na ravni komponent. React komponenta, ki izriše pasico za soglasje, je prepozna, če postane interaktivna šele po hidraciji.

Integracija z Next.js App Router

Next.js 13+ z App Router je uvedel nov način ravnanja s skripti. Tukaj je priporočeni pristop za integracijo soglasja:

Korak 1: Naložite CMP skript v korenski postavitvi (root layout)

Uporabite Next.js komponento Script s strategijo beforeInteractive v vašem korenskem layout.tsx. S tem Next.jsu poveste, naj skript vbrizga v začetni HTML dokument, še preden se začne hidracija:

Strategija beforeInteractive je ključna. Privzeta strategija afterInteractive nalaga skripte po hidraciji, kar je za soglasje prepozno. Z beforeInteractive je CMP skript vključen v strežniško izrisan HTML in se izvede med nalaganjem strani.

Korak 2: Nastavite privzeto soglasje pred Google oznakami

Pred vašim Google Tag Manager ali gtag.js odrezkom vključite inline skript, ki nastavi privzeta stanja soglasja. To zagotovi, da tudi če se GTM naloži, preden se pojavi CMP pasica, spoštuje privzete zavrnitve:

Ta inline skript mora biti postavljen v <head> vaše korenske postavitve, pred CMP in GTM skripti. V Next.js lahko za ta namen uporabite običajno oznako <script> znotraj elementa <head> v vaši postavitvi.

Korak 3: Obdelajte spremembe poti (route changes)

Pri enostranskem načinu navigacije (SPA) se CMP skript naloži enkrat, spremembe poti pa ne sprožijo celotnega ponovnega nalaganja strani. Vaš CMP mora vztrajati skozi navigacije na strani odjemalca. FlexyConsent to obravnava samodejno — ko je enkrat naložen, ostane aktiven skozi vse spremembe poti brez ponovne inicializacije.

Integracija z Next.js Pages Router

Za projekte, ki še vedno uporabljajo Pages Router, je pristop podoben, vendar uporablja _document.tsx namesto korenske postavitve. CMP skript postavite v komponento <Head> vaše prilagojene Document klase. Strategija beforeInteractive deluje enako tudi v Pages Router.

Ključna razlika je, da se _document.tsx izrisuje samo na strežniku, zato je vsa logika soglasja tukaj zagotovljeno vključena v začetni HTML odziv.

Integracija statičnih strani v Gatsby

Gatsby v času gradnje generira popolnoma statičen HTML. V času zahteve ni strežniškega izrisa, kar nekatere vidike poenostavi, druge pa zaplete:

Gatsbyjev pristop v času gradnje pomeni, da bo vsaka HTML datoteka na vašem CDN vsebovala skript za soglasje. To je pravzaprav idealno — ni strežniške logike, ki bi lahko spodletela ali bila napačno predpomnjena.

Posebnosti Nuxt.js

Nuxt.js (na osnovi Vue) ima svoje vzorce. V Nuxt 3 uporabite composable useHead ali konfiguracijo glave aplikacije v nuxt.config.ts, da globalno dodate CMP skript. Nuxt podpira možnost body: false (ki postavi skripte v head) in atribut async za neblokirajoče nalaganje.

Za strežniško izrisni način Nuxt velja isto načelo: CMP skript mora biti v začetnem HTML odzivu, ne pa dinamično vbrizgan z Vue komponento po mountu.

Izogibanje premikom postavitve

Pasice za soglasje so razvpite po povzročanju Cumulative Layout Shift (CLS), ključnega Core Web Vital kazalnika, ki vpliva na SEO uvrstitve. Ko se pasica pojavi po izrisu strani, potisne vsebino navzdol ali jo nepričakovano prekrije.

Strategije za zmanjšanje CLS zaradi pasic za soglasje:

Ogrodno neodvisen pristop FlexyConsent

FlexyConsent je zasnovan tako, da deluje s katerim koli ogrodjem — ali brez ogrodja — tako, da deluje na ravni skriptov in ne na ravni komponent. Zakaj je to pomembno:

Nasvet za razvijalce: Najpreprostejši test pravilne integracije CMP je, da odprete zavihek Network v brskalniku, filtrirate po domenah Google in ponovno naložite stran. Nobena Google zahteva se ne sme sprožiti, preden se v konzoli pojavi ukaz za privzeto soglasje. Če se sprožijo, se vaš CMP nalaga prepozno.

Brezplačni paket FlexyConsent podpira neomejeno število ogledov strani in deluje z Next.js, Gatsby, Nuxt, Astro, SvelteKit, Remix in navadnim HTML. Integracija je pri vseh enaka: ena oznaka skripta, pravilno umeščena.

← Blog Preberi vse →