Carregamento Preguiçoso

Como o carregamento preguiçoso de imagens e iframes melhora o Core Web Vitals, o atributo loading, os riscos de SEO de carregar conteúdo acima da dobra de forma preguiçosa, e como o Googlebot renderiza conteúdo adiado.

Publicado pela primeira vez: 2 de jul. de 2026 · Última atualização: 11 de ago. de 2026 · Avançado

O carregamento preguiçoso adia imagens e iframes fora da tela até que estejam prestes a entrar na visualização, reduzindo o peso inicial da página e ajudando o Core Web Vitals. A forma nativa é o atributo loading="lazy" em <img> e <iframe> — sem necessidade de JavaScript. O grande erro é carregar preguiçosamente a imagem hero/LCP, o que atrasa a Maior Pintura com Conteúdo. O Googlebot não rola nem clica, então qualquer coisa atrás de um evento de rolagem ou clique pode passar despercebida. Não é um fator de ranqueamento direto — o efeito ocorre através do Core Web Vitals e da rastreabilidade. Verifique o que realmente é renderizado na Ferramenta de Inspeção de URL do Search Console: as URLs das imagens devem estar no atributo src do HTML renderizado.

TL;DR — Lazy loading adia imagens e iframes fora da tela até que se aproximem do viewport, reduzindo o peso inicial da página (ajuda o LCP) e o trabalho inicial na thread principal (ajuda o INP). O atributo nativo loading="lazy" em <img>/<iframe> tem substituído a maioria das bibliotecas JS; apenas lazy e eager são valores significativos (auto está obsoleto). Os erros prejudiciais: usar lazy loading na imagem LCP/acima da dobra (atrasa exatamente a métrica que você está buscando) e esconder conteúdo atrás de rolagem/clique — o que o Googlebot nunca aciona porque ele não interage com a página. Não é um fator de ranqueamento direto; o efeito passa pelo Core Web Vitals e pela rastreabilidade. Verifique na Ferramenta de Inspeção de URLs do Search Console se os URLs das imagens estão no atributo src do HTML renderizado.

O que lazy loading realmente faz

A ideia é simples: carregue recursos apenas quando precisar deles, em vez de carregar tudo de uma vez. Em uma página com muitos recursos de mídia, baixar cada imagem e embed antecipadamente mantém o navegador ocupado buscando coisas que o visitante pode nunca rolar para ver — gastando banda, memória e bateria à toa. Adiar os que estão fora da tela permite que o conteúdo acima da dobra seja pintado mais cedo. Martin Splitt fez exatamente esse ponto no episódio “Carregamento preguiçoso desmistificado” do podcast oficial do Google: o objetivo é evitar trabalho que não traz resultado, porque imagens não críticas que a página poderia dispensar apenas mantêm o navegador ocupado.

Isso se conecta aos Core Web Vitals que a maioria das pessoas busca. Menos bytes competindo pela rede no início significa que o elemento Largest Contentful Paint pode renderizar mais cedo. Para iframes — anúncios, widgets sociais, seções de comentários, mapas — adiá-los também reduz o trabalho na thread principal durante a inicialização, o que é uma vitória para Interaction to Next Paint, não apenas para LCP. A própria orientação do web.dev do Google apresenta iframes com carregamento preguiçoso como uma melhoria de INP durante o carregamento da página.

Carregamento preguiçoso nativo vs. orientado por JavaScript

Há alguns anos, os navegadores ganharam um atributo nativo loading para imagens e iframes, então você pode entregar todo o trabalho ao navegador em vez de configurar uma API JavaScript. Em meu guia de SEO JavaScript na Ahrefs faço a mesma observação: desde que escrevi esse artigo, o carregamento preguiçoso passou em grande parte de ser orientado por JavaScript para ser tratado pelos navegadores. Você ainda encontrará configurações orientadas por JS, e para imagens elas geralmente são boas — a coisa que verifico é se o conteúdo real (não apenas imagens) está sendo carregado preguiçosamente, porque essas configurações são as que causaram problemas de conteúdo não ser capturado corretamente.

