Rendimiento y mantenimiento

Cómo optimizar fuentes web para mejorar LCP y evitar CLS

Optimiza tus fuentes web con font-display, preload y subconjuntos para mejorar el LCP y eliminar el salto de texto que arruina el CLS.

A laptop displaying an analytics dashboard with real-time data tracking and analysis tools.

Las fuentes web mal configuradas son una de las causas más frecuentes de LCP lento y CLS alto: el navegador bloquea el texto mientras descarga el archivo de tipografía, y cuando la fuente llega, el texto cambia de tamaño y desplaza el layout. Ambos problemas se resuelven con tres ajustes específicos en tu CSS y HTML.

Esta guía cubre exactamente qué hacer: formato correcto (WOFF2), la directiva font-display, precargar la fuente crítica y reducir el peso con subconjuntos.

Por qué las fuentes web dañan LCP y CLS

Google mide el rendimiento de tu página con los Core Web Vitals. Las fuentes afectan dos de ellos directamente:

  • LCP (Largest Contentful Paint): si el elemento más grande de la pantalla es un bloque de texto con una fuente externa, el LCP no se dispara hasta que esa fuente termina de cargarse.
  • CLS (Cumulative Layout Shift): cuando el navegador muestra primero una fuente de respaldo y luego la sustituye por la fuente real, el texto puede aumentar o reducir su altura y empujar otros elementos. Eso suma al CLS.

El impacto es real: un archivo de fuente de 150 KB puede añadir 400–800 ms al LCP en conexiones móviles. Un salto tipográfico mal gestionado puede disparar el CLS por encima del umbral "Poor" (0.25) de Google.

Paso 1 — Usa siempre WOFF2

WOFF2 ofrece una compresión entre un 30 % y un 50 % mejor que WOFF y es compatible con todos los navegadores modernos (Chrome 36+, Firefox 39+, Safari 12+). Si todavía sirves TTF, OTF o WOFF antiguo, estás enviando kilobytes innecesarios.

En tu @font-face, declara solo WOFF2 con un fallback a WOFF para navegadores muy antiguos:

