consentimiento de cookies para React

Consentimiento de cookies para React,
una etiqueta y un componente

Una app Vite o CRA recibe el runtime como primera etiqueta en index.html, y luego @cookiecrumbs/react te da ConsentGate, CookieDeclaration y ManageCookiesLink para el árbol.

Lo que cambia en el head de una página React 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 React

Una single-page app en React carga su analítica en main.tsx antes de que exista ninguna UI. Un componente de banner añadido después muestra una elección, pero no puede deshacer lo que ya se ejecutó.

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 React

Una SPA en React tiene un solo archivo HTML, y ahí es donde tiene que empezar el consentimiento. El runtime va en index.html como primer script del head, antes del bundle de Vite o Webpack. Instala su interceptor de forma síncrona, antes incluso de descargar tu configuración, así que todo lo que el bundle intente inyectar después queda atrapado.

Dentro del árbol tienes dos herramientas. ConsentGate renderiza sus hijos solo cuando una categoría está concedida y muestra tu alternativa en caso contrario, que es la forma correcta de montar un widget de chat, un vídeo incrustado o un proveedor de analítica. La API del runtime en window, envuelta por @cookiecrumbs/react como hook, le dice a cualquier componente el estado actual, el régimen, el idioma y el id de consentimiento, y le da open() para reabrir el banner desde un enlace del pie.

Patrones de React populares que hacen tropezar: un proveedor de analítica en la cima del árbol que se dispara al montar, un router que envía páginas vistas en cada navegación y un useEffect que inyecta un píxel. Cada uno va dentro de un gate o comprueba isGranted("analytics") antes de hacer nada. El escaneo de tu sitio desplegado muestra cuáles siguen disparándose antes del consentimiento, con el script que lo hizo.

configuración

Configúralo en React

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 un proyecto React plano, vincula el sitio, escribe la configuración e imprime el snippet.

    npx cookiecrumbs login
    npx cookiecrumbs init
  2. Pon la etiqueta primero en index.html

    Antes de tu bundle, antes de todo. El runtime instala su interceptor de forma síncrona.

    <!-- index.html -->
    <head>
      <script src="https://app.cookiecrumbs.eu/runtime/cc.js"
        data-cc-site="pk_live_…"
        data-cc-env="production"></script>
      …
    </head>
  3. Bloquea los scripts y componentes sujetos a consentimiento

    Una etiqueta type="text/plain" con categoría permanece inactiva hasta que se concede. En el árbol, ConsentGate renderiza sus hijos solo cuando la categoría está concedida.

    <script type="text/plain" data-cc-category="analytics"
            src="https://www.googletagmanager.com/gtag/js?id=G-XXXX"></script>
    
    // in the app
    import { ConsentGate } from '@cookiecrumbs/react';
    <ConsentGate category="marketing">
      <MetaPixel />
    </ConsentGate>
  4. Da a la gente una forma de volver

    Un enlace del pie que reabre el banner es la vía de retirada que espera el artículo 7(3).

    import { ManageCookiesLink } from '@cookiecrumbs/react';
    <ManageCookiesLink>Manage cookies</ManageCookiesLink>
  5. Escanear, clasificar, publicar

    El escaneo encuentra lo que el bundle carga de verdad. Clasifica una vez por proveedor, publica, listo.

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

ojo

Errores que vemos en apps React

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

  • Inyectar el runtime desde un useEffectLos efectos se ejecutan tras el primer render. Para entonces el bundle ha cargado y el proveedor de analítica se ha disparado. La etiqueta va en index.html.
  • Tratar las cookies «de sesión» como necesariasLa necesidad es cuestión de función, no de duración. Una cookie de sesión de una herramienta de marketing sigue siendo marketing.
  • Guardar el consentimiento solo en el estado de ReactUna recarga lo olvida y el banner vuelve a preguntar. Deja que el runtime posea la cookie y lee de ella.
  • Un banner para todos los paísesEE. UU. necesita opt-out y GPC, la UE necesita opt-in. Las reglas por región eligen la correcta según la ubicación del visitante.
  • Probar solo en localhostEl escaneo y la comprobación de instalación necesitan la URL desplegada. Usa la clave de preview en un despliegue de staging.

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

¿Necesito un paquete npm?
No. La etiqueta script basta para el bloqueo y el banner. @cookiecrumbs/react añade componentes y hooks tipados para árboles React.
¿Cómo leo el estado del consentimiento en un componente?
La API del runtime lo expone en window y @cookiecrumbs/react lo envuelve como hook, así que un componente puede renderizar un marcador hasta que se conceda la categoría.
¿Y una app React que usa Google Tag Manager?
Dale a la etiqueta de GTM type="text/plain" con una categoría, o deja que Consent Mode v2 se encargue: el runtime pone las siete señales en «denied» antes de que cargue GTM y las actualiza con el consentimiento.
¿Funciona con Remix, Gatsby o Vite SSR?
Todo lo que renderiza un documento HTML funciona con la etiqueta script como primer elemento del head. Los componentes React funcionan en cualquier árbol React.
¿Va a arruinar mi puntuación de Lighthouse?
El runtime pesa 21 kB comprimido, es asíncrono y no hace peticiones propias a terceros. Los diseños de barra y cinta reservan espacio antes del pintado, así que no hay desplazamiento.
¿Cómo muestro la lista de cookies en mi página de privacidad?
Monta CookieDeclaration donde quieras. Renderiza la lista pública de cookies de tu último escaneo, en el idioma del visitante.

siguiente paso

Publica el banner con el siguiente despliegue

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