Entender as intervenções pesadas de anúncios do Chrome

Publicado em: 22 de setembro de 2025. Última atualização: 7 de janeiro de 2026

Para os usuários, poucas coisas são mais frustrantes do que uma página da Web que de repente fica muito lenta, descarrega a bateria ou consome a cota mensal de dados. Às vezes, o problema não é o conteúdo que eles vieram assistir, mas um anúncio sendo veiculado em segundo plano.

Para proteger a experiência do usuário, o Chrome impõe limites aos recursos que um anúncio pode usar. Quando um anúncio excede esses limites, tornando-se um anúncio pesado, o Chrome o descarrega para liberar os recursos do dispositivo.

Esta documentação explica como essa intervenção funciona, os limites específicos envolvidos e algumas práticas recomendadas que você pode usar para garantir que os anúncios tenham uma boa performance.

O que é a intervenção de anúncios pesados?

A intervenção de anúncios pesados é um mecanismo do Chrome que monitora o uso de recursos dos frames de anúncios. Se um anúncio consumir uma quantidade desproporcional de largura de banda ou capacidade de processamento da CPU, o Chrome vai descarregar esse frame específico.

Em vez do anúncio, o usuário vai ver uma caixa cinza com a mensagem Anúncio removido, geralmente acompanhada de um link Detalhes explicando que o anúncio usou muitos recursos.

Uma caixa cinza com o rótulo "Anúncio removido" e um link "Detalhes", que aparece no lugar de um anúncio pesado que excedeu os limites de recursos.
Uma amostra de um anúncio após a remoção.

Quando um anúncio é considerado pesado?

O Chrome determina que um anúncio é pesado com base em três limites específicos. Se um anúncio não tiver sido interagido pelo usuário e atender a qualquer um dos seguintes critérios, ele será descarregado:

  • Uso da rede:o anúncio usa mais de quatro megabytes de largura de banda da rede.
  • Uso máximo da CPU:o anúncio usa a linha de execução principal por mais de 15 segundos em qualquer janela de 30 segundos.
  • Uso total da CPU:o anúncio usa a linha de execução principal por mais de 60 segundos no total. Todos os recursos usados por iframes descendentes do frame do anúncio são contabilizados nos limites da intervenção nesse anúncio.

Quais são alguns gatilhos comuns para essa intervenção?

Alguns tipos de comportamento de anúncio têm mais chances de acionar essas intervenções do que outros. Os culpados mais comuns incluem:

  • Mídia não compactada:carregar imagens muito grandes e mal compactadas.
  • JavaScript pesado:realizar operações extensas, como decodificar arquivos de vídeo usando JavaScript.
  • Cálculos pesados:realização de cálculos complexos em segundo plano.
  • Conteúdo de vídeo sem gestos:carregar arquivos de vídeo grandes antes que um usuário interaja com um anúncio.

O que acontece quando um anúncio é removido?

Quando o Chrome detecta que um anúncio excedeu os limites de anúncios pesados, ele toma medidas imediatas para proteger os recursos do dispositivo do usuário.

A experiência do usuário

Da perspectiva do usuário, o anúncio é descarregado imediatamente. Em vez disso, o Chrome mostra uma caixa cinza com a mensagem Anúncio removido. Se o usuário clicar em Detalhes no contêiner, uma explicação específica vai aparecer.

A experiência do desenvolvedor

O Chrome também gera um relatório de intervenção com a API Reporting para informar exatamente o que aconteceu. Antes, esses relatórios eram enviados apenas para o próprio frame do anúncio e os frames descendentes. No entanto, muitas vezes os publishers não tinham como saber que os anúncios nas próprias páginas estavam sendo removidos. Para resolver isso, o Chrome ampliou o mecanismo de denúncia. Agora, os relatórios de intervenção são enviados para o frame de incorporação (o pai do frame de anúncio raiz), além do próprio frame de anúncio. Os relatórios enviados ao frame de incorporação incluem o ID do frame filho e o URL do frame do anúncio.

Para configurar a página para relatórios HTTP, a resposta precisa incluir o cabeçalho Report-To:

Reporting-Endpoints: default="https://example.com/reports"

A solicitação POST acionada vai incluir um relatório como este:

POST /reports HTTP/1.1
Host: example.com

Content-Type: application/report

[{
 "type": "intervention",
 "age": 60,
 "url": "https://example.com/url/of/ad.html",
 "body": {
   "sourceFile": null,
   "lineNumber": null,
   "columnNumber": null,
   "id": "HeavyAdIntervention",
   "message": "Ad was removed because its CPU usage exceeded the limit. See https://www.chromestatus.com/feature/4800491902992384?utm_source=devtools"
 }
}]

O frame de incorporação vai receber um relatório semelhante, endereçado ao URL do frame de incorporação, mas a mensagem também vai conter o ID do frame filho e o URL específico dele:

