Como corrigir o DOM size grande do Elementor no WordPress
O que é DOM size grande do Elementor?
O DOM size grande do Elementor e a quantidade excessiva de elementos HTML que a página renderiza, medida pela auditoria do Lighthouse chamada Avoid an excessive DOM size. Segundo a documentação do Google no web.dev, o Lighthouse alerta quando o body passa de aproximadamente 800 nos e aponta erro acima de aproximadamente 1.400 nos, além de avaliar a profundidade maxima da arvore e o número máximo de filhos por elemento. Um DOM grande aumenta o consumo de memória do navegador, encarece o calculo de estilos e o reflow de layout e prejudica a interatividade da página.
No Elementor o problema e estrutural. O modelo antigo de sections e colunas envolve cada bloco em várias camadas de div aninhadas (a section, o wrapper interno da section, a coluna e o wrapper interno da coluna), antes mesmo de chegar ao widget. Quando uma página tem muitas sections, colunas e widgets, esses wrappers se multiplicam e o total de nos dispara, derrubando a nota de performance no PageSpeed Insights mesmo com cache e imagens otimizadas.
Como identificar
- O PageSpeed Insights ou o Lighthouse exibem a auditoria ‘Avoid an excessive DOM size’ com um número alto de elementos (por exemplo 1.500 ou 2.000 nos) na página feita com Elementor.
- A auditoria reporta uma profundidade maxima da arvore DOM elevada e um elemento com muitos filhos, apontando o container do conteúdo do Elementor.
- A página abre visualmente leve, mas a nota de performance no mobile fica baixa e a métrica de interatividade (TBT ou INP) piora conforme o layout cresce.
- Ao inspecionar o código no navegador, cada bloco do Elementor aparece envolto em múltiplas divs aninhadas (section, wrapper, coluna, wrapper) antes do conteúdo visivel.
- Templates longos, páginas com muitas seções repetidas ou loops de posts montados com sections e colunas tem o DOM crescendo de forma proporcional ao número de blocos.
Como prevenir
- Construa novas páginas com Container (Flexbox) desde o inicio, em vez de sections e colunas, para nascer com menos divs aninhadas.
- Mantenha o Optimized Markup ativo em Elementor -> Configurações -> Performance como padrão do site, validando o CSS personalizado em staging.
- Monitore a auditoria ‘Avoid an excessive DOM size’ no PageSpeed após publicar páginas longas, mantendo o body abaixo do aviso de cerca de 800 nos sempre que possível.
- Evite addons que injetam marcacao pesada e prefira widgets nativos enxutos, revisando a arvore no Navigator antes de finalizar layouts complexos.
Causa
- A página foi montada com o modelo antigo de sections e colunas do Elementor, que envolve cada bloco em várias divs aninhadas (wrapper da section, coluna e wrapper da coluna) antes do widget, multiplicando os nos do DOM.
- O recurso Optimized Markup do Elementor, que remove o div wrapper interno de containers e widgets, esta desligado em Elementor -> Configurações -> Performance, deixando a marcacao com mais elementos do que o necessário.
- Cada widget recebe wrappers extras de estilo e o uso intenso de Inner Sections (seção dentro de seção) para alinhar conteúdo dobra a quantidade de divs em cada bloco.
- Loops de listagem (Loop Grid, posts ou produtos) repetem a mesma estrutura de container e widgets dezenas de vezes na mesma página, somando centenas de nos ao total medido pelo Lighthouse.
- Widgets de terceiros e addons do Elementor (sliders, mega menus, tabs) injetam marcacao duplicada ou nos ocultos que continuam contando para o DOM mesmo sem aparecer na tela.
Como resolver
- Meça o DOM atual no Lighthouse: Antes de mexer no layout, rode o PageSpeed Insights na URL afetada e abra a auditoria Avoid an excessive DOM size para anotar o total de elementos, a profundidade maxima e o elemento com mais filhos. Segundo o Google no web.dev, acima de cerca de 800 nos já e aviso e acima de cerca de 1.400 e erro. Esse número e a sua linha de base para comparar depois.
Acesse pagespeed.web.dev e análise a URL no modo Mobile Abra a auditoria 'Avoid an excessive DOM size' e anote: Total DOM Elements, Maximum DOM Depth e Maximum Child Elements - Ative o Optimized Markup do Elementor: O Optimized Markup remove o div wrapper interno de containers e widgets, reduzindo o número de nos sem mudar o layout. Ative o recurso e rode o Lighthouse de novo para confirmar a queda no total de elementos. Atenção: CSS personalizado que mira esses wrappers internos pode precisar de ajuste após a mudanca.
Painel WP -> Elementor -> Configurações -> aba Performance Ative a opção 'Optimized Markup' (ou 'Optimized DOM Output' em versões anteriores, na aba Recursos) Salve e limpe o cache do site - Migre sections e colunas para Container (Flexbox): O Container do Elementor substitui o par section mais coluna por um único elemento flexivel, eliminando os wrappers aninhados que mais inflam o DOM. Ative o recurso e reconstrua as seções mais pesadas usando Container no lugar de section com colunas. Esse e o ganho estrutural maior em páginas com muitos blocos.
Painel WP -> Elementor -> Configurações -> aba Recursos (Features) Garanta que o recurso 'Flexbox Container' esteja Ativo No editor, recrie as seções mais densas usando Container em vez de Section + Column - Enxugue Inner Sections e wrappers desnecessarios: Reveja o layout e elimine Inner Sections usadas so para alinhar conteúdo, colunas vazias e blocos aninhados sem função. Cada camada removida tira várias divs do DOM. Prefira ajustar alinhamento com as opções de flex do próprio Container em vez de criar novos níveis.
No editor Elementor, use o Navegador (Navigator) para ver a arvore de elementos Remova Inner Sections e colunas vazias usadas apenas para espaçamento Use o alinhamento Flexbox do Container no lugar de aninhar novas seções - Reduza a repeticao em loops e templates: Em Loop Grid, listas de posts ou produtos, simplifique o template do item para conter o mínimo de elementos, já que ele se repete por linha. Limite o número de itens exibidos por página e pagine o restante. Menos elementos por item, multiplicado pela repeticao, derruba bastante o total de nos.
Abra o template do Loop Item e remova widgets e wrappers não essenciais Defina um limite de itens por página (paginação) no widget de loop Rode o Lighthouse de novo e compare o Total DOM Elements com a linha de base do passo 1
<?php
// Conta os elementos do DOM no rodape do front-end (apenas para diagnostico).
// Use em ambiente de staging; remova depois de medir.
add_action( 'wp_footer', 'full_debug_dom_count', 999 );
function full_debug_dom_count() {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
?>
<script>
document.addEventListener('DOMContentLoaded', function () {
var total = document.getElementsByTagName('*').length;
var aviso = total > 800;
var erro = total > 1400;
console.log('[FULL] Total DOM elements: ' + total +
(erro ? ' (ERRO: acima de ~1400)' : aviso ? ' (AVISO: acima de ~800)' : ' (OK)'));
});
</script>
<?php
}














