Imagens de fundo são terríveis

Por que as imagens de fundo prejudicam suas Core Web Vitals e como substituí-las

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2026-03-09

Imagens de fundo são terríveis

Aqueles que me conhecem ou já me ouviram falar talvez já me tenham ouvido falar sobre imagens de fundo. Para os que não me conhecem: eu realmente, mas realmente, não gosto de imagens de fundo. Aqui está o porquê de eu não gostar de imagens de fundo, como encontrar rapidamente páginas com imagens de fundo e como corrigi-las.

Última revisão por Arjen Karel em março de 2026

Por que as imagens de fundo são ruins para as Core Web Vitals

Ao carregar uma página da web, cada elemento tem seu tempo e seu lugar. Com algumas técnicas modernas como adiamento (deferring), pré-carregamento (preloading), carregamento assíncrono (async loading), agendamento, definição de fetchpriority etc., conseguimos manter todos os recursos críticos sob controle. Exceto as imagens de fundo! 

Considere este exemplo do mundo real:

Diariamente, principalmente em sites WordPress, vejo esse padrão. Todas as imagens normais carregam com lazy load e algumas imagens (neste caso, os ícones sociais no rodapé) são imagens de fundo. Consegue adivinhar o que acontece?

<html>
<head>
    <style>
        footer {
            /* a margin of 100 vh wil make the footer off-screen !*/
            margin-top: 100vh;
            >.social {
                >.facebook {background-image: url('img/facebook.jpg');}
                >.instagram {background-image: url('img/instagram.jpg');}
                >.linkedin {background-image: url('img/linkedin.jpg');}
                >.email {background-image: url('img/email.jpg');}
            }
        }
    </style>
</head>
<body>
    <!-- yes this image is lazy loaded, because tiny mistakes happen! -->
    <img loading="lazy" src="img/hero.jpg"></img>
    <footer>
        <div class="social">
            <span class="facebook"></span>
<span class="instagram"></span>
<span class="linkedin"></span>
<span class="email"></span>
</div> </footer> </body> </html>

Você deve ter adivinhado: as imagens de fundo fora da tela são enfileiradas para download antes da imagem 'hero.jpg' muito mais importante que geralmente se tornará o elemento de Largest Contentful Paint na página.

Mas não é só isso!

Como eu disse, as imagens de fundo são terríveis! Isso porque, além da prioridade estranha que às vezes recebem, as imagens de fundo não possuem os recursos interessantes que as imagens normais têm!

  • Sem lazy loading: não há atributo de carregamento para imagens de fundo. O atributo loading="lazy" que funciona nas tags <img> (com 94,9% de suporte global) simplesmente não existe para fundos.
  • Sem async decoding: não há atributo decoding para imagens de fundo
  • Sem fetchpriority: não há atributo fetchpriority para imagens de fundo. Você não pode dizer ao navegador qual imagem de fundo é mais importante. Com tags <img>, 17,3% das páginas mobile já usam fetchpriority="high" em sua imagem LCP, de acordo com o Web Almanac 2025.
  • Fontes de imagem responsivas: a função image-set() para imagens de fundo não possui os mesmos recursos que você obtém com srcset e o elemento <picture>.
  • Sem atributo width e height. Não ser capaz de definir o simples atributo width e height significa que o navegador não pode reservar espaço para a imagem, o que causa Cumulative Layout Shift (CLS). Você acaba usando soluções alternativas em CSS, e mais código é sempre mais lento que menos código com a mesma complexidade!
  • Sem texto alt: imagens de fundo não têm atributo alt, o que prejudica a acessibilidade e significa que o Google Images não pode indexá-las.

Imagens de fundo carregadas via url() são candidatas válidas para o LCP. Uma imagem de fundo lenta aparecerá como seu LCP, mas você não tem nenhuma das ferramentas acima para otimizá-la. O navegador deve primeiro fazer o download e analisar o CSS antes mesmo de saber que a imagem existe. Esse atraso no carregamento de recursos (resource load delay) adiciona cerca de 400ms ao LCP mediano de acordo com as próprias medições do Google.

