consentimiento de cookies para Astro

Consentimiento de cookies para Astro,
una integración

@cookiecrumbs/astro inserta la etiqueta como primer elemento del head de cada página, en tiempo de build para páginas prerenderizadas y por petición en SSR. Un middleware alimenta el lector de cookies del lado del servidor.

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

Las islas de Astro hidratan la analítica en cuanto se montan. Sin capa de consentimiento, el primer pintado de un sitio de contenido ya lleva un rastreador.

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 Astro

Los sitios Astro son sobre todo HTML estático con islas de interactividad, y eso es buena noticia para el consentimiento: el runtime puede escribirse en el HTML en tiempo de build, primero en el head de cada página, sin nada contra lo que competir. La integración hace exactamente eso para las páginas prerenderizadas y lo repite por petición para las renderizadas en servidor, así que un sitio híbrido se comporta igual en todas partes.

Las islas son donde se esconden los rastreadores. Un GTM cargado con Partytown, una isla de analítica solo cliente, un vídeo de YouTube en un componente client:visible: cada uno recibe una categoría en su etiqueta script o comprueba el estado del consentimiento antes de montarse. La integración incluye los componentes compartidos, y el middleware expone el consentimiento en Astro.locals para que una página decida en el servidor si renderiza un embed o su marcador.

Los sitios de contenido suelen tener cientos de páginas, y el escaneo las rastrea en cada estado de consentimiento hasta el presupuesto de tu plan. El resultado alimenta la declaración de cookies, que puedes montar en tu página de privacidad con CookieDeclaration y que se actualiza sola cuando el siguiente escaneo encuentra algo nuevo.

configuración

Configúralo en Astro

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 Astro, vincula el sitio, escribe la configuración.

    npx cookiecrumbs login
    npx cookiecrumbs init
  2. Añade la integración

    Una línea en astro.config.mjs. Con auto: false colocas <CookieCrumbs /> tú mismo en tu layout.

    npm i @cookiecrumbs/astro
    
    // astro.config.mjs
    import { defineConfig } from 'astro/config';
    import cookiecrumbs from '@cookiecrumbs/astro';
    
    export default defineConfig({
      integrations: [cookiecrumbs({ site: 'pk_live_…', env: 'production' })],
    });
  3. Bloquea lo que necesita consentimiento

    Las etiquetas sujetas a consentimiento reciben type="text/plain" y una categoría. Las islas que cargan rastreadores pueden comprobar el estado del consentimiento antes de montarse.

    <script type="text/plain" data-cc-category="analytics"
            src="https://www.googletagmanager.com/gtag/js?id=G-XXXX"></script>
  4. Léelo en el servidor si quieres

    El middleware pone el consentimiento en locals, así que una página puede omitir por completo un embed para los visitantes que dijeron no.

    // src/pages/index.astro
    const { consent } = Astro.locals;
    const showVideo = consent?.isGranted('marketing');
  5. Escanear, clasificar, publicar

    El escaneo rastrea el sitio construido en cada estado de consentimiento. Clasifica una vez, publica.

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

ojo

Errores que vemos en apps Astro

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

  • Cargar el runtime a través de PartytownEl runtime necesita el hilo principal y tiene que ejecutarse primero. Partytown es para los rastreadores, no para lo que los bloquea.
  • Una isla de YouTube o Maps sin marcadorUn iframe pone cookies al cargar. Reténlo con una categoría y muestra un marcador hasta que se conceda marketing.
  • Transiciones de vista que vuelven a disparar la analíticaUna página vista en cada transición sigue necesitando consentimiento. Comprueba isGranted antes de enviar.
  • Etiquetar solo el layoutLas páginas con sus propios slots de head se saltan el layout. La integración cubre todas las páginas; las etiquetas puestas a mano no.
  • Sin enlace para retirar el consentimientoLos sitios estáticos lo olvidan con más frecuencia. Un ManageCookiesLink en el pie basta.

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

¿Funciona con páginas prerenderizadas y renderizadas en servidor?
Ambas. La integración escribe la etiqueta en tiempo de build para páginas estáticas y por petición para SSR, siempre como primer elemento del head.
¿Puedo colocar la etiqueta yo mismo?
Sí. Pon auto: false y coloca el componente CookieCrumbs de @cookiecrumbs/astro/CookieCrumbs.astro en tu layout.
¿Funciona con Partytown?
Sí, para los rastreadores. El propio runtime de consentimiento se ejecuta en el hilo principal, primero, y los valores por defecto de Consent Mode existen antes de que el worker cargue GTM.
¿Cómo gestiona el escaneo un sitio de contenido grande?
Rastrea hasta el presupuesto mensual de tu plan, 100 subpáginas al mes por dominio en Free y 10.000 en Pro, en cada estado de consentimiento, y vuelve a escanear según un calendario.
¿Puedo mostrar la lista de cookies en una página?
Monta CookieDeclaration en tu página de privacidad. Renderiza la lista pública del último escaneo en el idioma del visitante.
¿Qué adaptadores se admiten?
Cualquier adaptador que produzca HTML: Node, Vercel, Netlify, Cloudflare. La integración se engancha a la inyección de head de Astro, no al adaptador.

siguiente paso

Publica el banner con el siguiente despliegue

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