Scanverra

Como Corrigir o Cumulative Layout Shift (CLS)

O CLS mede o quanto o conteúdo visível se move inesperadamente enquanto a sua página carrega - um botão que se desloca para a direita mesmo quando o vai tocar, ou texto que salta página abaixo a meio da leitura. O limite do Google para "bom" é uma pontuação de 0,1 ou inferior, e é um dos três Core Web Vitals oficiais.

Porque é que a Sua Página Está a Deslocar-se

Quase todos os problemas de CLS vêm de uma de três fontes:

  • Imagens e iframes sem dimensões reservadas. Se o navegador não souber o tamanho de uma imagem antes de esta carregar, renderiza a caixa com altura zero e depois desloca tudo o que está abaixo assim que a imagem chega.
  • Conteúdo injetado acima do conteúdo existente. Anúncios, barras promocionais e banners de cookies inseridos no DOM após a renderização inicial empurram tudo o que está abaixo deles para baixo.
  • Web fonts que reformatam o texto ao trocar. Uma fonte de recurso é renderizada primeiro, depois a fonte real carrega e substitui-a com uma largura/altura diferente, reformatando cada linha que toca.

Como Identificar o Que Está a Deslocar-se

As verificações de desempenho do Scanverra pontuam o CLS diretamente a partir de uma execução real do Lighthouse contra o seu URL em produção, usando a mesma métrica cumulative-layout-shift em que os dados de campo do Google se baseiam. Quando está elevado, o Scanverra assinala-o como um problema distinto - não apenas um número, mas um problema com nome - porque um layout instável também quebra outra coisa: um agente de IA ou uma ferramenta automatizada a tentar clicar num botão que acabou de se mover vai visar o elemento errado.

Para encontrar o elemento específico responsável, o painel Performance do Chrome DevTools regista entradas de "Layout Shift" com o nó exato que se moveu e por quanto - abra-o, grave o carregamento de uma página, e procure os marcadores vermelhos de deslocamento de layout na faixa Experience.

Como Corrigir

1. Reserve espaço com dimensões explícitas

Cada imagem, vídeo e iframe deve declarar a sua largura e altura (ou usar o aspect-ratio CSS moderno) para que o navegador possa alocar a caixa correta antes de o recurso chegar:

Width/height explícitos reservam a caixa antecipadamentetypescript
1<img
2  src="/product.webp"
3  alt="Wireless keyboard, top view"
4  width={640}
5  height={480}
6  loading="lazy"
7/>

Quando o tamanho exato em pixels varia (um embed responsivo, por exemplo), use CSS em alternativa:

aspect-ratio reserva espaço sem dimensões fixas em pixelscss
1.video-embed {
2  width: 100%;
3  aspect-ratio: 16 / 9;
4}

2. Dê ao conteúdo injetado dinamicamente um espaço de altura fixa

Se um banner de cookies, um espaço de anúncio ou uma barra promocional tiver de ser inserido após a renderização inicial, dê ao seu contentor um min-height reservado desde o início em vez de o deixar empurrar o conteúdo para baixo quando chega - mesmo uma caixa de espaço reservado vazia evita o deslocamento.

3. Ajuste as métricas da sua fonte de recurso à fonte real

Use font-display: swap combinado com uma fonte de recurso cuja x-height e largura média de carácter estejam próximas da sua fonte real (ferramentas como o Fontaine ou o ajuste manual de size-adjust num bloco @font-face podem alinhá-las), para que a troca não reformate visivelmente a linha.

4. Nunca insira conteúdo acima da posição atual de scroll do utilizador

Se novo conteúdo tiver de aparecer - um banner de "novas publicações disponíveis", por exemplo - insira-o abaixo da dobra ou exija uma ação do utilizador para o revelar, em vez de o injetar acima do que já está visível.

Como o Scanverra Deteta Problemas de CLS

O Scanverra executa uma passagem real do Lighthouse contra o seu URL em produção e lê o valor real de cumulative-layout-shift a partir dela - a mesma execução usada para o LCP e o TTFB - e assinala um problema dedicado quando está elevado, com uma descrição ligada ao motivo pelo qual a instabilidade de layout importa especificamente para quem (humano ou automatizado) tenta interagir com a sua página.

FAQ

Frequently asked questions

Qual é uma boa pontuação de CLS?

0,1 ou inferior é "bom". Entre 0,1 e 0,25 precisa de melhorias, e acima de 0,25 é "fraco". A pontuação não tem unidade - é uma soma de quanto os elementos visíveis se moveram, ponderada pela proporção do viewport que ocupam.

Um deslocamento de layout conta mesmo que aconteça rapidamente?

Sim. O CLS não se importa com a velocidade, apenas com a distância e a área - um deslocamento ultrarrápido que move um elemento grande adiciona a mesma pontuação que um lento. Os únicos deslocamentos excluídos são os que acontecem nos 500ms seguintes a uma interação do utilizador, como um clique ou toque.

Porque é que o meu CLS parece bom localmente mas mau no relatório do Scanverra?

Testes locais numa ligação rápida frequentemente carregam anúncios, fontes e embeds antes de reparar num deslocamento. O Scanverra mede a sequência real de renderização contra o seu URL em produção, o que revela deslocamentos que só aparecem sob condições de rede realistas.

Cabeçalhos fixos ou banners de cookies contam para o CLS?

Só se empurrarem conteúdo já existente para baixo depois de este já estar renderizado. Um banner de cookies que sobrepõe conteúdo, ou um que tem espaço reservado desde o primeiro render, não conta - um que desliza e empurra o conteúdo da página para baixo, conta.

Free - no sign-up required

Verifique a sua pontuação de CLS gratuitamente

Execute uma auditoria de desempenho e veja exatamente quão estável é o seu layout, em desktop e em mobile.

Run free audit