consentimiento de cookies para Nuxt

Consentimiento de cookies para Nuxt,
un módulo

@cookiecrumbs/nuxt coloca la etiqueta al principio de app.head.script con prioridad critical, antes del chunk de entrada de Nuxt, e importa automáticamente un composable useConsent().

Lo que cambia en el head de una página Nuxt cuando el runtime va primero: nada no esencial se ejecuta hasta que se concede su categoría.

la norma

Lo que la ley exige a un sitio Nuxt

Una app Nuxt con un plugin de GA o de píxel lo ejecuta en la entrada del cliente. Nada pregunta antes, y nada puede deshacerlo.

La norma es la misma en toda la UE y en el Reino Unido: nada más allá de lo estrictamente necesario puede almacenarse en el dispositivo de un visitante ni leerse de él antes de que haya dado su consentimiento. Es el artículo 5(3) de la Directiva ePrivacy, y ese consentimiento debe cumplir la definición del RGPD: libre, específico, informado e inequívoco, con un rechazo tan fácil como la aceptación. El Reino Unido mantiene la misma norma en PECR, con exenciones limitadas para estadísticas de bajo riesgo desde el 5 de febrero de 2026. California y las demás leyes estatales de EE. UU. funcionan al revés: sin opt-in, pero con un enlace de opt-out y soporte para la señal Global Privacy Control.

De ahí se derivan tres cosas para un sitio web. Los scripts de analítica, publicidad y redes sociales tienen que esperar una decisión. La decisión tiene que registrarse de forma que puedas demostrarla después, porque el artículo 7(1) pone la carga de la prueba sobre ti. Y retirar el consentimiento tiene que ser tan fácil como darlo, lo que exige un control que vuelva a abrir el banner en cada página. Un banner que muestra dos botones y carga Google Analytics de todos modos suspende la primera prueba, y ese es justo el fallo que las autoridades están sancionando, desde las decisiones de la CNIL contra Google y SHEIN hasta las inspecciones de las autoridades neerlandesa y belga.

cómo funciona

Cómo funciona el consentimiento en una app Nuxt

Nuxt gestiona el head del documento por ti, que es exactamente donde tiene que estar un runtime de consentimiento. El módulo pone la etiqueta en app.head.script con tagPriority: "critical", así que se renderiza antes del chunk de entrada de Nuxt en cada página, renderizada en servidor o estática. Sin editar layouts ni llamadas de head por página.

Los plugins de cliente son la fuente habitual de rastreadores tempranos en Nuxt: un plugin gtag, un plugin de Pixel, un módulo de terceros que inyecta su propio script. El composable useConsent() les da a todos isGranted(category) y una forma de suscribirse a los cambios, así que un plugin puede esperar e inicializarse en el momento en que llega el consentimiento. Los módulos de Nuxt de terceros que inyectan scripts reciben una categoría en su etiqueta, o su host queda neutralizado por el mapa de bloqueo del escaneo.

Tres componentes vienen con el módulo: ConsentGate para subárboles, CookieDeclaration para la página de privacidad y ManageCookiesLink para el pie. Las rutas de servidor y el middleware pueden leer la cookie de consentimiento con los mismos helpers, así que una página puede renderizar un marcador en lugar de un embed antes de la hidratación.

configuración

Configúralo en Nuxt

Cinco pasos. La CLI hace la mayoría, y cada uno es también un clic en el panel.

  1. Init desde el repositorio

    Detecta Nuxt, vincula el sitio, escribe la configuración.

    npx cookiecrumbs login
    npx cookiecrumbs init
  2. Añade el módulo

    La clave del sitio y el entorno van en nuxt.config.ts.

    npm i @cookiecrumbs/nuxt
    
    // nuxt.config.ts
    export default defineNuxtConfig({
      modules: ['@cookiecrumbs/nuxt'],
      cookiecrumbs: { site: 'pk_live_…', env: 'production' },
    });
  3. Usa el composable

    useConsent() expone status, consent, regime, country, language, version y las acciones accept, reject, open y withdraw.

    const { isGranted, open } = useConsent();
    
    <ConsentGate category="analytics">
      <AnalyticsWidget />
    </ConsentGate>
  4. Haz que los plugins esperen

    Un plugin de cliente inicializa su rastreador solo cuando se concede la categoría, y de nuevo si el consentimiento cambia después.

    // plugins/pixel.client.ts
    export default defineNuxtPlugin(() => {
      const { isGranted, onChange } = useConsent();
      const start = () => { if (isGranted('marketing')) initPixel(); };
      start(); onChange(start);
    });
  5. Escanear, clasificar, publicar

    Escanea, clasifica una vez por proveedor, publica.

    npx cookiecrumbs scan --wait
    npx cookiecrumbs push --env production

ojo

Errores que vemos en apps Nuxt

