tva
← Artículos

Analítica centrada en la privacidad: Plausible autoalojado con Google Search Console

El panorama de la analítica web ha cambiado considerablemente desde que el GDPR entró en vigor en 2018. En la práctica, la mayoría de las organizaciones sigue usando Google Analytics 4 en sus sitios —no porque sea la mejor herramienta, sino porque migrar parece costoso y las alternativas parecen de nicho—. A mediados de 2024 pasamos de Google Analytics a Plausible CE autoalojado, y los resultados merecen documentarse en detalle.

Por qué dejamos Google Analytics

Google Analytics 4 es una plataforma capaz. Sin embargo, la carga de cumplimiento normativo es considerable. Ejecutar GA4 en una configuración realmente conforme al GDPR requiere un aviso de consentimiento de cookies, una plataforma de gestión del consentimiento, acuerdos de tratamiento de datos y una base jurídica documentada para cualquier transferencia de datos de analítica a Google en Estados Unidos. El propio aviso introduce una carencia sistemática en los datos: cada visitante que rechaza el consentimiento queda fuera de los datos y, según el diseño del aviso y el público, puede tratarse de una proporción considerable, dejando un punto ciego en todas las métricas recopiladas.

El problema es que esto obliga a una elección difícil de sostener: aceptar datos incompletos del segmento que consiente o ejecutar GA4 sin consentimiento y asumir el riesgo legal. Ninguna opción resuelve bien las necesidades de una organización que se toma en serio tanto la calidad de los datos como el cumplimiento normativo.

Plausible CE parte de una premisa distinta. Su script de seguimiento no usa cookies por defecto, no almacena información que permita identificar personalmente a los visitantes y está diseñado para funcionar sin un aviso de consentimiento. Ese diseño se basa en decisiones técnicas concretas. Plausible no instala cookies, no genera un identificador persistente entre sesiones y, cuando se autoaloja, no transmite datos a servidores de terceros. La Directiva ePrivacy (PECR en el Reino Unido) exige consentimiento para almacenar información en el dispositivo de un usuario o acceder a ella, una regla que un script sin cookies busca evitar activar. Las Directrices 2/2023 del EDPB interpretan que esa regla también abarca algunas técnicas sin cookies, como el seguimiento mediante píxeles o direcciones IP, por lo que debe confirmar la evaluación para su propio despliegue.

La arquitectura: ClickHouse como motor de analítica

Plausible CE incluye dos bases de datos: ClickHouse para almacenar eventos y PostgreSQL para la configuración. ClickHouse es una base de datos orientada a columnas y diseñada para cargas analíticas —el mismo motor que Yandex creó para su infraestructura de analítica a gran escala—. En un sitio con decenas de miles de páginas vistas al mes, su ventaja frente a una base orientada a filas es imperceptible. Pero esta arquitectura permite gestionar sitios con cientos de millones de eventos sin cambiar el esquema ni rediseñar la infraestructura, algo importante si se prevé crecer.

La configuración de Docker Compose es sencilla. Plausible ofrece una configuración oficial con todos los servicios necesarios. Nuestro despliegue funciona junto con Traefik en una instancia Hetzner CX21 (2 vCPU, 4 GB de RAM) en Helsinki:

services:
  plausible_db:
    image: postgres:16-alpine
    restart: always
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

  plausible_events_db:
    image: clickhouse/clickhouse-server:24.3.3.102-alpine
    restart: always
    volumes:
      - event-data:/var/lib/clickhouse
      - ./clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro
      - ./clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro
    ulimits:
      nofile:
        soft: 262144
        hard: 262144

  plausible:
    image: ghcr.io/plausible/community-edition:v2.1.4
    restart: always
    command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
    depends_on:
      - plausible_db
      - plausible_events_db
    environment:
      - BASE_URL=https://plausible.yourdomain.com
      - SECRET_KEY_BASE=${SECRET_KEY_BASE}
      - DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD}@plausible_db:5432/plausible_db
      - CLICKHOUSE_DATABASE_URL=http://plausible_events_db:8123/plausible_events_db
      - DISABLE_REGISTRATION=true
      - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
      - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.plausible.rule=Host(`plausible.yourdomain.com`)"
      - "traefik.http.routers.plausible.entrypoints=websecure"
      - "traefik.http.routers.plausible.tls.certresolver=letsencrypt"
      - "traefik.http.services.plausible.loadbalancer.server.port=8000"