...
"message": "Ad was removed because its CPU usage exceeded the limit. See https://www.chromestatus.com/feature/4800491902992384?utm_source=devtools (id=123;url=http://example2.com/pre-redirect-ad-url.html)"
...

A API JavaScript fornece o ReportingObserver com um método observe() que pode ser usado para acionar um callback fornecido em intervenções. Isso pode ser útil se você quiser anexar mais informações ao relatório para ajudar na depuração.

// callback that will handle intervention reports
function sendReports(reports) {
  for (let report of reports) {
    // Log the `report` json using your own reporting process
    navigator.sendBeacon('https://report.example/your-endpoint', report);
  }
}

// create the observer with the callback
const observer = new ReportingObserver(
  (reports, observer) => {
    sendReports(reports);
  },
  { buffered: true }
);

// start watching for interventions
observer.observe();

Como a intervenção descarrega a página do iframe (por exemplo, um anúncio), use o evento pagehide para garantir que o callback de relatórios capture o relatório de intervenção antes que a página desapareça.

window.addEventListener('pagehide', (event) => {
  // pull all pending reports from the queue
  let reports = observer.takeRecords();
  sendReports(reports);
});

O JSON resultante do JavaScript é semelhante ao enviado na solicitação POST:

[
  {
    type: 'intervention',
    url: 'https://example.com/url/of/ad.html',
    body: {
      sourceFile: null,
      lineNumber: null,
      columnNumber: null,
      id: 'HeavyAdIntervention',
      message:
        'Ad was removed because its network usage exceeded the limit. See https://www.chromestatus.com/feature/4800491902992384',
    },
  },
];

Práticas recomendadas para desenvolvedores

Para evitar que seus anúncios fiquem abaixo do banner de anúncio pesado, siga estas práticas recomendadas:

  • Exigir interação do usuário para conteúdo pesado:os critérios de intervenção se aplicam a anúncios com que o usuário não interagiu. Se um usuário clicar ou tocar no seu anúncio, os limites de recursos não serão mais aplicados. Para experiências de vídeo ou rich media, aguarde um gesto do usuário (como um "clique para reproduzir") antes de carregar recursos pesados.
  • Otimize imagens e vídeos:verifique se as imagens estão compactadas e os vídeos otimizados para a Web. Evite carregar arquivos de vídeo grandes automaticamente. Em vez disso, use marcadores de posição leves até que o usuário interaja.
  • Auditar o uso da CPU:animações complexas ou operações JavaScript que acionam layout e renderização contínuos podem aumentar o uso da CPU. Use ferramentas para identificar gargalos no código que podem manter a linha de execução principal ocupada por longos períodos.
  • Monitore frames descendentes:lembre-se de que a contagem de recursos inclui tudo dentro do iframe do seu anúncio. Se o anúncio carregar pixels de rastreamento ou subframes de terceiros, o uso de recursos deles será contabilizado no seu limite.
  • Isolar conteúdo que não é de publicidade:separe os frames de conteúdo que não é de publicidade em domínios diferentes ou padrões reconhecíveis que provavelmente não serão considerados domínios de publicidade pela política do provedor da lista de filtros.

Como depurar e diagnosticar a causa de uma intervenção?

Para solucionar e resolver intervenções pesadas de anúncios, primeiro entenda como a lógica de detecção do Chrome identifica o conteúdo como um anúncio e use as ferramentas de desenvolvedor integradas para auditar os gatilhos de recursos específicos que levaram à remoção.

Como o Chrome detecta a presença de um anúncio?

O Chrome marca o conteúdo como um anúncio ao corresponder solicitações de recursos a uma lista de filtros. A lógica de detecção se aplica ao conteúdo em iframes. O frame da página principal nunca é considerado relacionado a anúncios, mesmo que contenha scripts de anúncios. Um iframe carregado de um recurso correspondente à lista de filtros será considerado um anúncio, mesmo que outros conteúdos que não sejam anúncios também sejam carregados desse frame. Por exemplo, um player de vídeo carregado em um iframe marcado como anúncio também pode carregar conteúdo que não é de publicidade.

Como verificar a detecção de anúncios?

Como desenvolvedor, você pode verificar visualmente se o Chrome detectou seu conteúdo como um anúncio usando o Chrome DevTools.

  • Destacar frames de anúncios:no painel "Renderização", selecione Destacar frames de anúncios. Isso vai colorir de vermelho na tela os frames de anúncios detectados.
  • Anotação de elemento:no painel "Elementos", os iframes de anúncios detectados vão mostrar uma anotação ao lado da tag de abertura <iframe>.
  • Atividade de rede:no painel "Rede", filtre as solicitações com base em um booleano Is ad-related.
  • Status do anúncio:no painel de aplicativos, na seção Frames, os frames marcados com anúncios incluem um atributo Ad Status.

