Sutikimas dėl slapukų Next.js, Gatsby ir statiniuose puslapiuose: integracijos gidas programuotojams

Statinių svetainių sutikimo problema

Šiuolaikiniai JavaScript karkasai, tokie kaip Next.js, Gatsby ir Nuxt.js, iš esmės pakeitė, kaip kuriami ir pateikiami tinklalapiai. Puslapiai iš anksto atvaizduojami kompiliavimo metu arba serveryje, o tada kliente yra hidratuojami. Tai sukuria unikalų iššūkį sutikimui dėl slapukų: sutikimo juosta turi būti paruošta dar prieš vykdant bet kokius sekimo skriptus, tačiau pats puslapis jau gali būti atvaizduotas ir kešuojamas perimetre (edge).

Tradiciniai CMP buvo sukurti serveriu atvaizduojamiems PHP ar paprastiems HTML puslapiams, kuriuose dokumentas kraunamas linijiškai nuo viršaus iki apačios. Karkasų pasaulyje, kuriame yra kodo skaidymas, lazy loading ir srautinė server-side renderinimo technika, šios prielaidos nebegalioja. Teisingai įgyvendinti sutikimą tokiose aplinkose reiškia suprasti atvaizdavimo grandinę.

Kodėl laikas svarbesnis, nei manote

Standartiniame HTML puslapyje CMP skripto patalpinimas <head> dalyje prieš kitus skriptus yra paprastas. Next.js App Router ar Gatsby atveju situacija sudėtingesnė:

Pagrindinis principas toks: sutikimas turi būti valdomas skripto lygiu, o ne komponento lygiu. React komponentas, kuris atvaizduoja sutikimo juostą, yra per vėlus, jei tampa funkcionalus tik po hidratacijos.

Next.js App Router integracija

Next.js 13+ su App Router įvedė naują būdą, kaip tvarkyti skriptus. Štai rekomenduojamas požiūris į sutikimo integraciją:

1 žingsnis: įkelkite CMP skriptą šakniniame išdėstyme

Naudokite Next.js Script komponentą su beforeInteractive strategija savo šakniniame layout.tsx. Tai nurodo Next.js įterpti skriptą į pradinį HTML dokumentą dar prieš prasidedant hidratacijai:

beforeInteractive strategija yra kritiškai svarbi. Numatytoji afterInteractive strategija įkelia skriptus po hidratacijos, o tai sutikimui yra per vėlu. Naudojant beforeInteractive, CMP skriptas įtraukiamas į serverio atvaizduotą HTML ir vykdomas puslapiui kraunantis.

2 žingsnis: nustatykite numatytąjį sutikimą prieš Google žymas

Prieš jūsų Google Tag Manager ar gtag.js iškarpą įtraukite inline skriptą, kuris nustato numatytąsias sutikimo būsenas. Taip užtikrinama, kad net jei GTM įsikraus anksčiau, nei pasirodys CMP juosta, jis laikysis numatytųjų „atmesta“ reikšmių:

Šis inline skriptas turėtų būti patalpintas šakniniame išdėstyme <head> dalyje, prieš CMP ir GTM skriptus. Next.js aplinkoje tam galite naudoti įprastą <script> žymą <head> elemente.

3 žingsnis: maršrutų keitimų valdymas

Vieno puslapio aplikacijose (SPA) CMP skriptas įkeliamas vieną kart��, tačiau maršrutų keitimai nesukelia pilno puslapio perkrovimo. Jūsų CMP turi išlikti aktyvus per visus kliento pusės navigacijos pasikeitimus. FlexyConsent tai tvarko automatiškai — kartą įkeltas, jis lieka aktyvus visuose maršrutuose be pakartotinės inicijacijos.

Next.js Pages Router integracija

Projektams, kurie vis dar naudoja Pages Router, požiūris panašus, bet vietoje šakninio išdėstymo naudojamas _document.tsx. CMP skriptą patalpinkite savo pasirinktinio Document klasės <Head> komponente. beforeInteractive strategija Pages Router aplinkoje veikia taip pat.

Pagrindinis skirtumas tas, kad _document.tsx atvaizduojamas tik serveryje, todėl bet kokia čia esanti sutikimo logika garantuotai pateks į pradinį HTML atsaką.

Gatsby statinių svetainių integracija

Gatsby generuoja pilnai statinį HTML kompiliavimo metu. Užklausos metu serverio pusėje atvaizdavimo nėra, kas kai kuriuos dalykus supaprastina, o kitus apsunkina:

Gatsby kompiliavimo metu generuojamas HTML reiškia, kad kiekvienas HTML failas jūsų CDN turės sutikimo skriptą. Tai iš tikrųjų idealu — nėra serverio logikos, kuri galėtų sugesti ar neteisingai kešuotis.

Nuxt.js ypatumai

Nuxt.js (paremtas Vue) turi savo šablonus. Nuxt 3 aplinkoje naudokite useHead composable arba nuxt.config.ts programos head konfigūraciją, kad globaliai pridėtumėte CMP skriptą. Nuxt palaiko parinktį body: false (skriptai patalpinami head dalyje) ir async atributą neblokuojančiam įkėlimui.

Nuxt server-side renderinimo režime galioja tas pats principas: CMP skriptas turi būti pradiniame HTML atsake, o ne dinamiškai įterptas Vue komponento po mount.

Išvengiant išdėstymo šuolių

Sutikimo juostos yra pagarsėjusios tuo, kad sukelia Cumulative Layout Shift (CLS), Core Web Vital rodiklį, kuris veikia SEO reitingus. Kai juosta iššoka po puslapio atvaizdavimo, ji nustumia turinį žemyn arba netikėtai jį uždengia.

Strategijos, kaip sumažinti CLS dėl sutikimo juostų:

FlexyConsent karkasams neutralus požiūris

FlexyConsent sukurtas taip, kad veiktų su bet kuriuo karkasu — ar net be karkaso — veikdamas skripto, o ne komponento lygiu. Štai kodėl tai svarbu:

Programuotojo patarimas: Paprasčiausias testas, ar CMP integruotas teisingai, — atidarykite naršyklės Network skiltį, filtruokite pagal Google domenus ir perkraukite puslapį. Jokios Google užklausos neturėtų būti siunčiamos prieš pasirodant sutikimo numatytojo nustatymo komandai konsolėje. Jei jos vis dėlto siunčiamos, jūsų CMP įsikrauna per vėlai.

FlexyConsent nemokamas planas palaiko neribotą puslapių peržiūrų skaičių ir veikia su Next.js, Gatsby, Nuxt, Astro, SvelteKit, Remix ir paprastu HTML. Integracija visur vienoda: viena script žyma, tinkamai patalpinta.

← Tinkladevlaraderegistris Skaityti viską →