@font-face {
  font-family: 'MiFuente';
  src: url('/fonts/mi-fuente.woff2') format('woff2'),
       url('/fonts/mi-fuente.woff')  format('woff');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

Si usas Google Fonts, añade &display=swap a la URL y asegúrate de pedir solo las variantes de peso que realmente utilizas:

https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap

Paso 2 — Configura font-display correctamente

La propiedad font-display controla qué ve el usuario mientras la fuente se descarga. Es el ajuste más importante para LCP y CLS:

ValorComportamientoImpacto en LCP/CLS
autoEl navegador decide (generalmente bloquea)Daña LCP
blockTexto invisible hasta que carga la fuenteDaña LCP notablemente
swapFallback inmediato, luego swap cuando cargaMejora LCP; puede dañar CLS
fallback100 ms de espera, luego fallback, swap si carga rápidoBuen equilibrio
optionalBreve espera; si no carga, usa fallback definitivoMejor para CLS; sacrifica tipografía

Para la mayoría de sitios: usa font-display: swap combinado con métricas de ajuste de fuente (ver paso 4) para controlar el CLS.

Para fuentes secundarias o decorativas que no forman parte del elemento LCP: usa font-display: optional. Si la fuente no llega en tiempo, el navegador no la aplica en esa visita y evita el salto de layout.

Si tu fuente es parte del elemento LCP (un titular o párrafo grande), dile al navegador que la descargue lo antes posible añadiendo esta línea en el <head> de tu HTML, antes de los estilos:

<link rel="preload"
      href="/fonts/mi-fuente-regular.woff2"
      as="font"
      type="font/woff2"
      crossorigin="anonymous">

Puntos clave:

  • Precarga solo 1 o 2 archivos como máximo. Precargar cada variante de peso satura la conexión y empeora el rendimiento global.
  • El atributo crossorigin="anonymous" es obligatorio para archivos de fuente, aunque estén en el mismo dominio.
  • Si usas Google Fonts o cualquier CDN externo, el preload solo funciona si también añades <link rel="preconnect"> al dominio de origen.
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

Paso 4 — Elimina el CLS con métricas de ajuste de fuente

Con font-display: swap, el navegador muestra primero la fuente de respaldo (Arial, Georgia…) y luego hace el intercambio. Si las métricas de ambas fuentes difieren, el texto se mueve: CLS.

CSS ahora ofrece propiedades para ajustar las métricas de la fuente de respaldo para que coincidan visualmente con la fuente real:

@font-face {
  font-family: 'MiFuente-Fallback';
  src: local('Arial');
  ascent-override: 90%;
  descent-override: 22%;
  line-gap-override: 0%;
  size-adjust: 107%;
}

body {
  font-family: 'MiFuente', 'MiFuente-Fallback', Arial, sans-serif;
}

Los valores exactos dependen de cada par de fuentes. Herramientas como Font Style Matcher (meowni.ca) o el CLI de Fontaine te calculan los porcentajes automáticamente. Esta técnica puede llevar el CLS de las fuentes prácticamente a cero.

Para profundizar en más estrategias de rendimiento puedes revisar los artículos de la categoría rendimiento, donde encontrarás guías sobre imágenes, caché y Core Web Vitals. Si prefieres delegar la optimización, elenlace.com ofrece auditorías completas de Core Web Vitals con implementación incluida.

Paso 5 — Reduce el peso con subconjuntos (subsetting)

Una fuente completa puede incluir soporte para cirílico, griego, vietnamita y decenas de caracteres que nunca usarás si tu sitio es en español. El subsetting elimina esos glifos innecesarios.

Con Google Fonts, solicita solo el subconjunto latino:

https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap&subset=latin

Si alojas las fuentes tú mismo, usa la herramienta pyftsubset de fonttools:

pyftsubset mi-fuente.ttf \
  --unicodes="U+0020-007F,U+00C0-00FF,U+00A1,U+00BF" \
  --output-file="mi-fuente-latin.ttf" \
  --flavor=woff2

El rango cubre ASCII estándar más caracteres latinos extendidos necesarios para el español (ñ, acentos, ¡, ¿). El resultado típico es un archivo un 60-80 % más pequeño que la fuente completa.

Conclusiones clave

  • Usa exclusivamente WOFF2; elimina TTF, OTF y WOFF antiguo de tu stack.
  • font-display: swap mejora el LCP al mostrar texto de inmediato con la fuente de respaldo.
  • Precarga solo la fuente del elemento LCP con <link rel="preload"> en el <head>.
  • Las propiedades CSS ascent-override, descent-override y size-adjust alinean la fuente de respaldo con la real y eliminan el CLS.
  • El subsetting reduce el peso del archivo un 60-80 % al eliminar glifos que nunca usas.

¿Quieres implementar estas mejoras pero no tienes tiempo? Contáctanos en elenlace.com — nos encargamos de la optimización completa de fuentes y Core Web Vitals para que tú te concentres en tu negocio.

Preguntas frecuentes

¿Es mejor alojar las fuentes en mi propio servidor o usar Google Fonts?

En general, alojarlas tú mismo es más rápido porque evitas la conexión a un dominio externo y tienes control total sobre los encabezados de caché. Además, desde 2022 Chrome ya no comparte la caché de Google Fonts entre sitios, eliminando esa ventaja histórica. La excepción: si tu servidor es lento, Google Fonts puede ser más rápido gracias a su CDN global.

¿Cuántas fuentes puedo usar sin penalizar el rendimiento?

La regla práctica es un máximo de 2 familias tipográficas y 2-3 pesos por familia. Cada archivo de fuente es una petición HTTP adicional. Con WOFF2 y subconjuntos, una fuente bien optimizada puede pesar menos de 20 KB; cuatro variantes de una sola familia mal configurada pueden superar los 400 KB.

¿El preload de fuentes funciona en todos los navegadores?

<link rel="preload"> es compatible con Chrome, Edge, Firefox y Safari modernos (cubre más del 95 % de usuarios). En navegadores que no lo soportan, simplemente se ignora sin causar errores — nunca bloquea la carga.

¿Cómo sé si mis fuentes están causando CLS?

Abre Chrome DevTools → pestaña Performance → activa "Web Vitals" y graba una carga de página. Los eventos de CLS aparecen marcados en línea de tiempo. También puedes usar PageSpeed Insights o el informe Core Web Vitals de Google Search Console para identificar páginas con CLS elevado causado por texto.

Compara proveedores

Otros proveedores y guías que vale la pena comparar:

← Todos