Como corrigir o Lazy Load do WP Rocket em imagens do Elementor
O que é o LazyLoad do WP Rocket falhando em imagens do Elementor?
O LazyLoad e o recurso do WP Rocket que adia o carregamento de imagens fora da tela para acelerar o primeiro render. Ele funciona em duas etapas: o PHP substitui o atributo src de cada imagem por um placeholder SVG e move a URL real para o atributo data-lazy-src; depois, um script no rodape devolve a URL real quando a imagem chega a 300 pixels do viewport. O Elementor, porém, renderiza muitas imagens como background-image via CSS inline ou injeta sliders e galerias por JavaScript depois do carregamento da página. Nesses casos o script do LazyLoad já terminou de rodar ou não reconhece o elemento, entao a imagem real nunca substitui o placeholder e o visitante ve um espaco vazio, uma imagem borrada ou um quadrado em branco.
Como identificar
- Imagens dentro de seções ou colunas do Elementor aparecem como espaco em branco ou um placeholder cinza até o usuário rolar e, as vezes, nem assim carregam
- Imagens de fundo (background) de seções do Elementor somem completamente no front, mas continuam visiveis no editor do Elementor
- O slider ou o carrossel do Elementor mostra so o primeiro slide com imagem e os demais ficam vazios
- No DevTools do navegador a tag img mostra o atributo data-lazy-src preenchido, mas o src permanece com o placeholder data:image/svg+xml
- As imagens voltam a aparecer assim que você desativa o WP Rocket ou desliga a opção LazyLoad em Media, confirmando que o conflito e do recurso
Como prevenir
- Sempre exclua do LazyLoad a imagem hero e o logo do header desde a primeira configuração, para não sacrificar o LCP em troca de carregamento adiado
- Depois de cada atualização do Elementor ou de um addon, revalide as páginas com imagem de fundo no modo anonimo, porque mudancas no markup do builder podem reintroduzir o conflito
- Mantenha uma lista versionada das classes e caminhos excluidos (elementor-widget-image, swiper-slide, caminhos de banners), para reaplicar rápido em outros sites do mesmo template
- Teste a opção Delay JavaScript Execution com a lista de exclusão do Elementor em ambiente de homologacao antes de ligar em producao
Causa
- A imagem e renderizada pelo Elementor como background-image em CSS inline (seção ou coluna com imagem de fundo); o LazyLoad de imagens de CSS so age quando a opção separada 'LazyLoad para imagens de fundo CSS' esta ligada em Settings -> Media.
- O widget e injetado por JavaScript depois do DOMContentLoaded (sliders, carrosseis, galerias e popups do Elementor), entao o script do LazyLoad já rodou e não reprocessa os novos elementos.
- Ha conflito com a opção Delay JavaScript Execution do WP Rocket, que segura o próprio script do Elementor responsável por montar as imagens até a primeira interacao do usuário.
- O Elementor ou um addon usa um atributo de imagem não padrão (data-src ou um src em data attribute) que o regex do LazyLoad do WP Rocket não reconhece como imagem a processar.
- A imagem crítica acima da dobra (logo no header, banner principal) também recebe LazyLoad, atrasando o render do LCP e gerando a impressao de que a imagem do Elementor não carrega.
Como resolver
- Confirme que o LazyLoad e a causa: No painel do WordPress abra as configurações do WP Rocket, va até a aba Media e desligue temporariamente a opção de LazyLoad para imagens. Limpe o cache, recarregue a página do Elementor no modo anonimo e veja se as imagens voltam. Se voltarem, o conflito esta confirmado e você reativa o LazyLoad para aplicar a exclusão correta no próximo passo.
WP Rocket -> Media -> Enable for images (desligar para testar) - Exclua as imagens do Elementor do LazyLoad pela interface: Ainda na aba Media, no campo Excluded images or iframes, adicione um identificador de cada imagem ou widget do Elementor que esta quebrando, um por linha. Use a classe CSS do elemento, parte da URL do arquivo ou o nome do widget. Salve as alterações e limpe o cache para o WP Rocket parar de aplicar o placeholder nesses assets.
elementor-widget-image elementor-background-overlay /uploads/2026/banner-principal.png swiper-slide - Ligue o LazyLoad para imagens de fundo CSS: Se o problema for em seções com imagem de fundo, mantenha o LazyLoad ligado, mas ative a opção dedicada a backgrounds de CSS. Isso ensina o WP Rocket a processar o background-image inline que o Elementor gera, em vez de ignora-lo. Limpe o cache e revalide o front.
WP Rocket -> Media -> Enable for CSS background images - Trate o conflito com o Delay JavaScript Execution: Se as imagens so aparecem após um clique ou scroll, o problema e o adiamento do JavaScript. Adicione os scripts do Elementor a lista de exclusão de Delay JavaScript Execution na aba File Optimization para que o builder monte as imagens sem esperar a interacao do usuário. Salve e limpe o cache.
WP Rocket -> File Optimization -> Excluded JavaScript Files /elementor/assets/js/frontend.min.js /elementor/assets/js/swiper.min.js - Preserve a imagem acima da dobra do LazyLoad: Para o banner principal ou o logo do header, que precisam carregar imediatamente, exclua-os do LazyLoad pela classe ou pelo caminho do arquivo. Isso evita o atraso de LCP e garante que a imagem hero do Elementor renderize no primeiro paint. Limpe o cache e meça novamente no PageSpeed Insights.
WP Rocket -> Media -> Excluded images or iframes elementor-section-hero /uploads/logo-header.svg
<?php
// functions.php do tema-filho: exclui imagens do Elementor do LazyLoad do WP Rocket
// Use quando precisar excluir um PADRAO de imagens em escala (varios banners/sliders).
add_filter( 'rocket_lazyload_excluded_attributes', function ( $attributes ) {
$attributes[] = 'class="elementor-widget-image';
$attributes[] = 'class="swiper-slide';
return $attributes;
} );
// Exclui imagens pelo trecho da URL (ex.: pasta de banners do Elementor)
add_filter( 'rocket_lazyload_excluded_src', function ( $src ) {
$src[] = '/uploads/elementor/';
$src[] = 'banner-principal';
return $src;
} );














