Corrigir Ensure text remains visible during webfont load

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2026-02-24

Resolvendo "Ensure text remains visible during webfont load" no Lighthouse.

Arjen Karel Core Web Vitals Consultant
Arjen Karel
linkedin

"Ensure text remains visible during webfont load" em resumo

Webfonts são fontes que não estão disponíveis por padrão para uso em um navegador da web. O que acontece é que as webfonts precisam ser baixadas antes de poderem ser usadas. Durante o download de uma webfont, o texto em uma página da web fica temporariamente oculto até que a webfont seja carregada.

Como resultado, parecerá que a página carrega muito mais devagar porque a página não "terminou" de carregar para os visitantes usarem. Isso pode levar a uma experiência do usuário reduzida. Quando você executa uma análise do Lighthouse em sua página, um aviso sobre o desempenho de carregamento da página aparece: "Ensure text remains visible during webfont load".

Resolva isso alterando o valor de font-display ou usando um carregador de fontes. Eu explico como isso funciona neste artigo.

Ensure text remains visible during webfont load

Certifique-se de que o texto permaneça visível durante o carregamento de webfonts

Antes da existência das webfonts, os web designers estavam presos a apenas um pequeno número de fontes pré-instaladas. As webfonts dão a você a liberdade de usar qualquer fonte em um site. 

Claro que isso soa bem, mas as webfonts também têm suas desvantagens; elas diminuem a velocidade de carregamento da página de várias maneiras.

Webfonts geralmente são arquivos grandes que não são instalados em um computador por padrão. Portanto, as webfonts devem ser baixadas antes de poderem ser usadas. Durante o download de uma webfont, o texto em uma página da web ficará temporariamente oculto até que a webfont seja totalmente carregada. Isso contribui para uma experiência do usuário ruim; ninguém quer olhar para uma tela vazia por muito tempo.

Assim que a webfont é carregada e renderizada, o navegador substitui o "texto invisível" pelo texto final com a nova webfont. Este momento é chamado de Flash of Invisible Text (FOIT). Este FOIT é o que faz com que a mensagem de erro "Ensure text remains visible during webfont load" apareça..

Ensure text remains visible during webfont load

Carregando uma webfont em sua página e não tomando nenhuma precaução para evitar este Flash of Invisible Text? Ao analisar o PageSpeed no Lighthouse, a seguinte mensagem aparecerá: "Ensure text remains visible during webfont load". Isso informa quanto tempo você poderia economizar tornando o texto visível antes que a webfont seja carregada. Para 1 única fonte, isso é facilmente 100ms.

Por que o texto invisível é ruim para a velocidade da página?

O texto invisível não diminuirá realmente o tempo de carregamento final medido de uma página. Então, por que o Lighthouse acha que é um problema tão grande? 

O Google acha importante que uma página da web forneça a melhor experiência do usuário possível. A experiência do usuário pode ser melhorada mostrando o conteúdo na página o mais rápido possível. Compare as duas versões em filmstrip de nossa página inicial abaixo:

Flash of Invisible TextFOIT com uma webfont

Sem flash de texto invisível com display:swapSem FOIT com uma webfont

Como você pode ver, as duas páginas terminaram de carregar exatamente ao mesmo tempo. Ainda assim, a versão mais recente do site parece muito melhor para os visitantes. Os visitantes podem começar a ler imediatamente.

É por isso que é inteligente mostrar o texto de qualquer maneira - não na fonte final, mas em uma fonte de "fallback" (alternativa). Dessa forma, o visitante pensa que sua página realmente carrega super rápido.

Um breve lembrete: FOIT e FOUT

Antes de prosseguirmos, é útil distinguir os seguintes conceitos: FOIT e FOUT. FOIT significa Flash of Invisible Text e ocorre quando as webfonts não são visíveis durante o carregamento. Você pode atenuar isso incluindo uma fonte de fallback. Quando a fonte de fallback é substituída pela webfont, é chamado de FOUT, Flash of Unstyled Text.

Tornar as webfonts visíveis durante o carregamento

Existem duas maneiras de tornar as webfonts visíveis durante o carregamento: a primeira é através do valor CSS font-display; a segunda é usando uma fonte de fallback através de uma classe. Ambos os métodos têm vantagens e desvantagens, que discutirei abaixo.

Método 1: Font-display:swap

Font-display é um descritor CSS que está disponível para todos os navegadores modernos. O descritor font-display determina como uma fonte é exibida com base em se e quando ela foi baixada. Font-display é usado em uma regra @font-face. 

Existem diferentes valores de font-display: block, swap, fallback e optional. Use o valor swap para evitar o FOIT e, para que o texto apareça na tela o mais rápido possível, use o valor swap. 

Depois de definirmos o valor font-display: swap na regra @font-face, as fontes padrão do sistema são usadas enquanto a página carrega até que as webfonts sejam carregadas. Isso ajuda o visitante a ler o texto na página imediatamente.

Google fonts

