Otimizando Core Web Vitals no Astro
Como reduzi o LCP e subi a nota no PageSpeed Insights
Ao rodar a primeira análise da minha landing page em Astro no Google PageSpeed Insights, a nota no desktop estava em 61, com um LCP de 3.8 segundos.
O Diagnóstico no PageSpeed Insights
No relatório do Lighthouse, o gargalo estava nas requisições bloqueantes de renderização:
Render-blocking requests:
- Google Fonts CSS (fonts.googleapis.com): 400 ms
- Material Symbols CSS: 200 ms
Mesmo usando Astro, importar fontestexternas diretamente no <head> com tags normais travava a renderização inicial da página.
O que Fiz para Resolver
1. Carregamento Assíncrono do Google Fonts
A tag <link rel="stylesheet"> padrão bloqueia a renderização até baixar a folha de estilos.
Mudei para pré-conexão com preconnect e carregamento assíncrono com preload:
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
rel="preload"
as="style"
href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@600;700;800&family=Inter:wght@400;500;600&display=swap"
/>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@600;700;800&family=Inter:wght@400;500;600&display=swap"
media="print"
onload="this.media='all'"
/>
<noscript>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@600;700;800&family=Inter:wght@400;500;600&display=swap" />
</noscript>
2. SVGs Nativos em Vez de Fontes de Ícones
Importar a biblioteca inteira de Material Symbols Outlined via CDN para usar apenas 5 ícones na página adicionava requisições bloqueantes desnecessárias.
Substituí por SVGs inline diretamente nos componentes do Astro. O Astro compila o SVG no build e não gera requisiçõestextras de rede.
Resultados
Depois de subir essas alterações:
- FCP (First Contentful Paint): caiu de 3.8s para 0.4s.
- LCP (Largest Contentful Paint): caiu de 3.8s para 0.6s.
- Score no PageSpeed: subiu para 98+ no Desktop e Mobile.