Auditoría de consentimiento: ¿qué se ejecuta antes de que alguien haga clic en «Aceptar»?
La lección detrás de este skill (Dr. Erin Toussaint Jacques, reel de IG, octubre de 2026): las aplicaciones creadas con vibecoding son una forma fácil de ser demandado, porque nadie comprueba si el píxel de rastreo se dispara antes de que el visitante haga clic en «Aceptar». Un píxel es un pequeño fragmento de código de Meta, Google y otros que rastrea lo que la gente hace en tu sitio. Según la ley de escuchas telefónicas de California (CIPA), el rastreo que comienza antes del consentimiento puede tratarse como escucha telefónica, con daños legales de hasta 5.000 $ por infracción, y los juicios por píxeles ya suman miles. Tener un banner y esperar el permiso son dos cosas diferentes. Muchos sitios demandados tenían un banner; el rastreo se cargaba en cuanto se abría la página.
Por lo tanto, esta auditoría responde a una pregunta con evidencia: en una visita nueva, antes de cualquier clic, ¿qué se carga, qué se envía y a quién?
Esto es una auditoría de ingeniería, no un asesoramiento legal. Nunca le digas a nadie que es «cumplidor». Di lo que se encontró, lo que se corrigió, lo que no se revisó y que un abogado debe revisarlo si publican anuncios o venden en la UE o California.
Predeterminado: solo lectura
No cambies nada en este skill: sin ediciones, publicaciones, cambios en la base de datos o autenticación, nuevos servicios ni aceptación de términos. Las correcciones son trabajo de consent-gate, una vez que el propietario esté de acuerdo.
Paso 1: Inventario del código
Si el código es local (o un clon de GitHub de un proyecto de Lovable), ejecuta el escáner:
python3 ~/.claude/skills/consent-audit/scripts/scan_trackers.py /ruta/a/la/app
Enumera cada rastreador, píxel, analítica, grabación, embed y firma de script de terceros que encuentre, por archivo y línea, marca las líneas que parecen enviar correos electrónicos o IDs de usuario, e indica si aparece una comprobación de consentimiento cerca. Una nota de «comprobación de consentimiento cerca» es una pista, no una prueba. Lee el código alrededor de cada acierto para confirmar:
- Dónde comienza.
index.html<head>,main.tsx,App.tsx,_app/layouto un proveedor significa que se ejecuta en cada página, para cada visitante. - Qué lo protege. ¿La etiqueta del script,
importoinit()se ejecuta solo después de una aceptación afirmativa almacenada? Un banner que se oculta mientrasgtag('config')ya se ejecutó no es una protección. - Qué envía.
identify(email),setUser({ email }), la coincidencia avanzada de Meta (em,ph), URLs completas con cadenas de consulta?o fragmentos#(códigos de regalo, tokens de restablecimiento, texto de búsqueda) y campos de formulario. - Reenvío del lado del servidor. Conversions API,
/api/track, funciones edge que publican en Meta/Google/Segment. Estos deben respetar la misma elección.
Si no hay código local (un proyecto de Lovable al que solo puedes acceder en el navegador), usa el prompt de solo auditoría en references/prompts.md dentro del chat de ese proyecto, luego verifica su informe con el Paso 2.
Paso 2: Comprobar el sitio en vivo (la parte que un banner no puede falsear)
El código puede mentir por omisión (gestores de etiquetas, complementos del hosting, fragmentos del CMS). Siempre comprueba la URL publicada en una pestaña del navegador nueva y sin cookies:
- Abre el sitio en un nuevo contexto privado (en el navegador integrado de Claude: una nueva pestaña después de borrar el almacenamiento, o un sitio nunca visitado allí). No hagas clic en nada.
- Lee las peticiones de red (
read_network_requests). Cualquier petición a un dominio de anuncios, analíticas o grabación de sesiones antes de un clic es un hallazgo: enumera el dominio, la ruta de la URL y si lleva identificadores (fbp,_ga,cid,uid,em,ttp). - Lee las cookies y el almacenamiento mediante
javascript_tool:document.cookie,Object.keys(localStorage). Anota cualquier_ga,_fbp,_gcl_au,_ttp,_hj*,ph_*,ajs_*,_clcko_uetsid. - Haz clic en Rechazar (o cierra el banner si no hay opción de rechazar). Navega a dos páginas más. Cualquier cosa nueva que se dispare es un hallazgo.
- Haz clic en Aceptar en un contexto nuevo. Confirma que los rastreadores se cargan ahora, para que la protección no esté simplemente rota.
- Inicia sesión con una cuenta de prueba si existe (nunca con la de un cliente real). Comprueba si el correo electrónico o el ID de usuario sale en alguna petición de rastreador.
Paso 3: Comprobar la configuración del hosting y la plataforma
Los rastreadores inyectados por el hosting no aparecen en el código de la aplicación:
- Lovable: Proyecto → Configuración → Analíticas de visitantes. Está activado por defecto; apágalo (o protégelo) en todos los proyectos, incluidos los nuevos.
- Vercel (Web Analytics / Speed Insights), Netlify (Analytics), Cloudflare (Web Analytics, Zaraz), Framer/Webflow/Wix/Squarespace (configuración del sitio → código personalizado / analíticas / píxeles), EzyCourse / Systeme / Kajabi (campos de código de rastreo, campo de píxel de Facebook).
- Gestores de etiquetas: abre el contenedor de GTM y enumera cada etiqueta y su activador. «Todas las páginas» sin una condición de consentimiento significa que se dispara antes del consentimiento.
Paso 4: Clasificar e informar
Clasifica cada elemento:
| Clase | Ejemplos | Regla |
|---|---|---|
| Necesario | sesión de inicio de sesión, CSRF, carrito, Stripe en la página de pago, comprobaciones de fraude/bots, preferencias de UI guardadas | Puede ejecutarse sin consentimiento. No se necesita banner solo para estos. |
| Embed funcional | Mapbox en la página del mapa, reproductores de YouTube/Vimeo, Calendly, widgets de chat | Cargar solo donde se usen. Preferir modos de carga al hacer clic o modos de privacidad (youtube-nocookie). |
| Opcional | píxeles publicitarios, GA/GTM, PostHog, Hotjar, Clarity, HeyCatch, grabación de sesiones, retargeting | No debe cargar, obtener ni inicializar hasta que el visitante opte por esa categoría. |
Formato del informe (mantenlo breve y basado en evidencia):
AUDITORÍA DE CONSENTIMIENTO: <app> (<url>), <fecha>
Antes de cualquier clic: <N> rastreadores opcionales se dispararon -> APTO / NO APTO
| Proveedor | Dónde comienza (archivo:línea o configuración del hosting) | ¿Se dispara antes del consentimiento? | ¿Envía datos de identidad/URL? | Clase | Corrección mínima |
Servicios necesarios (OK sin consentimiento): ...
Aviso de privacidad: presente/ausente, ¿enlazado desde el pie de página? ¿lista precisa de proveedores?
Opción de retirar el consentimiento: ¿hay un enlace persistente «Opciones de privacidad»?
¿Se honra Global Privacy Control? sí/no/no probado
Cambios no publicados que la publicación también lanzaría: ...
No revisado: ...
No es asesoramiento legal. Pide a un abogado que lo revise si publicas anuncios, atiendes a visitantes de California/UE o colocas píxeles en páginas de vídeo.
Luego ofrece consent-gate para aplicar las correcciones. Si un rastreador no está justificando su existencia, recomienda eliminarlo en lugar de protegerlo: ningún rastreador es el cumplimiento más barato (en auditorías reales, eliminar una herramienta de analíticas no utilizada solía ser toda la corrección).
Advertencias de auditorías reales
- Analíticas iniciadas desde el archivo de entrada de la aplicación (
src/main.tsx) en cada página para todos los visitantes, sin comprobación de consentimiento, y el código de inicio de sesión enviaba los correos electrónicos e IDs de usuario de los clientes conectados a la herramienta de analíticas en cada inicio de sesión. La herramienta no podía eliminar las cadenas de consulta, por lo que se eliminó por completo. - Las Analíticas de visitantes de Lovable están activadas por defecto y son inyectadas por el hosting. No están en el código.
- Publicar libera todo lo no publicado. Antes de publicar una corrección de privacidad, enumera los cambios no publicados más antiguos que también se lanzarán (ayudas de inicio de sesión, actualizaciones de dependencias, correcciones de pago) y obtén la aprobación del propietario.
- Desactivar las analíticas no es lo mismo que desactivar la captura de datos. La propia base de datos de la aplicación (trabajo de estudiantes, progreso, mensajes) es propia y está separada. Dilo explícitamente, porque los propietarios se preocupan.
- Páginas de vídeo + píxel de Meta añaden otro riesgo federal (la Ley de Protección de la Privacidad de los Vídeos). Los sitios de cursos con lecciones en vídeo deben tratar cualquier píxel en esas páginas como alta prioridad.