O Astro parte de uma vantagem enorme: por padrão envia zero JavaScript ao cliente. Mas isso sozinho não garante bons Core Web Vitals; o resto depende de decisões conscientes.
LCP: a imagem que importa
O maior elemento do viewport costuma ser uma imagem. Use o componente <Image /> do Astro para servir formatos modernos e tamanhos corretos, e pré-carregue apenas a imagem do hero.
---
import { Image } from 'astro:assets';
import hero from '../assets/hero.jpg';
---
<Image src={hero} alt="..." loading="eager" fetchpriority="high" />
CLS: reserve o espaço
O deslocamento de layout vem de elementos que carregam sem dimensões. Defina width e height em imagens e iframes, e evite injetar conteúdo acima da dobra após a primeira renderização.
INP: menos JS, melhor INP
É aqui que o Astro brilha. Cada componente que você evita hidratar remove trabalho da thread principal. Use ilhas apenas onde houver interação real:
<Carousel client:visible />
client:visible adia a hidratação até o componente entrar na tela.
Fontes sem piscar
Baixe as fontes e sirva-as localmente com font-display: swap. Nada de bloquear a renderização esperando o Google Fonts.
Resultado
Com essas regras, os projetos que entrego saem no verde no PageSpeed sem truques: é a consequência natural de enviar menos ao navegador.