volumes:
  db-data:
  event-data:

Configure DISABLE_REGISTRATION explícitamente. Con true, el registro queda cerrado tras crear la cuenta inicial; con false, cualquiera que encuentre la URL de una instancia pública puede registrarse. La documentación actual de Plausible CE indica invite_only como valor predeterminado. Genere SECRET_KEY_BASE con openssl rand -base64 64 y guárdela en un archivo .env excluido del control de versiones.

Los dos archivos XML de configuración de ClickHouse indicados en la sección de volúmenes controlan el nivel de detalle de los registros. Sin ellos, ClickHouse genera registros que llenan el disco de una instancia pequeña en pocos días. El repositorio de Plausible incluye estos archivos; cópielos a un subdirectorio clickhouse/ junto a docker-compose.yml antes de iniciar el stack.

Desplegar el script de seguimiento

Una vez iniciado el stack, añadir seguimiento a cualquier sitio requiere una sola etiqueta en el <head> del HTML:

<script defer data-domain="yourdomain.com"
  src="https://plausible.yourdomain.com/js/script.js"></script>

Plausible ofrece extensiones opcionales que se agrupan en una sola solicitud. Utilizamos la variante que incluye seguimiento de descargas de archivos, compatibilidad con enrutamiento basado en hash para aplicaciones de página única, seguimiento de enlaces externos, propiedades personalizadas de páginas vistas, seguimiento de ingresos y eventos etiquetados:

<script defer data-domain="yourdomain.com"
  src="https://plausible.yourdomain.com/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js"></script>

El script combinado pesa aproximadamente 2,4 KB sin comprimir. El de Google Analytics 4 pesa unos 45 KB. No es una diferencia marginal: supone aproximadamente 20 veces menos JavaScript que descargar en cada carga de página, y tener menos código que analizar y ejecutar puede mejorar Core Web Vitals en dispositivos poco potentes y conexiones lentas.

Integración con Google Search Console

El argumento más sólido para conservar GA4 es su conexión con Google Search Console, que permite correlacionar las consultas de búsqueda orgánica con el comportamiento en el sitio. Plausible admite esta integración de forma nativa, y es la función que hace viable el cambio para sitios centrados en contenido.

La configuración requiere una propiedad verificada en Search Console y una autorización OAuth en los ajustes del sitio de Plausible. En una instancia autoalojada también requiere un cliente OAuth de Google Cloud con la API de Search Console habilitada, que se proporciona a Plausible mediante GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET (ya previstos en el archivo Compose anterior). Una vez conectados, las consultas de búsqueda aparecen en Sources al seleccionar Google, con los clics y, en la vista ampliada, las impresiones, la tasa de clics y la posición media. Solo se muestran consultas con al menos un clic.

Un detalle que causa problemas con frecuencia: la propiedad de GSC elegida debe cubrir realmente el dominio que sigue Plausible. Una propiedad verificada como https://www.yourdomain.com mediante el método de prefijo de URL no se conectará a un sitio de Plausible que siga yourdomain.com sin el subdominio. Utilice la propiedad de tipo Dominio en GSC siempre que sea posible: cubre todos los subdominios y protocolos y facilita la conexión con Plausible.

Los datos de GSC en Plausible no se actualizan en tiempo real: Plausible documenta un retraso de unas 24–36 horas, igual que en Search Console, y sugiere revisar los datos de dos días atrás. Es una restricción de Google, no de Plausible. Rara vez representa un obstáculo práctico para la revisión operativa de la analítica.

