Consentl z Nuxt

Dodaj skrypt ładujący Consentl do Nuxt 3 i 4 za pomocą app.head i tagPriority 0, aby był renderowany przed każdym innym skryptem.

Skrypt ładujący jako pierwszy w <head>
Tak

Skrypt ładujący musi być pierwszym skryptem w <head> i musi być synchroniczny. Menedżer sekcji head w Nuxt (Unhead) sortuje tagi <head> według wagi; tagi o niższej wadze są renderowane jako pierwsze:

Tag Waga
charset −20
viewport −15
title 10
skrypt async 30
skrypt synchroniczny 50
arkusz stylów 60
punkt wejścia modułu Nuxt 80

tagPriority: 0 umieszcza skrypt ładujący przed każdym innym skryptem. "critical" (waga 42) znalazłby się nadal po skryptach async.

nuxt.config.ts

export default defineNuxtConfig({
  app: {
    head: {
      script: [
        {
          src: `https://api.consentl.com/v1/loader.js?k=${process.env.NUXT_PUBLIC_CONSENTL_SITE_KEY}&l=en`,
          tagPosition: "head",
          tagPriority: 0,
        },
      ],
    },
  },
});

Język dla każdego żądania (@nuxtjs/i18n)

W app.vue należy użyć tych samych opcji:

const { locale } = useI18n();
useHead({
  script: [{ src: computed(() => `https://api.consentl.com/v1/loader.js?k=${key}&l=${locale.value}`), tagPosition: "head", tagPriority: 0 }],
});

Zmiana języka po stronie klienta nie przeładowuje banera; nowy język obowiązuje od następnego pełnego załadowania strony.

Inne tagi (app.head lub useHead)

Każdemu tagowi, który musi czekać na zgodę, należy nadać type: "text/plain" i jego kategorię Consentl. Nuxt zapisuje go bez zmian, przeglądarka go nie pobiera, a Consentl uruchamia go jeden raz po wyrażeniu zgody:

script: [
  { src: loader, tagPosition: "head", tagPriority: 0 }, // the Consentl loader, as above
  { src: "https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX", type: "text/plain", "data-consentl": "analytics" },
  {
    innerHTML: "window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag('js',new Date());gtag('config','G-XXXXXXX');",
    type: "text/plain",
    "data-consentl": "analytics",
  },
],

Zwykły tag { src, async: true } również jest wstrzymywany w planie Business i uruchamia się tylko raz, mimo że Nuxt dodaje jego drugą kopię podczas uruchamiania strony, ale przeglądarka pobiera go przed wyrażeniem zgody. W naszym teście (Nuxt 4.6, tag Google): zwykły tag async – jedno żądanie przed zgodą i jedno uruchomienie po niej; type: "text/plain" – brak żądania przed zgodą i jedno uruchomienie po niej.

Sprawdzenie działania

Należy wyświetlić źródło strony: skrypt ładujący jest pierwszym <script> w <head>. Następnie należy wykonać kontrole opisane w poradniku Każda strona internetowa. Nawigacja po stronie klienta nie wymaga niczego dodatkowego, a dane strony Nuxt (__NUXT_DATA__, window.__NUXT__) nigdy nie są wstrzymywane. Przetestowano z Nuxt 4.6.

Consent Mode wymaga planu Pro lub wyższego, a automatyczne blokowanie znanych narzędzi śledzących – planu Business. Tagi zapisane w kodzie HTML strony (na przykład przez app.head) są pobierane przed wyrażeniem zgody, chyba że zostaną oznaczone tak, jak pokazano w sekcji Inne tagi (zob. też Każda strona internetowa).

Ograniczenia

  • Nie należy dodawać skryptu ładującego po raz drugi z komponentu ani wtyczki: musi być ładowany raz na dokument.
  • Jeżeli wysyłają Państwo nagłówek Content Security Policy, należy zezwolić na https://api.consentl.com (zob. Każda strona internetowa).

Potrzebują Państwo pomocy? Prosimy pisać na adres support@consentl.com — odpowiadamy po angielsku w dni robocze.