Como diagnosticar a causa de uma intervenção?

O Chrome oferece ferramentas para auditar e melhorar a qualidade e o desempenho das páginas da Web. Execute o Lighthouse no Chrome DevTools para receber relatórios sobre o desempenho da sua página. Você também pode consultar a coleção web.dev/fast e saber mais sobre as Métricas da Web.

Uso da rede

Abra o painel Rede no Chrome DevTools para conferir a atividade geral de rede do anúncio. Marque a opção Desativar cache para ter resultados consistentes em carregamentos repetidos.

O painel &quot;Rede&quot; no Chrome DevTools mostrando a atividade de rede gravada com a opção &quot;Desativar cache&quot; ativada.
Painel de rede no DevTools.

O valor transferido na parte de baixo da página mostra o valor transferido para toda a página. Para restringir as solicitações apenas às relacionadas ao anúncio, use a entrada Filtro na parte de cima.

Se você encontrar a solicitação inicial do anúncio, por exemplo, a origem do iframe, use a guia "Iniciador" na solicitação para ver todas as solicitações que ela aciona.

A guia &quot;Iniciador&quot; no DevTools mostrando a sequência de solicitações de recursos acionadas por um frame de anúncio específico.
Guia "Iniciador" de uma solicitação.

Ordenar a lista geral de solicitações por tamanho é uma boa maneira de identificar recursos muito grandes. Os culpados comuns incluem imagens e vídeos que não foram otimizados.

A lista do painel &quot;Rede&quot; das Ferramentas para desenvolvedores classificada por tamanho da resposta para identificar arquivos de mídia grandes e não otimizados.
Ordene as solicitações por tamanho da resposta.

Além disso, classificar por nome pode ser uma boa maneira de identificar solicitações repetidas. Pode não ser um único recurso grande que aciona a intervenção, mas um grande número de solicitações repetidas que excedem o limite de forma incremental.

Uso da CPU

O painel Performance nas DevTools ajuda a diagnosticar problemas de uso da CPU. Abra o menu de configurações de captura. Use o menu suspenso CPU para reduzir a velocidade da CPU o máximo possível. As intervenções para CPU têm muito mais probabilidade de serem acionadas em dispositivos de baixa potência do que em máquinas de desenvolvimento sofisticadas.

Configurações de captura do painel de performance no DevTools com o menu suspenso de limitação da CPU selecionado para simular hardware de menor potência com uma redução de velocidade de 6 vezes.
Ative a otimização de rede e CPU no painel "Performance".

Em seguida, clique no botão Gravar para começar a gravar a atividade. É recomendável testar quando e por quanto tempo você grava, já que um rastreamento longo pode levar um tempo considerável para carregar. Depois que a gravação for carregada, use a linha do tempo na parte de cima para selecionar uma parte dela. Foque nas áreas do gráfico em amarelo, roxo ou verde sólido que representam script, renderização e pintura.

Resumo do rastreamento de desempenho no DevTools, com um gráfico de pizza mostrando o tempo gasto em diferentes atividades, como carregamento, programação de scripts, renderização e pintura.
Resumo de um rastreamento no painel "Performance".

Confira as guias De baixo para cima, Árvore de chamadas e Registro de eventos na parte de baixo. Ordenar essas colunas por Tempo próprio e Tempo total pode ajudar a identificar gargalos no código.

A guia &quot;De baixo para cima&quot; no painel &quot;Desempenho&quot; classificada por &quot;Tempo próprio&quot; para identificar gargalos específicos.
Ordene por tempo próprio na guia "De baixo para cima".

O arquivo de origem associado também está vinculado ali. Assim, você pode acompanhar até o painel Fontes para examinar o custo de cada linha.

Tempo de execução mostrado no painel &quot;Origens&quot;.
Tempo de execução mostrado no painel "Origens".

Problemas comuns a serem procurados aqui são animações mal otimizadas que estão acionando layout e renderização contínuos ou operações caras que estão ocultas em uma biblioteca incluída.

Como denunciar intervenções incorretas?

Se o conteúdo não publicitário tiver sido marcado como tal, mude o código para evitar a correspondência com as regras de filtragem ou entre em contato diretamente com os mantenedores da EasyList para mudar as regras de filtragem. A intervenção contra anúncios pesados não afeta frames com gestos do usuário. Portanto, é possível excluir vídeos exigindo que o usuário clique em um botão de reprodução antes de carregar o conteúdo. Se a EasyList não corresponder ao seu conteúdo e o Chrome tiver classificado incorretamente o conteúdo como relacionado a anúncios, abra um problema com o Chrome usando este modelo. Ao levantar um problema, inclua um exemplo capturado do relatório de intervenção e um URL de amostra para reproduzir o problema.