A versão nativa:

<!-- Below-the-fold image: defer it -->
<img src="gallery-07.jpg" loading="lazy" width="800" height="600" alt="…">

<!-- Off-screen embed: defer it -->
<iframe src="https://www.youtube.com/embed/…" loading="lazy" title="…"></iframe>

Sempre defina width/height explícitos (ou uma proporção de aspecto) em imagens preguiçosas para que o navegador reserve o espaço antes de a imagem carregar — esse é o maior risco de mudança de layout com imagens adiadas. Dimensões reservadas não são uma garantia absoluta de CLS, no entanto: se o layout ao redor ou um corte responsivo ainda mudar depois que a imagem carregar, você ainda pode ver uma mudança, então confirme com um rastreamento real de mudança de layout em vez de assumir que dimensões fixas sozinhas resolvem isso.

Carregamento preguiçoso e iframes precisam de mais uma distinção: loading="lazy" em um <iframe> apenas adia quando a busca e a criação do embed acontecem. Não define seu title, comportamento de foco, sandbox, allow/política de permissões, referrerpolicy, tratamento de consentimento ou dimensões para você — esses ainda precisam de atenção própria, e um embed pode continuar fazendo trabalho (scripts, pixels de rastreamento, layout) uma vez que se torna elegível para carregar. E não assuma que “abaixo da dobra” se comporta igual em todos os lugares: conteúdo com display: none, slides de carrossel fora da tela, elementos transformados e contêineres de rolagem aninhados podem intersectar o viewport de forma diferente de um elemento simples abaixo da dobra, então teste o layout real e os controles de navegação em vez de assumir equivalência.

Os valores do atributo loading

Apenas dois valores importam hoje:

  • loading="lazy" — adie o recurso até que esteja perto do viewport.
  • loading="eager" — carregue imediatamente, o comportamento padrão. Use-o para ser explícito sobre imagens acima da dobra.
Evidência desta afirmação The native loading attribute supports lazy loading for images and iframes without a JavaScript lazy-loading library. Escopo: Browser-level lazy loading behavior; browser heuristics decide the fetch distance. Confiança: alta · Verificado: web.dev: Browser-level image lazy loading

Você pode ver loading="auto" em artigos mais antigos — está obsoleto no Chrome, então não use. Não há necessidade; omitir o atributo já lhe dá o comportamento padrão (eager).

Quão perto é “perto”? loading="lazy" é uma dica, não uma garantia controlada pelo autor — a especificação deixa a decisão real de proximidade do viewport para o navegador. O Chromium tenta buscar um recurso preguiçoso cedo o suficiente para que esteja pronto quando você rolar até ele, e a distância de acionamento varia por navegador, velocidade de conexão e tipo de recurso; não é um valor fixo em pixels que você pode confiar ou reproduzir entre navegadores ou versões. Não publique — nem confie — em um número específico de “carrega N pixels antes do viewport”; trate a janela de proximidade do viewport como definida pela implementação e confirme o comportamento real com um rastreamento de rede no navegador/conexão que você se importa, em vez de assumir uma constante.

O lazy loading nativo também funciona bem com imagens responsivas: ele se aplica à seleção normal de src e srcset/sizes, então você não perde o comportamento de imagem responsiva ao adicionar loading="lazy". Se, em vez disso, você esconder a URL real apenas em um atributo data-* para um script trocar depois, o carregamento passa a depender desse script — teste o HTML renderizado e o que acontece se o script falhar (mais sobre isso nas abas Scripts e Solução de problemas).

Evidência desta afirmação Native lazy loading works with ordinary src and responsive srcset/sizes selection; hiding the real URL only in data-* attributes makes loading dependent on script and should be tested in rendered HTML and under script failure. Escopo: responsive image fetching and layout Confiança: alta · Verificado: HTML Standard: img

O erro nº 1: aplicar lazy loading ao LCP / imagem acima da dobra

