Consentimiento de cookies para Next.js
El banner se carga con next/script y strategy="beforeInteractive" —la estrategia que Next.js documenta para gestores de consentimiento—, así que se ejecuta antes que tu analítica. Las etiquetas que cargas con next/script o @next/third-parties quedan retenidas hasta que el visitante acepta, y las de Google reciben las señales de Consent Mode v2.
Configúralo con tu agente de IA
Conecta el servidor MCP de Croombit a tu editor o agente de código y pega esto. Crea el sitio, las categorías de cookies y el banner, y edita tu código.
Con Croombit: crea un sitio para este proyecto con las categorías de cookies Analítica (ANALYTICS) y Publicidad (MARKETING), desactivadas por defecto, publícalas y publica el banner. Crea una clave publicable de TEST para localhost:3000. Es un proyecto Next.js con App Router: carga cmp.js en el layout raíz con next/script y strategy="beforeInteractive", leyendo la clave de NEXT_PUBLIC_CROOMBIT_KEY en .env.local, y añade un enlace "Configurar cookies" al pie.El agente trabaja en TEST. Pasar a LIVE son dos pasos en la consola: verificar tu dominio y cambiar a una clave LIVE; consulta pasar a LIVE.
O a mano
1. Carga el banner en el layout raíz
Pon la clave en .env.local como NEXT_PUBLIC_CROOMBIT_KEY (pk_test_… en desarrollo, pk_live_… en producción). beforeInteractive solo funciona en el layout raíz.
// app/layout.tsx
import Script from 'next/script';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
{/* beforeInteractive: loaded before any other script, as consent managers need */}
<Script
src="https://croombit.com/cmp.js"
strategy="beforeInteractive"
data-tc-api-key={process.env.NEXT_PUBLIC_CROOMBIT_KEY}
/>
{children}
</body>
</html>
);
}2. Tu analítica no necesita cambios
Los scripts que carga next/script se insertan por JavaScript, y cmp.js los intercepta: los proveedores conocidos quedan aparcados hasta que el visitante concede su categoría.
// Any tag loaded through next/script or @next/third-parties is inserted
// by JavaScript, so cmp.js holds known hosts (gtag.js, GTM, Meta Pixel…)
// until the visitor grants the matching category.
import { GoogleAnalytics } from '@next/third-parties/google';
<GoogleAnalytics gaId="G-XXXX" />Para una etiqueta que la lista de bloqueo no conozca, renderízala con type="text/plain" y data-tc-consent="analytics" (o marketing).
3. Un enlace «Configurar cookies»
'use client';
// Any element with data-tc-open-preferences reopens the panel,
// pre-set to the visitor's current choices.
export function CookieSettingsLink() {
return <a href="#" data-tc-open-preferences>Configurar cookies</a>;
}4. Registra los consentimientos que pide tu app
Los opt-in de newsletter, la aceptación de términos y similares se registran desde tu servidor —un Route Handler o una Server Action— con una clave secreta. Cada uno va a la bóveda de solo-anexado con un recibo firmado. Consulta Registrar y consultar consentimiento.
import { CroombitClient } from '@croombit/sdk';
// Server side, with a secret key — e.g. in your signup handler.
const tc = new CroombitClient({
baseUrl: 'https://api.croombit.com',
apiKey: process.env.CROOMBIT_SECRET_KEY!,
});
await tc.recordConsent(
{ subject: 'email:' + user.email, purpose: 'newsletter', state: 'GRANTED', channel: 'signup_form' },
{ idempotencyKey: crypto.randomUUID() },
);Preguntas
¿Funciona con el Pages Router?
Sí. Pon el mismo <Script strategy="beforeInteractive"> en pages/_document.tsx, dentro de <Head>.
¿La navegación en cliente vuelve a mostrar el banner?
No. La decisión se guarda una vez y vale para todas las rutas; el banner solo vuelve si publicas una versión que exige volver a consentir.
¿Puedo mantener mi propio diseño de banner?
Sí: el diseñador del banner cubre disposición, colores y textos. Para una interfaz totalmente propia, usa el SDK de JavaScript en lugar de cmp.js; consulta la guía del banner de cookies.
Relacionado
- Consentimiento de cookies para cualquier web
- Consentimiento de cookies para React
- Consentimiento de cookies para Vue y Nuxt
- Consentimiento de cookies para WordPress
- Consentimiento de cookies para Webflow
- Guía: banner de cookies
- Consola: Cookies (escáner)
- TCF, Consent Mode y GPP
- Google Consent Mode v2: modo básico frente a avanzado