Suglasnost za kolačiće za Next.js, Gatsby i statične stranice: Vodič za integraciju za developere

Problem suglasnosti na statičnim stranicama

Moderni JavaScript okviri poput Next.js, Gatsby i Nuxt.js uveli su promjenu paradigme u načinu na koji se web stranice grade i isporučuju. Stranice se unaprijed renderiraju u vrijeme builda ili na poslužitelju, a zatim se na klijentu hidriraju. To stvara jedinstveni izazov za suglasnost za kolačiće: banner za suglasnost mora biti spreman prije nego što se pokrenu bilo kakvi skripte za praćenje, ali sama stranica može već biti renderirana i keširana na edgeu.

Tradicionalni CMP-ovi dizajnirani su za server-renderirani PHP ili jednostavne HTML stranice gdje se dokument učitava linearno od vrha prema dnu. U svijetu okvira s dijeljenjem koda, lijenim učitavanjem i streaming server-side renderiranjem, te pretpostavke se ruše. Ispravno postavljanje suglasnosti u tim okruženjima zahtijeva razumijevanje rendering pipelinea.

Zašto je tajming važniji nego što mislite

Na standardnoj HTML stranici, postavljanje CMP skripte u <head> prije ostalih skripti je jednostavno. U Next.js App Routeru ili Gatsbyju situacija je složenija:

Temeljno načelo je ovo: suglasnost se mora uspostaviti na razini skripte, a ne na razini komponente. React komponenta koja prikazuje banner za suglasnost dolazi prekasno ako postane interaktivna tek nakon hidratacije.

Integracija s Next.js App Routerom

Next.js 13+ s App Routerom uveo je novi način rukovanja skriptama. Ovo je preporučeni pristup za integraciju suglasnosti:

Korak 1: Učitajte CMP skriptu u root layoutu

Koristite Next.js Script komponentu sa strategijom beforeInteractive u vašem root layout.tsx. Time govorite Next.js-u da ubrizga skriptu u početni HTML dokument, prije nego što hidratacija započne:

Strategija beforeInteractive je ključna. Zadana strategija afterInteractive učitava skripte nakon hidratacije, što je prekasno za suglasnost. S beforeInteractive, CMP skripta je uključena u server-renderirani HTML i izvršava se dok se stranica učitava.

Korak 2: Postavite zadane postavke suglasnosti prije Google tagova

Prije vašeg Google Tag Manager ili gtag.js isječka, uključite inline skriptu koja postavlja zadana stanja suglasnosti. To osigurava da čak i ako se GTM učita prije nego što se pojavi CMP banner, poštuje zadane odbijene postavke:

Ova inline skripta treba biti smještena u <head> vašeg root layouta, prije CMP i GTM skripti. U Next.js-u za tu svrhu možete koristiti običan <script> tag unutar <head> elementa vašeg layouta.

Korak 3: Rukovanje promjenama ruta

Kod navigacije u single-page aplikaciji, CMP skripta se učitava jednom, ali promjene ruta ne pokreću potpuno ponovno učitavanje stranice. Vaš CMP mora opstati kroz navigacije na strani klijenta. FlexyConsent to rješava automatski — jednom kada se učita, ostaje aktivan kroz sve promjene ruta bez ponovne inicijalizacije.

Integracija s Next.js Pages Routerom

Za projekte koji još koriste Pages Router, pristup je sličan, ali koristi _document.tsx umjesto root layouta. Postavite CMP skriptu u <Head> komponentu vaše prilagođene Document klase. Strategija beforeInteractive radi na isti način u Pages Routeru.

Ključna razlika je u tome što se _document.tsx renderira samo na poslužitelju, tako da je svaka logika suglasnosti ovdje zajamčeno u početnom HTML payloadu.

Integracija statičnih stranica u Gatsbyju

Gatsby generira potpuno statični HTML u vrijeme builda. Nema server-side renderiranja u trenutku zahtjeva, što neke aspekte pojednostavljuje, ali druge komplicira:

Gatsbyjev pristup u vrijeme builda znači da će svaka HTML datoteka na vašem CDN-u uključivati skriptu za suglasnost. To je zapravo idealno — nema poslužiteljske logike koja može zakazati ili biti pogrešno keširana.

Razmatranja za Nuxt.js

Nuxt.js (baziran na Vueu) ima vlastite obrasce. U Nuxt 3 koristite useHead composable ili nuxt.config.ts konfiguraciju app heada za globalno dodavanje CMP skripte. Nuxt podržava opciju body: false (koja postavlja skripte u head) i atribut async za neblokirajuće učitavanje.

Za Nuxtov način server-side renderiranja vrijedi isto načelo: CMP skripta mora biti u početnom HTML odgovoru, a ne dinamički ubrizgana Vue komponentom nakon mounta.

Izbjegavanje pomaka layouta

Banneri za suglasnost ozloglašeni su po uzrokovanju Cumulative Layout Shift (CLS), Core Web Vital metrike koja utječe na SEO rangiranje. Kada se banner pojavi nakon što se stranica renderira, gura sadržaj prema dolje ili ga neočekivano prekriva.

Strategije za minimiziranje CLS-a od bannera za suglasnost:

Framework-agnostični pristup FlexyConsenta

FlexyConsent je dizajniran da radi s bilo kojim okvirom — ili bez ikakvog okvira — tako što djeluje na razini skripte, a ne na razini komponente. Evo zašto je to važno:

Developerski savjet: Najjednostavniji test ispravne integracije CMP-a je otvoriti Network tab u pregledniku, filtrirati po Google domenama i ponovno učitati stranicu. Ne bi smio postojati nijedan Google zahtjev prije nego što se u konzoli pojavi naredba za zadanu suglasnost. Ako postoji, vaš se CMP učitava prekasno.

FlexyConsentov besplatni plan podržava neograničen broj prikaza stranica i radi s Next.js, Gatsby, Nuxt, Astro, SvelteKit, Remix i običnim HTML-om. Integracija je ista za sve njih: jedan script tag, pravilno postavljen.

← Blog Pročitaj sve →