Este é o erro que vejo com mais frequência, e todas as fontes concordam. Se você aplicar lazy loading à imagem hero — ou a qualquer imagem que provavelmente seja o elemento LCP — você está dizendo ao navegador para esperar pelo pixel mais importante para a velocidade de carregamento percebida. O navegador também não consegue aplicar lazy loading a uma imagem até saber onde ela ficará na página, então imagens acima da dobra com lazy loading tendem a carregar mais lentamente do que as sem lazy loading. Isso atrasa diretamente o Largest Contentful Paint, a métrica que o Google diz que deve ser resolvida nos primeiros 2,5 segundos de carregamento.

Não use lazy-load na imagem LCP observada ou provável; confirme o tempo real de requisição e pintura em um trace. Fonte: Lazy Loading

O caminho eager descobre a imagem LCP provável no HTML e inicia sua requisição prontamente. O caminho lazy aguarda as heurísticas de carregamento do navegador antes do início da requisição. A comparação não usa valores de tempo fixos e observa que o LCP real deve ser medido.

© Patrick Stox LLC · CC BY 4.0 ·

Splitt colocou o outro lado claramente no episódio do SOTR: se você não está usando lazy loading onde deveria, isso provavelmente prejudicará algum aspecto do Core Web Vitals — muito provavelmente o LCP. Então é uma faca de dois gumes. A regra:

  • Candidato provável ou observado a LCP → carregue com eager (omitindo loading="lazy", ou defina eager). Considere fetchpriority="high" na imagem LCP.
  • Abaixo da dobra → loading="lazy".

Nem toda imagem acima da dobra é o candidato a LCP — identifique o real (um trace de Performance ou o PageSpeed Insights vai nomeá-lo) e verifique o tempo de requisição dele em vez de tratar todas as imagens da primeira tela da mesma forma. E esses são hints separados, não uma configuração única: loading="eager" (ou omitir loading) só significa que o navegador não vai adiar a descoberta do recurso — isso não aumenta a prioridade de fetch por si só. fetchpriority é um hint distinto e consultivo por cima disso. Empilhar um <link rel="preload"> com loading="lazy" no mesmo recurso envia ao navegador intenções conflitantes, então verifique o waterfall real da rede em vez de assumir que a combinação faz o que você espera.

O anti-padrão geral é ativar o lazy loading para todas as imagens do site — um padrão comum em CMS. Como Splitt observou, se todas as imagens têm lazy loading, então imagens que estão (ou deveriam estar) imediatamente visíveis também têm, que é exatamente o caso que você quer evitar.

Como o Googlebot renderiza conteúdo com lazy loading

Aqui está a realidade do rastreamento que confunde as pessoas: o Googlebot não rola a página e não clica. Ele renderiza sua página com um navegador headless, mas não simula um usuário interagindo com ela. O Google afirma isso diretamente — seus métodos recomendados de lazy loading deliberadamente não dependem de ações do usuário como rolar ou clicar, porque o Google Search não interage com sua página.

Evidência desta afirmação Google Search does not scroll or click to trigger lazy-loaded content, so implementations should not depend on user interaction and should expose resource URLs in rendered HTML. Escopo: Google Search guidance for JavaScript-driven lazy loading. Confiança: alta · Verificado: Google Search Central: Lazy-load content

É por isso que o como da sua implementação importa. O documento do Google lista três implementações que considera seguras: o lazy loading nativo do navegador para imagens e iframes, a API IntersectionObserver (com um polyfill) ou uma biblioteca JavaScript que carrega dados conforme eles entram no viewport. Todas as três dependem da interseção com o viewport — não de um evento de rolagem ou clique que o Googlebot nunca vai disparar.

O padrão de alto risco é uma biblioteca de lazy loading em JS personalizada ou de terceiros. Se a biblioteca se comportar mal e o URL da imagem nunca chegar ao atributo src, o Google simplesmente não vai captar essa imagem — Splitt descreveu exatamente esse modo de falha no episódio do SOTR. Não há nada para indexar se o URL não estiver lá. Isso é a mesma coisa que eu sinalizo em meu guia de SEO para JavaScript: lazy loading de imagens normalmente é tranquilo, mas conteúdo carregado com lazy loading é onde os problemas de indexação aparecem, e a solução é verificar o que o Google realmente renderiza.

