Caché de páginas, CDN y banners de consentimiento: cómo evitar servir el estado de consentimiento equivocado
Páginas rápidas, consentimiento equivocado
El almacenamiento en caché de páginas es una de las mejores cosas que puedes hacer por la velocidad y los costes de alojamiento. También es una de las formas más fáciles de romper una configuración de consentimiento sin darte cuenta. Una caché hace exactamente lo que se le dice: guarda una respuesta una vez y la sirve a todos los que coinciden con la misma clave. Si esa respuesta almacenada contiene algo específico de la elección de consentimiento o la ubicación de un visitante, el siguiente visitante también lo recibe.
Esta guía cubre las capas de caché que suelen situarse delante de un sitio de publisher — cachés de borde de CDN, plugins de caché de página completa, reverse proxies, service workers y el propio navegador — y cómo evitar que cada una sirva la experiencia de consentimiento equivocada.
La regla básica: mantener el consentimiento fuera del HTML en caché
La arquitectura más segura genera la página HTML en caché neutral respecto al consentimiento. La página contiene el cargador del CMP y tus etiquetas en estado bloqueado o en espera, pero ninguna decisión sobre este visitante en concreto. Después el CMP se ejecuta en el navegador, lee la elección guardada, decide si mostrar el banner y libera las etiquetas en consecuencia.
Los problemas empiezan cuando el servidor toma decisiones de consentimiento en el momento del renderizado, por ejemplo:
- un tema o plugin que solo imprime las etiquetas publicitarias o de analítica cuando hay una cookie de consentimiento;
- código del lado del servidor que omite el marcado del banner para los visitantes que ya eligieron;
- plantillas que incrustan el estado de consentimiento de un visitante en una variable de script en línea.
Una vez que esa página se guarda en caché, el estado del primer visitante pasa a ser el de todos. Un visitante que rechazó el rastreo puede recibir una página con las etiquetas ya activas, o un visitante nuevo puede no ver nunca un banner porque la copia en caché procede de alguien que ya lo había cerrado.
Por qué «Vary: Cookie» rara vez es la respuesta
La solución de manual para el contenido por visitante es indicar a las cachés que varíen según la cabecera de cookies. En la práctica, los visitantes llevan muchas cookies con valores únicos, así que variar según toda la cabecera de cookies suele dejar tu tasa de aciertos de caché casi en cero. Algunos CDN permiten construir la clave de caché a partir de un único valor de cookie, lo cual es viable si tu cookie de consentimiento tiene pocos estados posibles, pero añade complejidad y aun así multiplica el número de copias en caché. Trasladar la decisión al navegador es más sencillo y mantiene la caché eficiente.
La geografía en el borde
Muchos publishers muestran banners distintos según la región: un banner de opt-in para la UE y el Reino Unido, un aviso de exclusión para los estados de EE. UU. y algo más ligero en el resto. Si el servidor elige la variante según la dirección IP del visitante y esa página se guarda en caché, un lector europeo puede recibir una página estadounidense en caché, o al revés.
Tres patrones evitan esto:
- Geolocalización en el cliente. Deja que el CMP determine la región en el navegador, de modo que el HTML en caché sea el mismo para todos.
- El país en la clave de caché. Si debes decidir en el borde, incluye en la clave de caché el código de país que proporciona tu CDN. Obtienes una copia en caché por país, lo cual es predecible.
- Lógica de borde sin caché. Ejecuta la decisión regional en una función de borde que inyecte un pequeño valor sin caché en una página que por lo demás sí está en caché.
Elijas lo que elijas, documéntalo. Los errores geográficos están entre los más difíciles de reproducir, porque solo aparecen para visitantes de un lugar que casualmente reciben una página guardada en caché por alguien de otro.
Almacenar en caché el propio script del CMP
Guardar en caché el cargador del CMP durante mucho tiempo es bueno para el rendimiento, pero tiene un coste cuando cambia la configuración. Si actualizas proveedores, finalidades o el texto del banner y el script o el archivo de configuración está en caché durante un año, algunos visitantes seguirán viendo la versión antigua. Comprueba cómo versiona sus archivos tu CMP: un nombre de archivo o un parámetro de versión que cambie te permite almacenar en caché de forma agresiva y aun así desplegar los cambios de inmediato. Confirma también que tu propio CDN no elimina las cadenas de consulta de las URL de scripts de terceros si el CMP depende de ellas.
Service workers y cachés sin conexión
Los sitios con una capa de aplicación web progresiva suelen guardar HTML en caché en un service worker. Se aplica la misma regla: nunca almacenes una página que refleje una decisión de consentimiento concreta. Excluye de la caché del service worker los endpoints relacionados con el consentimiento y las páginas del centro de preferencias, y asegúrate de que siempre se pueda obtener una configuración reciente del CMP.
La caché de ida y vuelta
Los navegadores modernos mantienen en memoria las páginas visitadas recientemente para que el botón de retroceso las restaure al instante. Si un visitante abre el centro de preferencias en una página, retira el consentimiento y luego pulsa retroceso, la página restaurada puede seguir teniendo etiquetas en ejecución de antes. Escucha el evento pageshow y comprueba su propiedad persisted: cuando una página se restaura desde esta caché, vuelve a leer el estado de consentimiento guardado y detén o inicia las etiquetas para que coincidan.
Una rutina de pruebas
- Carga una página en una sesión limpia, rechaza, carga una segunda página y confirma que no se dispara ninguna etiqueta de rastreo.
- Repite con un segundo navegador limpio y confirma que aparece el banner, lo que demuestra que no quedó eliminado por la caché.
- Revisa las cabeceras de respuesta para ver si las páginas se sirven desde la caché, y compara el HTML con y sin cookie de consentimiento — debería ser idéntico.
- Prueba desde al menos dos regiones tras purgar la caché, y de nuevo cuando la caché esté caliente.
- Retira el consentimiento, usa el botón de retroceso y verifica que las etiquetas se detienen.
Conclusiones clave
- El HTML en caché debe ser neutral respecto al consentimiento; deja que el CMP decida en el navegador.
- Evita variar según toda la cabecera de cookies; destruye las tasas de aciertos.
- Si los banners difieren por región, decide en el cliente o añade el país a la clave de caché.
- Versiona los archivos del CMP para que las duraciones largas de caché no retrasen los cambios de configuración.
- Gestiona los service workers y la caché de ida y vuelta, y prueba con la caché caliente, no solo tras una purga.