Test A/B Client-Side vs Server-Side Comparados
Test A/B client-side vs server-side explicado: cómo funciona cada uno, el problema del flicker, impacto en SEO y Core Web Vitals, y cuándo elegir cada uno.

📚 Este artículo es parte de la guía Feature Flags: la Guía Completa.
Test A/B client-side vs server-side es la decisión de arquitectura más consecuente que toma un equipo antes de correr su primer experimento: dónde ocurre realmente la decisión sobre qué variación mostrar, en el navegador del visitante o en tu servidor. Importa más que qué proveedor eliges, porque define qué tipos de tests puedes correr siquiera. Tocamos esto brevemente en la guía completa de feature flags; esta pieza profundiza en ambos enfoques, en el problema real que uno de ellos resuelve (el flicker), y en cómo se conecta con feature flags vs test A/B, la capa que hoy corre la mayoría de los experimentos server-side en producción.
Qué es el test A/B client-side
En el test client-side, la página carga con normalidad y un fragmento de JavaScript (el “snippet” de la herramienta de test) corre en el navegador del visitante, decide qué variación ve ese visitante, y modifica el HTML ya cargado para aplicarla, ya sea cambiando un titular, ocultando un elemento, o reordenando un layout. Este es el modelo original del test A/B en la web, popularizado por herramientas como Optimizely, VWO y Kameleoon, y sigue siendo la elección más común para los equipos de marketing y CRO.
La ventaja central es la velocidad de instalación: un único snippet pegado en el <head> del sitio, o inyectado mediante un gestor de etiquetas como Google Tag Manager, y la herramienta ya puede construir variaciones visuales directamente en un editor apuntar y clickear, sin necesitar un equipo de ingeniería para cada test. Por eso el client-side domina la optimización de landing pages y e-commerce, donde la velocidad de testeo importa más que la robustez arquitectónica.
La desventaja central tiene nombre: flicker, también llamado FOOC (flash of original content). Como el navegador siempre renderiza alguna versión de la página antes de que el script de test termine de correr, existe una ventana, de decenas de milisegundos a un par de segundos, durante la cual un visitante puede ver la página original antes de que aparezca la variación. VWO describe este comportamiento directamente en su propio centro de ayuda: el flicker ocurre porque la variación se aplica vía JavaScript después de que la página original ya empezó a cargar, y el retraso es inherente a cualquier test que manipula el DOM del lado del cliente (centro de ayuda de VWO, hoy Wingify).
Qué es el test A/B server-side
En el test server-side, la decisión sobre qué variación mostrar ocurre antes de que cualquier HTML salga del servidor rumbo al navegador. El backend, o una capa de borde (edge) como veremos más adelante, evalúa en qué variación cae un visitante dado y arma la respuesta con el contenido final ya puesto, sin necesitar ningún script del lado del cliente para reescribir nada después. No existe una “versión original” que parpadee, porque el servidor nunca envía la versión que no se va a mostrar.
Este modelo es el estándar en productos de feature flag y experimentación como Statsig, GrowthBook, LaunchDarkly y Split.io. La propia documentación de GrowthBook es directa sobre el motivo: el test server-side permite experimentos complejos que atraviesan muchas partes del código de una aplicación, y evita el problema de flicker que aparece del lado del cliente (docs de GrowthBook). La contrapartida es el costo de ingeniería: correr un test server-side típicamente requiere un SDK de servidor, una forma de evaluar la variación antes de renderizar (renderizado del lado del servidor, o una llamada a la API antes del render), y disciplina para mantener estable la atribución del visitante entre sesiones. Eso no es el trabajo de configurar un editor visual, es el trabajo de escribir código.
El problema del flicker, en números reales
El flicker no es solo una molestia estética, es medible, y cuesta presupuesto de rendimiento real. Los snippets anti-flicker aumentan el Largest Contentful Paint (LCP), una métrica de Core Web Vitals que alimenta la señal de ranking de experiencia de página de Google, según un análisis de la firma de monitoreo de rendimiento DebugBear sobre los patrones anti-flicker usados por herramientas de test A/B y personalización. El mecanismo es tosco por diseño: como el snippet no sabe de antemano qué partes de la página va a cambiar un test dado, la mayoría de las implementaciones ocultan todo el body con opacity: 0 hasta que el script del lado del cliente termina de correr y revela la página, lo cual es una solución drástica para lo que a menudo es un cambio visual pequeño (DebugBear, “Anti-Flicker Snippets From A/B Testing Tools And Page Speed”).
La propia herramienta de DebugBear ahora puede marcar automáticamente páginas que ocultan contenido de esta forma, mostrando una recomendación de “No ocultes el contenido de la página usando CSS” cada vez que se detecta un patrón anti-flicker. Su recomendación para los equipos que mantienen un snippet anti-flicker es acotar el ocultamiento lo más posible: si un test solo cambia titulares, oculta solo los elementos h1; si cambia un botón de llamada a la acción, oculta solo el botón, no toda la página. Acotar el ocultamiento reduce cuánto de la carga percibida retrasa el snippet, sin renunciar del todo a la protección contra el flicker.
La contrapartida es estructural, no un error de configuración que cualquiera pueda resolver del todo. Un snippet sin timeout arriesga una página en blanco para siempre si el script de test falla al cargar; un snippet con un timeout agresivo arriesga el flicker original que se construyó para prevenir; y un snippet que oculta demasiado ancho retrasa el LCP más de lo necesario. Cada proveedor de test client-side, incluyendo Optimizely y Kameleoon, documenta su propia versión de este mismo problema de ajuste, porque es inherente a correr la decisión en el navegador después de que la página ya empezó a renderizarse.
Tabla comparativa: client-side vs server-side
| Criterio | Client-side | Server-side |
|---|---|---|
| Velocidad de instalación | Rápida: snippet único, editor visual, sin necesitar deploy | Más lenta: requiere un SDK de servidor, endpoints de evaluación, y a veces un deploy de código |
| Riesgo de flicker (FOOC) | Real, mitigado (no eliminado) con un snippet anti-flicker | Ninguno por construcción: la variación sale ya integrada en el HTML |
| Impacto en SEO / rendimiento | Depende de la implementación; un snippet anti-flicker mal configurado puede perjudicar el LCP y el CLS | Neutro para SEO/rendimiento cuando está bien implementado; sin script extra bloqueando el render |
| Quién puede implementarlo | Equipos de marketing y CRO, sin dependencia de ingeniería | Requiere un equipo de ingeniería con acceso al backend o a la capa de renderizado |
| Casos de uso ideales | Visuales de landing page, copy, layout, tests de conversión de e-commerce de iteración rápida | Lógica de producto, precios, onboarding, permisos de acceso, apps móviles/nativas |
Ninguna fila de esta tabla decide nada por sí sola. Un sitio de marketing que solo prueba un titular y un botón rara vez justifica montar infraestructura server-side; un producto SaaS que prueba el flujo de checkout o la lógica de precios rara vez sobrevive al riesgo de que un script de terceros decida eso en el navegador del cliente.
Cuándo elegir client-side
Client-side es la decisión correcta cuando el test es esencialmente visual (titular, CTA, imagen, orden de secciones), cuando el equipo que corre el test no tiene, o no necesita, un desarrollador para cada variación, y cuando el volumen de tests es lo bastante alto como para que la velocidad de un editor visual pese más que el riesgo residual de flicker. Este es el territorio natural de las landing pages, el e-commerce y los sitios de contenido, donde los equipos de CRO necesitan iterar rápido y un flicker breve y bien mitigado es un costo aceptable frente a la agilidad ganada.
Cuándo elegir server-side
Server-side vale la inversión de ingeniería cuando un test involucra lógica que no es puramente visual: precios, acceso a una funcionalidad, una regla de negocio entera, o cualquier flujo que también necesite funcionar en apps móviles y nativas, donde no hay DOM de navegador para que un snippet manipule. También es la elección correcta cuando la experiencia no puede tolerar ni un milisegundo de flicker, como en productos donde la estabilidad percibida es en sí misma parte del valor entregado, o cuando un test necesita coexistir con reglas de acceso que nunca deberían, por razones de seguridad, decidirse del lado del cliente. La propia documentación del SDK de LaunchDarkly deja este punto explícito: una clave de SDK server-side nunca debería correr en el navegador, porque las reglas de segmentación pueden contener datos sensibles que un contexto client-side no debería exponer (docs de LaunchDarkly).
Híbridos y edge computing como punto medio
Entre los dos extremos hay un punto medio real, no solo teórico: evaluar la variación en el borde (edge), en vez de en el navegador o en un servidor central distante. La idea es simple: la decisión sobre qué variación mostrar sigue ocurriendo antes de que se arme el HTML, así que no hay flicker, pero ocurre en un nodo de red geográficamente cercano al visitante en lugar de un centro de datos central, recortando la latencia que el test server-side tradicional puede agregar. Statsig documenta esto directamente mediante soporte para Cloudflare Workers, Fastly Compute y Akamai EdgeWorkers (docs de Statsig), más una integración separada que sincroniza definiciones de flags y experimentos con Edge Config de Vercel (docs de Statsig), con el objetivo de evaluar la flag lo más cerca posible del usuario para que tanto el flicker como el viaje de ida y vuelta hasta un punto de decisión lejano desaparezcan.
Un segundo tipo de híbrido, más común, es organizacional en vez de arquitectónico: usar test client-side para los tests rápidos de marketing y reservar server-side, o una capa de feature flag, para los tests de producto que genuinamente necesitan esa robustez. GrowthBook, por ejemplo, ofrece un modo de “evaluación remota” que mantiene las reglas de segmentación fuera del cliente incluso en un contexto por lo demás client-side, tomando prestada parte de la seguridad del server-side para una implementación más liviana (docs de GrowthBook). No existe una única respuesta correcta, existe solo la pregunta correcta: qué necesita este test específico, y qué puede permitirse pagar en ingeniería para conseguirlo.
SEO: qué importa de verdad y qué no
El test client-side no perjudica el SEO por defecto, pero las implementaciones descuidadas sí. La guía oficial de Google Search Central sobre pruebas de sitios web establece las reglas centrales: usar rel="canonical" en cualquier URL de test alternativa, apuntando de vuelta al original, para que los buscadores entiendan que cada variación es la misma página subyacente, no contenido duplicado; nunca mostrarle a los rastreadores de búsqueda una experiencia distinta a la que reciben los visitantes reales, una práctica que Google trata como cloaking sin importar si ocurre por lógica de servidor, JavaScript, o cualquier otro mecanismo; y si un test redirige usuarios a una URL de variación, usar una redirección temporal 302, nunca una permanente 301, para que los buscadores sigan indexando el original (Google Search Central, “A/B Testing Best Practices for Search”). Google también recomienda eliminar toda la infraestructura de test, URLs alternativas, scripts, marcado, tan pronto un test concluye, en vez de dejarlo corriendo indefinidamente una vez que ya tienes un ganador.
Ninguna de esas reglas depende de si el test corre del lado del cliente o del servidor. Lo que sí se correlaciona con la arquitectura son los Core Web Vitals: un snippet anti-flicker que oculta toda la página es un modo de falla específico del client-side, y es la forma más común en que un test bien intencionado arrastra silenciosamente el LCP hacia abajo y, cuando el contenido revelado desplaza el layout, también el Cumulative Layout Shift. El test server-side evita este riesgo específico por construcción, ya que no hay ningún estado oculto intermedio que revelar. Esa es una ventaja real, medible y adyacente al SEO para el test server-side en páginas donde el rendimiento ya está ajustado al límite, no una afirmación de que el test client-side sea inherentemente malo para la búsqueda.
Herramientas por enfoque (una mirada neutral)
| Enfoque | Ejemplos | Qué enfatiza su propia documentación |
|---|---|---|
| Client-side | VWO, Optimizely, Kameleoon | Editor visual, instalación rápida basada en snippet; la documentación de cada proveedor reconoce el riesgo de flicker y ofrece mitigación anti-flicker |
| Server-side / feature flag | Statsig, GrowthBook, LaunchDarkly, Split.io | SDK de servidor, evaluación antes del render, evita el flicker por construcción; requiere más integración de ingeniería |
| Edge | Statsig (Vercel Edge Config, Cloudflare Workers, Fastly, Akamai) | Evalúa la variación en el borde de la red, cerca del visitante, combinando baja latencia con ausencia de flicker |
Esta tabla es una fotografía de lo que cada categoría de herramienta dice sobre su propio enfoque, no un ranking. Siempre confirma la documentación oficial actual antes de decidir, ya que las capacidades del producto cambian.
Cómo se conecta esto con los feature flags
El test server-side y los feature flags son, en la práctica, la misma infraestructura usada para dos trabajos distintos. Un feature flag decide, en el servidor, si una funcionalidad es visible para un usuario dado; un test A/B server-side usa ese mismo mecanismo para decidir qué variación de una funcionalidad ve ese usuario, y después mide el efecto. Por eso herramientas como LaunchDarkly, GrowthBook y Statsig venden ambas capacidades juntas: la misma evaluación de reglas que enciende o apaga una funcionalidad también asigna tráfico entre las variaciones de un experimento. Si este ecosistema es nuevo para ti, la guía completa de feature flags explica el concepto desde cero, y feature flags vs test A/B profundiza en la diferencia específica entre “encender una funcionalidad” y “probar qué variación convierte mejor”, que es exactamente el par de preguntas detrás de la decisión entre client-side y server-side. Para la estadística que decide cualquier test, client-side o server-side, una vez que está corriendo, mira nuestra guía de significancia estadística en test A/B.
Hazlo automático en Donnu
Donnu A/B es, a propósito, una herramienta client-side: un snippet liviano construido para instalarse en minutos sin necesitar un equipo de ingeniería, con la misma preocupación de flicker que acabas de leer resuelta dentro del propio producto en vez de dejarte configurarla desde cero. Esa no es la respuesta correcta para todo test, un test de precios o un experimento de control de acceso todavía necesita la robustez del server-side, pero es la respuesta correcta para la porción de tests que aparece más seguido en el trabajo diario de marketing y CRO: cambios visuales que necesitan salir al aire rápido, sin abrir un frente de ingeniería.
Si tu próximo test tiene esa forma, comienza una prueba gratis de 14 días y mira el snippet en acción. Si tu caso pide más robustez, empieza por la guía completa de feature flags y feature flags vs test A/B para mapear qué tiene ya tu stack antes de adoptar una herramienta nueva.
Referencias
- VWO (Wingify). Why Do I Notice a Page Flicker When the Wingify Test Page is Loading? help.wingify.com.
- GrowthBook. Running Experiments on GrowthBook. docs.growthbook.io/experiments.
- Statsig. CDN Edge Testing for Cached Resources. docs.statsig.com/guides/cdn-edge-testing.
- Statsig. Vercel Integration. docs.statsig.com/integrations/vercel.
- GrowthBook. Remote Evaluation. docs.growthbook.io/self-host/remote-evaluation.
- LaunchDarkly. Choosing an SDK type. launchdarkly.com/docs/sdk/concepts/client-side-server-side.
- DebugBear. Anti-Flicker Snippets From A/B Testing Tools And Page Speed. debugbear.com/blog.
- Google Search Central. A/B Testing Best Practices for Search. developers.google.com/search.
Preguntas frecuentes
- ¿Qué causa el flicker (FOOC) en los tests A/B client-side?
- El navegador renderiza primero la página original, y solo después el script de test carga, decide la variación, y reescribe el DOM para aplicarla. En ese intervalo, por pequeño que sea, un visitante puede ver la versión original parpadear antes de que aparezca la variación. Por eso el efecto también se llama FOOC, "flash of original content", término que herramientas de test client-side como AB Tasty usan explícitamente en su propia documentación para describir el mismo comportamiento que VWO documenta como "flicker" en su centro de ayuda.
- ¿El test A/B server-side siempre evita el flicker?
- Sí, por construcción: la decisión sobre qué variación mostrar ocurre antes de que se envíe cualquier HTML al navegador, así que no hay un "estado original" que parpadee. Lo que el server-side no elimina automáticamente es la latencia de red entre el visitante y el servidor que toma la decisión, por eso herramientas como Statsig y Vercel llevan esa decisión hasta el borde (edge), lo más cerca posible del visitante.
- ¿El test A/B client-side perjudica el SEO?
- No por el test en sí, sino por cómo se construyen muchas implementaciones. Google recomienda usar rel="canonical" apuntando a la URL original, evitar el cloaking (mostrarle a los rastreadores de búsqueda algo distinto de lo que ven los visitantes), y no correr un test más tiempo del necesario, según la guía oficial de Google Search Central sobre pruebas de sitios web. El factor que más pesa en la práctica es el rendimiento: un snippet anti-flicker mal configurado puede inflar el Largest Contentful Paint, una métrica de Core Web Vitals que alimenta el ranking.
- ¿Un equipo puede migrar de client-side a server-side más adelante?
- Sí, y es un camino común: muchos equipos empiezan con una herramienta client-side liviana para tests a nivel de página y migran partes de su programa de experimentación al servidor cuando los tests empiezan a tocar lógica de producto, precios o permisos de acceso, en vez de solo la apariencia visual. La migración cuesta ingeniería real (endpoints de evaluación, SDKs de servidor, atribución estable entre sesiones), así que vale la pena mapear temprano qué partes del roadmap realmente necesitan server-side.
- ¿El test client-side y el server-side pueden correr al mismo tiempo en el mismo producto?
- Sí, y en la práctica esta es una configuración común: client-side para tests rápidos de marketing y landing page, server-side o una capa de feature flag para tests de producto, precios y onboarding. Esto no es un hallazgo de investigación, es el patrón que emerge al mirar para qué está construida y vendida cada categoría de herramienta. La pregunta nunca es "qué enfoque es mejor" en abstracto, es "qué necesita este test específico": velocidad de instalación o robustez de infraestructura.