Rolagem infinita é um problema diferente

Não confunda lazy loading básico de imagens/iframes com rolagem infinita ou carregamento paginado. Adiar imagens é uma coisa; carregar novos pedaços de conteúdo conforme o usuário rola é outra, e isso exige uma arquitetura própria. A orientação do Google: dê a cada pedaço um URL persistente e único, mantenha o conteúdo estável por URL (use números de página absolutos como ?page=12, não valores relativos como ?date=yesterday) e atualize o URL exibido com a History API conforme cada pedaço se torna o conteúdo visível principal para que possa ser atualizado, compartilhado e linkado. Pule isso e o conteúdo mais profundo por trás de uma rolagem infinita pode nunca ser rastreado ou indexado de forma confiável.

Como testar

O caminho de verificação é o mesmo no documento do Google e na minha própria metodologia: use a Ferramenta de Inspeção de URL do Search Console e observe o HTML renderizado. Se os URLs das suas imagens (ou vídeos) aparecerem no atributo src nos elementos <img>/<video> desse HTML renderizado, sua configuração funciona. O Google diz isso claramente — verifique o HTML renderizado para garantir que seu conteúdo está nele. A formulação exata da fonte é “check the rendered HTML to make sure your content is in it” (tradução) «verifique o HTML renderizado para garantir que seu conteúdo está nele». Se o URL estiver ausente do src, esse é o seu problema, e geralmente aponta para um gatilho de rolagem/clique ou uma biblioteca quebrada.

Para uma grade de produtos com lazy loading, vá além dessa verificação de presença. Execute a matriz de testes de SEO para rolagem infinita com viewports padrão e altas, navegação nova e redimensionamento pós-carregamento, execuções sem ação e com rolagem incremental, contagens de links de produtos únicos e inspeção da árvore de acessibilidade. Redimensionar uma página inicializada não é equivalente a navegar no tamanho final do viewport porque observadores e cálculos em lote podem ser registrados apenas durante a inicialização. Evidência desta afirmação Google Search does not scroll or click to trigger lazy-loaded content, so implementations should not depend on user interaction and should expose resource URLs in rendered HTML. Escopo: Google Search guidance for JavaScript-driven lazy loading. Confiança: alta · Verificado: Google Search Central: Lazy-load content

Você também pode contar com suas ferramentas de performance web: o PageSpeed Insights sinaliza imagens fora da tela que você deveria adiar. Em meu guia de PageSpeed Insights na Ahrefs eu observo que a auditoria “adiar elementos fora da tela” está dizendo para você aplicar lazy loading em imagens — uma forma prática de conectar o diagnóstico que você já executa à solução.

Transparência sobre sinais de ranqueamento

Seja claro sobre o que lazy loading é e não é. Usá-lo não é um fator de ranqueamento direto, e não usá-lo não é uma penalidade. A conexão com o ranqueamento é indireta: ela passa pelos Core Web Vitals (principalmente LCP, às vezes INP para iframes) e pela capacidade de rastreamento, se uma implementação ruim esconder conteúdo. Splitt caracterizou o efeito no ranqueamento através dos Core Web Vitals como um fator minúsculo e ínfimo na maioria dos casos. Então otimize o lazy loading para a experiência de carregamento dos seus usuários e para uma indexação limpa — não porque você espera um aumento de ranqueamento do atributo em si.

Onde isso se encaixa

Lazy loading é uma alavanca no conjunto mais amplo de performance web. Ele combina com resource hints (preload/preconnect para os recursos que você quer antecipadamente), estratégia de carregamento de fontes, cache e uma CDN — e é avaliado, em última análise, por meio dos Core Web Vitals. Acertar a divisão acima-da-dobra/abaixo-da-dobra e é uma das vitórias mais baratas disponíveis.

Adicionar uma nota de especialista

Fixar uma citação de especialista

É uma pessoa nova? Crie o perfil não reivindicado dela em /admin/experts/ → Fixar uma citação de especialista primeiro.