Astro parte de una ventaja brutal: por defecto envía cero JavaScript al cliente. Pero eso no garantiza buenos Core Web Vitals; el resto depende de decisiones conscientes.

LCP: la imagen que importa

El elemento más grande del viewport suele ser una imagen. Usa el componente <Image /> de Astro para servir formatos modernos y tamaños correctos, y precarga solo la imagen del hero.

---
import { Image } from 'astro:assets';
import hero from '../assets/hero.jpg';
---
<Image src={hero} alt="..." loading="eager" fetchpriority="high" />

CLS: reserva el espacio

El desplazamiento de diseño viene de elementos que cargan sin dimensiones. Define width y height en imágenes e iframes, y evita inyectar contenido por encima del fold después del primer render.

INP: menos JS, mejor INP

Aquí Astro brilla. Cada vez que evitas hidratar un componente, eliminas trabajo del hilo principal. Aplica islas solo donde haya interacción real:

<Carousel client:visible />

client:visible retrasa la hidratación hasta que el componente entra en pantalla.

Fuentes sin parpadeo

Descarga las fuentes y sírvelas localmente con font-display: swap. Nada de bloquear el render esperando a Google Fonts.

Resultado

Con estas reglas, los proyectos que entrego salen en verde en PageSpeed sin trucos: es la consecuencia natural de enviar menos al navegador.