Ao usar o Google fonts, você pode usar o método font-display: swap com um simples "&display=swap" na folha de estilo ou código de incorporação.  

<!-- via uma folha de estilo externa -->
<link href="https://fonts.googleapis.com/css?family=Open+Sans&display=swap" rel="stylesheet">
<!-- via o método de importação -->
<style>
 @import url ('https://fonts.googleapis.com/css?family=Open+Sans&display=swap); 
</style>

A propósito, não somos fãs do Google fonts. É quase sempre muito mais rápido hospedar webfonts você mesmo. Isso lhe dá mais controle sobre o processo de "preloading" das fontes. Você pode usar a conexão http/2 já existente e não precisa baixar uma folha de estilo extra.

Fontes locais

Você está usando fontes locais? (Ótimo! Isso é muito mais rápido que o Google fonts.) Então você pode adicionar seu próprio font-display: swap à regra @font-face.

@font-face { 
 font-family: "Open Sans";  
 font-weight: 400; 
 font-style: normal; 
 src: url("OpenSans400.woff2") format("woff2"); 
 font-display: swap
}

Método 2: Fontes com uma classe

A segunda maneira de tornar as fontes visíveis durante o carregamento é trabalhar com classes. Essas classes geralmente (mas nem sempre) são adicionadas ao elemento <body> ou <html>.

A vantagem deste método é que você tem mais controle sobre a fonte de fallback e o tempo do Flash of Unstyled Text.

Este método funciona da seguinte forma: Indique em sua folha de estilo que uma página deve inicialmente ser renderizada com uma fonte (a fonte de fallback). Em seguida, você carrega a webfont por meio da API FontFace do JavaScript ou por preloading. Após esta fonte ter sido carregada, adicione uma classe à sua página. A classe garante que a webfont seja ativada.

Por que você faria isso, você pode perguntar? Você faz isso para obter mais controle sobre a fonte de fallback. Você pode exibir a fonte de fallback com um espaçamento de linha maior ou um tamanho diferente para que corresponda melhor à webfont. Isso evita as mudanças de layout (layout shifts).

Ao usar várias webfonts, você pode usar o método da API FontFace para alternar todas as fontes de uma vez. Isso economiza muitas repinturas (repaints) do navegador. Pessoalmente, não sou fã deste método; isso garante que o FOUT ocorra após a última fonte ter sido carregada. Portanto, isso é sempre mais tarde do que o necessário.

Fonte com uma classe via a API FontFace:

A primeira maneira de usar fontes com uma classe é por meio da API FontFace. Carregue a webfont via JavaScript. Assim que a fonte for carregada, adicione uma classe.
<style>
  //fonte de fallback com um font-size de .9rem
  html{
    font-family: sans-serif;
    font-size:.9rem;
  }  

  //fonte webfont com um font-size de 1rem
  html.fl{
    font-family: 'webfont';
    font-size:1rem;
  }
</style>

<script>
var font = new FontFace("webfont", "url(/font.woff2)", {
  style: 'normal', unicodeRange: 'U+000-5FF', weight: '400'
});

// não espere pela árvore de renderização, inicie uma busca imediata!
font.load().then(function() {
  document.fonts.add(font);
  document.documentElement.classList.add("fl")
});
</script>

Através de um link de preload

O segundo método é através de um link de preload. Faça o preload da fonte conforme descrito abaixo. Feito isso, altere a classe do elemento <html>.

<link 
  rel="preload" 
  href="/webfont.woff2" 
  as="font" 
  type="font/woff2" crossorigin
  onload="document.documentElement.classList.add('fl')">

<style>
  //fonte de fallback com um font-size de .9rem
  html{
    font-family: sans-serif;
    font-size:.9rem;
  }  

  //fonte webfont com um font-size de 1rem
  html.fl{
    font-family: 'webfont';
    font-size:1rem;
  }

  //fontface, só é ativado assim que a classe .fl for adicionada à tag html
  @font-face{
    font-family:'Open Sans';
    font-style:normal;
    font-weight:400;
    font-display:swap;
    src: url(/webfont.woff2) format("woff2");
    unicode-range:U+000-00FF;
  }
</style>

Dicas e truques extras

  1.    Sempre faça o preload de https://www.corewebvitals.io/nl/pagespeed/ensure-text-remains-visible-during-web font-load? fontes visíveis. As fontes não são baixadas por padrão até que uma fonte seja usada. Tem certeza que precisa de uma webfont? Nesse caso, faça o preload para que ela fique disponível mais cedo.
  2. Quer evitar totalmente o FOIT e o FOUT? Use font-display: optional em combinação com o preloading.
  3. Hospedar as webfonts você mesmo é sempre mais rápido do que webfonts via Google fonts ou outra CDN externa.

Performance degrades unless you guard it.

I do not just fix the metrics. I set up the monitoring, the budgets, and the processes so your team keeps them green after I leave.

Start the Engagement
Corrigir Ensure text remains visible during webfont loadCore Web Vitals Corrigir Ensure text remains visible during webfont load