Cada uno aparece en el primer escaneo como un rastreador que se disparó antes del consentimiento.

  • Un plugin gtag con mode: "client" y sin gateSe ejecuta en el chunk de entrada. Bloquéalo con el composable o deja que Consent Mode lleve los valores por defecto.
  • Usar useHead en una página para añadir el runtimeEl head a nivel de página se ejecuta después del head de la app. La prioridad critical del módulo es lo que mantiene la etiqueta primero.
  • Rutas de Nitro que ponen cookies de seguimientoLas cookies del lado del servidor para atribución siguen siendo cookies. Mantenlas estrictamente necesarias o ponlas tras el consentimiento.
  • Ignorar el entorno de vista previaLa clave de preview en un despliegue de staging te permite probar una nueva versión del banner sin tocar a los visitantes.
  • No volver a preguntar tras añadir una categoríaAñade una nueva finalidad y el runtime vuelve a preguntar. No lo suprimas; es lo que mantiene válido el consentimiento.

antes de publicar

La lista de comprobación

Ocho líneas. El panel marca las dos últimas con datos reales.

  • La etiqueta es el primer script del headCualquier cosa por encima puede poner una cookie que el runtime no puede retirar.
  • Cada script de analítica, anuncios y redes sociales espera a su categoríaO bien type="text/plain" con una categoría, o bien el host está en el mapa de bloqueo del escaneo.
  • «Rechazar todo» está en la primera capaMismo tamaño y mismo peso que «Aceptar todo». Sin «X» que cuente como consentimiento ni casillas premarcadas.
  • Los valores por defecto de Consent Mode están en «denied» antes de que cargue GoogleComprueba las siete señales en Tag Assistant con el consentimiento denegado.
  • Los enlaces al aviso legal y a la política de privacidad están configuradosLa publicación se rechaza hasta que estén los dos; el pie del banner enlaza a ellos.
  • Hay un control para retirar el consentimiento en cada páginaEl control permanente o un enlace «Gestionar cookies» en tu pie de página.
  • El primer escaneo completo se ejecutó y cada proveedor está clasificadoEl veredicto en Inicio dice, con fecha, qué se disparó antes del consentimiento.
  • La comprobación de instalación se ha superadoCarga tu página como un visitante y confirma que el banner se ejecutó antes que cualquier rastreador.

lo que obtienes

Lo que incluye el plan gratuito

Dos dominios, 100 subpáginas escaneadas al mes por dominio, todas las normativas, la CLI, los SDK y el servidor MCP.

Un escáner que lee la página renderizada

Cada página, en cada estado de consentimiento, en un navegador real. Cookies, píxeles, iframes y claves de almacenamiento, con la página y el script que los pusieron. Se vuelve a escanear según un calendario.

La declaración de cookies se escribe sola a partir del resultado.

Un banner que bloquea primero

Las etiquetas permanecen inactivas hasta que se concede su categoría. «Rechazar todo» es tan visible como «Aceptar todo». Siete diseños, 25 idiomas, Consent Mode v2 y la norma correcta por región.

21 kB, un solo archivo, sin peticiones propias a terceros.

Una prueba que puedes entregar

Cada decisión se guarda con marca de tiempo, versión del banner y un hash de los textos mostrados, encadenada al registro anterior. Las exportaciones van firmadas. Alojado en Fráncfort.

Artículo 7(1), en el plan gratuito.

comprobación gratuita

Comprueba qué carga tu sitio ahora mismo

El HTML de la página de inicio, contrastado con la base de datos de rastreadores. Sin cuenta, sin guardar nada. El escaneo completo del panel hace lo mismo con cada página, en un navegador real.

preguntas

Respuestas claras

¿El módulo mantiene la etiqueta por delante de mis plugins?
Sí. Se inyecta con tagPriority critical, antes del chunk de entrada de Nuxt, así que los valores por defecto del consentimiento existen antes de que se ejecute cualquier plugin.
¿Qué componentes vienen con el módulo?
ConsentGate, CookieDeclaration y ManageCookiesLink, más el composable useConsent() con status, consent, regime, country, language, version, consentId y las acciones accept, reject, set, open, close, withdraw y setLang.
¿Funciona con Nuxt Content o con una build estática?
Sí. La generación estática escribe la etiqueta en cada archivo HTML; el SSR la renderiza por petición.
¿Puedo leer el consentimiento en una ruta de servidor?
Sí. Los helpers de cookies funcionan en Nitro, así que una ruta de API puede omitir una llamada de seguimiento para un visitante que dijo no.
¿Y Google Tag Manager?
Mantén el módulo de GTM. El runtime fija primero los valores por defecto de Consent Mode v2 y la plantilla de GTM añade los activadores.
¿Hay una versión para Vue 3 sin Nuxt?
Usa la etiqueta script y la API del runtime. El módulo es una capa fina sobre el mismo runtime.

siguiente paso

Publica el banner con el siguiente despliegue

Añade el sitio, ejecuta npx cookiecrumbs init en tu repositorio Nuxt y el registro de consentimiento empieza a grabar en la UE.