El Cumulative Layout Shift (CLS) es una métrica crítica dentro de los Core Web Vitals de Google, que mide la estabilidad visual de una página web. Desde su incorporación como factor de clasificación en 2021, comprender y optimizar el CLS se ha vuelto esencial tanto para mejorar el rendimiento SEO como para garantizar una experiencia de usuario positiva.
A continuación, exploraremos en detalle qué es el CLS, las causas más comunes de un puntaje elevado y las estrategias más efectivas para optimizarlo.
Estas prácticas te ayudarán a mantener un puntaje de CLS bajo y a optimizar tu sitio web para cumplir con los exigentes estándares de Google, contribuyendo significativamente a la satisfacción del usuario y al éxito a largo plazo de tu sitio en la web.
¿Qué es el Cumulative Layout Shift?
El CLS mide el grado de inestabilidad visual de una página web, calculando cuánto se desplazan inesperadamente los elementos de la página mientras ésta se carga o durante la interacción del usuario. Un puntaje de CLS elevado indica una experiencia de usuario deficiente, ya que los desplazamientos inesperados pueden resultar frustrantes. Un buen puntaje de CLS, según Google, es 0.1 o menos, mientras que un puntaje superior a 0.25 se considera problemático y necesita mejoras urgentes.
Principales Causas del CLS y Cómo Abordarlas
1. Imágenes sin Dimensiones Especificadas
Una de las causas más comunes del CLS es la falta de dimensiones especificadas en las imágenes. Cuando un navegador no conoce el tamaño de una imagen antes de cargarla, no puede reservar el espacio adecuado, lo que resulta en un cambio brusco en el diseño una vez que la imagen se carga. La solución es simple: siempre se deben declarar las dimensiones (ancho y alto) en las etiquetas HTML de las imágenes. Para imágenes responsivas, el uso de la propiedad CSS aspect-ratio puede ayudar a mantener la proporción y evitar estos desplazamientos.
HTML con Dimensiones Especificadas
<!-- Imágen con dimensiones especificadas -->
<img src="imagen.jpg" width="800" height="600" alt="Descripción de la imagen">
CSS con Aspect-Ratio para Imágenes Responsivas
img { max-width: 100%; height: auto; aspect-ratio: 4 / 3; /* Mantiene una proporción de 4:3 */ }
En este ejemplo de CSS, se usa max-width: 100%; para asegurar que la imagen no exceda el ancho del contenedor, y height: auto; para que la altura se ajuste automáticamente manteniendo las proporciones. La propiedad aspect-ratio se utiliza para definir la proporción de la imagen, lo que ayuda a mantener un espacio consistente incluso en dispositivos con diferentes tamaños de pantalla.
Uso de Aspect-Ratio para Imágenes de Diferentes Proporciones
HTML
<img src="imagen-grande.jpg" width="1600" height="1200" alt="Imagen grande">
CSS
/* CSS para manejar diferentes proporciones de imágenes */
img {
width: 100%;
height: auto;
aspect-ratio: 16 / 9; /* Proporción de 16:9 para video o imágenes */
}
Este enfoque garantiza que la proporción de la imagen se mantenga en todas las resoluciones, lo que previene el CLS al asegurar que el espacio necesario para la imagen esté reservado antes de que se complete su carga. Implementando estas técnicas, podrás reducir significativamente los desplazamientos en el diseño de tu página, mejorando la estabilidad visual y la experiencia del usuario.
2. Anuncios y Contenido Inyectado Dinámicamente
Los anuncios, especialmente los que se cargan de manera dinámica, pueden causar desplazamientos significativos si no se reserva espacio previamente. Para mitigar esto, es crucial definir tamaños fijos para los contenedores de anuncios o utilizar un espacio máximo reservado para adaptarse a diferentes tamaños de anuncios. Además, el contenido dinámico como tweets o videos de YouTube insertados en la página debe manejarse con cuidado, usando técnicas como min-height en CSS para preasignar espacio.
HTML con Espacio Reservado para Anuncios
<div class="ad-container"> <img src="anuncio.jpg" width="300" height="250" alt="Anuncio"> </div>
CSS para Reservar Espacio para Anuncios
/* Estilos para el contenedor del anuncio */
.ad-container { width: 300px;
height: 250px;
max-width: 100%;
margin: 0 auto; /* Centrar el anuncio en su contenedor */
background-color: #f0f0f0; /* Fondo gris claro para indicar que el anuncio está cargando */ }
Manejo de Contenido Dinámico con min-height
Para contenido dinámico, como tweets o videos de YouTube, puedes usar CSS para preasignar espacio en el DOM, evitando que el contenido ya cargado se desplace cuando el contenido dinámico se inserte.
HTML
<!-- Contenedor para un tweet o video -->
<div class="dynamic-content">
<!-- Contenido dinámico como un tweet o video de YouTube se insertará aquí -->
</div>
CSS
/* Estilos para contenido dinámico */
.dynamic-content {
min-height: 200px; /* Altura mínima reservada para el contenido dinámico */
background-color: #e0e0e0; /* Fondo gris claro mientras se carga el contenido */
margin-bottom: 20px; /* Espacio adicional debajo del contenido */
}
/* Ejemplo específico para videos de YouTube */
.youtube-video {
width: 100%;
aspect-ratio: 16 / 9;
}
En este caso, el uso de min-height asegura que haya suficiente espacio reservado para el contenido dinámico, como un tweet o un video de YouTube, antes de que se cargue. Esto ayuda a prevenir cambios en el diseño que podrían ocurrir cuando el contenido se inserta dinámicamente en la página.
3. Fuentes Web y Problemas de Carga
Las fuentes web también pueden causar desplazamientos si no se gestionan correctamente, resultando en efectos como el Flash of Invisible Text (FOIT) o el Flash of Unstyled Text (FOUT). Para minimizar estos problemas, se recomienda el uso de la directiva font-display: swap en combinación con la precarga de fuentes (<link rel="preload" ...>). Esto asegura que las fuentes se carguen rápidamente y se evite el cambio brusco cuando la fuente personalizada reemplace a la predeterminada del sistema.
HTML con Precarga de Fuentes
<link rel="preload" href="/fonts/mi-fuente.woff2" as="font" type="font/woff2" crossorigin="anonymous">
CSS con font-display: swap
/* Definición de la fuente personalizada */
@font-face {
font-family: 'MiFuente';
src: url('/fonts/mi-fuente.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap; /* Garantiza que se use la fuente del sistema mientras se carga la fuente personalizada */ }
/* Aplicación de la fuente a elementos de texto */
body {
font-family: 'MiFuente', sans-serif;
}
Explicación del Código
Precarga de la Fuente: En el código HTML, usamos la etiqueta <link rel="preload"> para precargar la fuente personalizada (mi-fuente.woff2). Esto asegura que el navegador comience a descargar la fuente lo antes posible, antes de que se necesite para renderizar el texto. La directiva as="font" y type="font/woff2" ayudan a identificar correctamente el recurso como una fuente.
Uso de font-display: swap: En el CSS, la directiva font-display: swap se aplica en la definición de la fuente personalizada. Esta directiva indica al navegador que utilice la fuente del sistema disponible (como Arial o Helvetica) para mostrar el texto mientras la fuente personalizada se descarga. Una vez que la fuente personalizada está disponible, se reemplaza automáticamente, evitando un retraso visible en la carga del texto.
Beneficios
Minimización del FOIT y FOUT: Al usar font-display: swap, eliminamos el problema del FOIT, donde el texto no es visible hasta que se carga la fuente, y el FOUT, donde el texto aparece en una fuente predeterminada antes de cambiar a la fuente personalizada.
Mejora de la Experiencia del Usuario: Los usuarios ven inmediatamente el texto, sin esperar a que se cargue la fuente personalizada, lo que mejora la percepción de la velocidad y la estabilidad de la página.
4. Animaciones CSS o JavaScript
Las animaciones que afectan el tamaño o la posición de los elementos pueden generar cambios de diseño imprevistos. Para evitar estos problemas, es recomendable usar transformaciones CSS en lugar de animaciones que afecten directamente las propiedades de tamaño o posición, garantizando así que los elementos no causen desplazamientos inesperados.
HTML
<!-- Elemento que será animado -->
<div class="animacion-transform"></div>
CSS
/* Estilos iniciales del elemento */
.animacion-transform {
width: 100px;
height: 100px;
background-color: #3498db;
transition: transform 0.5s ease-in-out;
}
/* Transformación en hover: no causa CLS */
.animacion-transform:hover {
transform: scale(1.5) rotate(15deg); /* Escala y rota el elemento sin cambiar su posición original */
}
Explicación del Código
Uso de Transformaciones CSS: En este ejemplo, cuando el usuario pasa el ratón sobre el elemento (hover), se aplica una transformación CSS que escala (scale(1.5)) y rota (rotate(15deg)) el elemento. Estas transformaciones no afectan la disposición de los elementos circundantes en la página, ya que el espacio ocupado por el elemento no cambia de manera que altere el flujo del documento.
Evitar Cambios en el Tamaño o la Posición: Si se utilizara una animación que directamente cambiara el tamaño (width, height) o la posición (top, left), se podría provocar un desplazamiento en el diseño de la página, contribuyendo al CLS. En su lugar, las transformaciones CSS aplicadas aquí modifican la escala y la rotación del elemento, lo que mantiene su posición original en el flujo del documento.
Beneficios
Prevención del CLS: Las transformaciones CSS son ideales para animar elementos sin causar cambios en la disposición de la página, manteniendo un bajo puntaje de CLS.
Mejora en la Experiencia del Usuario: Las animaciones se sienten más suaves y no afectan la estructura general de la página, lo que proporciona una experiencia de usuario más estable.
Cómo Medir y Optimizar el CLS
Existen diferentes herramientas para medir el CLS, tanto en datos de laboratorio como en el campo. Google PageSpeed Insights es una herramienta popular que ofrece tanto datos de laboratorio como datos de usuarios reales a través del Chrome User Experience Report (CrUX). Esta herramienta es especialmente útil para identificar y diagnosticar problemas relacionados con el CLS, proporcionando informes detallados sobre los elementos que contribuyen a los desplazamientos y sugiriendo mejoras específicas.
Además, herramientas como Lighthouse y las Chrome DevTools permiten una inspección más profunda de los elementos problemáticos y ayudan a replicar problemas de CLS que puedan surgir después de la carga inicial de la página. Estas herramientas permiten a los desarrolladores identificar los elementos que causan los desplazamientos y ajustar el diseño en consecuencia.
Estrategias Avanzadas para Reducir el CLS
1. Uso del Aspect-Ratio en CSS
El uso de la propiedad aspect-ratio en CSS es una técnica avanzada que permite a los desarrolladores definir proporciones específicas para los elementos, asegurando que el navegador reserve el espacio adecuado antes de que se cargue el contenido. Esta técnica es particularmente útil para manejar elementos como videos o imágenes responsivas.
2. Implementación de Estrategias de Precarga
La precarga de recursos críticos, como fuentes y scripts, es una estrategia clave para reducir el CLS. Al cargar estos recursos antes de que el contenido principal se muestre, se puede evitar la aparición de cambios bruscos en el diseño.
3. Optimización de Contenido Inyectado
Para manejar contenido dinámico como widgets o anuncios, es esencial prever el espacio que estos elementos ocuparán, utilizando técnicas como min-height o reservando un espacio adecuado en el DOM. De esta manera, se evita que el contenido ya renderizado se desplace cuando estos elementos se carguen.
Conclusión
Optimizar el CLS es fundamental para ofrecer una experiencia de usuario sólida y mejorar el rendimiento de tu sitio web en los motores de búsqueda. Al abordar las causas comunes del CLS y aplicar técnicas avanzadas como la precarga de recursos y el uso de aspect-ratio, puedes garantizar que tu sitio no solo cumpla con los estándares de Google, sino que también brinde una experiencia fluida y agradable para tus usuarios.
Implementar estas estrategias no es un esfuerzo único, sino un proceso continuo de mejora y ajuste, asegurando que tu sitio se mantenga competitivo y alineado con las mejores prácticas de SEO y experiencia de usuario.
Fuentes consultadas incluyen guías avanzadas de Smashing Magazine, Web.dev, y Ahrefs, las cuales proporcionan estrategias prácticas y técnicas para optimizar el CLS en diversos escenarios.
Recientemente me recomendaron este sitio para jugar máquinas tragamonedas en línea en México - www.brazino365.com/es . y me encantó jugar en este sitio, ¡porque aquí pude jugar máquinas tragamonedas de calidad y ganar dinero real en línea! Me dio mucho gusto recomendarles este sitio porque es realmente genial.
¡Gracias!