De acordo com o Web Almanac 2025, 9% das páginas mobile ainda usam uma imagem iniciada por CSS como seu elemento LCP. Esse número não mudou desde 2022. Em sites monitorados pelo CoreDash, substituir uma imagem de fundo de destaque (hero) por uma tag <img> melhorou o LCP mediano em 35%.

Encontre rapidamente todas as imagens de fundo em uma página

Então, como descobrimos se uma página da web tem imagens de fundo nelas? Bem, você pode verificar o network inspector, filtrar por imagens, clicar com o botão direito na barra de menus, habilitar a coluna initiator e verificar o initiator, mas é muito mais fácil colar este código no dev console.

Basta abrir o dev console com Ctrl-Shift-I, navegar até a aba console e colar este código. Ele mostrará todas as imagens de fundo da página.
let bgimg = performance.getEntriesByType('resource')
  .filter(rs => rs.initiatorType == 'css')
  .map(rs => {
  return {
    name: rs.name,
    initiator: rs.initiatorType
  }
}) || [];

(bgimg.length > 0)?
    console.table(bgimg):
    console.log('No background images on this page!');

Isso mostrará uma tabela bem formatada com todos os nomes das imagens de fundo e seus initiators.

Como evitar imagens de fundo

Imagens de fundo são facilmente evitáveis. Como fazer isso depende da própria imagem. Existem basicamente 2 métodos.

No caso de 'imagens normais'

Você não acreditaria se eu dissesse, mas na maioria dos casos em que encontro imagens de fundo, a parte de fundo da imagem nem tem um propósito. As imagens apenas 'precisam estar em algum lugar na página' e o background-image:url() é mal utilizado para esse fim.
Se for esse o caso, basta adicionar uma tag de imagem normal e remover a imagem de fundo do stylesheet.

No caso de imagens de capa (cover images):

Imagens de capa são imagens que cobrem completamente um contêiner pai. Usar imagens de fundo como imagens de capa até faz sentido porque, há muito tempo, essa costumava ser a única maneira de obter imagens de capa e acho que as pessoas simplesmente se apegam ao que conhecem. Felizmente, existem opções melhores disponíveis para nós. Então, vamos consertar isso!
No caso de imagens de capa, basta remover o estilo   background-image: url(hero.jpg); background-size: cover; e colocar uma imagem normal nesse mesmo contêiner e editar o CSS para ficar assim:

<style>
.img-container {
    position: relative;
    > img {
       width: 100%;
       height: 100%;
       object-fit: cover;
       position: absolute;
       z-index: 1;
   }
}
</style>

<div class="img-container">
  <img
       height="500"
       width="300"
       decoding="async"
       loading="lazy"
       src="hero.jpg"
       srcset="hero-320w.jpg, hero-480w.jpg 1.5x"
       alt="alt text"
       fetchpriority="low"
  >
</div>

Agora você tem uma imagem adequada com os atributos width, height, loading, decoding, srcset, fetchpriority e alt. Tudo o que o navegador precisa para carregá-la de forma eficiente.

Quando você deve manter uma imagem de fundo

Às vezes, você realmente precisa de uma imagem de fundo em CSS: padrões de repetição, sobreposições decorativas ou casos em que o CMS não oferece outra opção. Nessas situações, faça o preload da imagem para que o navegador a descubra cedo:

<link rel="preload" href="hero.webp" as="image" type="image/webp" fetchpriority="high">

Coloque isso o mais cedo possível no <head>. Para imagens de fundo fora da tela, você pode adiá-las com um IntersectionObserver para que elas carreguem apenas quando o usuário rolar para perto delas.

Para verificar se suas alterações realmente melhoram a user experience real, configure o Real User Monitoring. As pontuações de laboratório informam o que deve ser mais rápido. Os dados de campo de visitantes reais informam o que realmente é.

About the author

Arjen Karel is a web performance consultant and the creator of CoreDash, a Real User Monitoring platform that tracks Core Web Vitals data across hundreds of sites. He also built the Core Web Vitals Visualizer Chrome extension. He has helped clients achieve passing Core Web Vitals scores on over 925,000 mobile URLs.

CoreDash has MCP built in.

Connect it to Claude or any AI agent. Ask it why your INP spiked last Tuesday.

See how it works
Imagens de fundo são terríveisCore Web Vitals Imagens de fundo são terríveis