Cumplimiento del GDPR sin avisos de cookies

Conviene precisar la situación normativa. Según la Directiva ePrivacy, se requiere consentimiento al almacenar información en el dispositivo del usuario o acceder a ella. Tanto las cookies como localStorage activan este requisito. Plausible no almacena nada en el dispositivo: ni cookies, ni entradas de localStorage, ni datos en IndexedDB.

Plausible tampoco genera un identificador de usuario persistente entre sesiones. Cada página vista se procesa de forma independiente. Lo más parecido a un identificador es un hash diario derivado de la dirección IP del visitante, la cadena del agente de usuario, el dominio del sitio web y un valor de sal del servidor que se renueva y elimina cada 24 horas. No se almacenan las direcciones IP ni los agentes de usuario originales. Plausible afirma que, por ello, no recopila datos personales; como la dirección IP sí se procesa brevemente para calcular el hash, determinar si esto queda fuera del concepto de datos personales del artículo 4(1) del GDPR es una evaluación jurídica, no una garantía técnica. Esta es nuestra valoración para el despliegue propio de tva, no asesoramiento jurídico; compruébela con su asesor de protección de datos.

El resultado práctico, según esa evaluación, es que no hay aviso de consentimiento, plataforma de gestión del consentimiento, optimización de la tasa de consentimiento ni vacíos en los datos por rechazos. Los datos de analítica reflejan mucho mejor al público que el subconjunto dispuesto a aceptar seguimiento, aunque los visitantes que bloquean el script siguen sin contabilizarse.

Nuestra política de privacidad requiere ahora un único párrafo breve sobre analítica que describe con precisión qué recopila Plausible y dónde residen los datos. La sección equivalente sobre GA4 ocupaba varios párrafos y exigía referencias específicas a las cláusulas contractuales tipo de Google y a sus condiciones de tratamiento de datos. La reducción de la carga jurídica es considerable para una organización pequeña.

Carga de infraestructura y comparación de rendimiento

Ejecutar ambas herramientas en paralelo durante 60 días antes de dejar GA4 permitió compararlas directamente. Los recuentos de páginas vistas diferían en menos del 3 %.

La diferencia más reveladora estaba en los visitantes únicos. Plausible registró aproximadamente un 12 % más que GA4 con consentimiento durante el mismo periodo. Es esperable: el subconjunto que acepta el consentimiento en GA4 tiende a estar más comprometido y a usar menos bloqueadores de anuncios o navegadores centrados en la privacidad. Al seguir a los visitantes sin la fricción del consentimiento, Plausible ofrece una imagen más precisa del alcance total, aunque los visitantes que bloquean su script siguen sin contabilizarse. GA4 con consentimiento muestra el comportamiento de los usuarios más comprometidos. Ninguno es incorrecto: responden a preguntas ligeramente distintas.

El consumo de infraestructura es modesto. ClickHouse utiliza unos 400 MB de RAM en régimen estable. PostgreSQL añade alrededor de 80 MB. El uso de CPU es insignificante durante la operación habitual y solo aumenta brevemente al importar grandes volúmenes de datos históricos. Para organizaciones que ya tienen un servidor Hetzner con capacidad libre, el costo marginal de incorporar Plausible al stack existente es prácticamente cero.

En la práctica, la decisión de cambiar no depende principalmente del costo de infraestructura ni de la equivalencia de funciones. Depende de qué datos se aceptan como base para decidir. La analítica que requiere consentimiento produce una muestra con sesgo sistemático. La analítica sin cookies ni consentimiento ofrece una visión mucho más completa con menos detalle por visitante. Para un sitio de marketing cuya pregunta principal es «qué páginas y fuentes generan consultas», esa visión más completa resulta más útil que el retrato detallado de un subconjunto que se selecciona a sí mismo.

Artículos relacionados

Artículos relacionados