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

Publicado em 22 de setembro de 2025, última atualização em 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 franquia de dados mensal. Às vezes, o culpado não é o conteúdo que eles vieram ver, mas um anúncio 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 sejam veiculados sem problemas.

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

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

Em vez do anúncio, o usuário verá uma caixa cinza com uma mensagem informando 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.
Exemplo de visualização 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 critérios a seguir, 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 contam para os limites da intervenção nesse anúncio.

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

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

  • Mídia não compactada:carregamento de imagens extremamente grandes e mal compactadas.
  • JavaScript pesado:execução de operações extensas, como decodificação de arquivos de vídeo usando JavaScript.
  • Cálculos pesados:execução de cálculos complexos em segundo plano.
  • Conteúdo de vídeo sem gestos:carregamento de 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. No lugar dele, o Chrome mostra uma caixa cinza com uma mensagem: Anúncio removido. Se o usuário clicar em Detalhes no contêiner, ele verá uma explicação específica.

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 frame do anúncio e os frames descendentes. No entanto, os publishers geralmente não tinham como saber que os anúncios nas próprias páginas estavam sendo removidos. Para resolver isso, o Chrome expandiu o mecanismo de relatórios. Os relatórios de intervenção agora são enviados para o frame de incorporação (o pai do frame do anúncio raiz), além do próprio frame do 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 de postagem 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 do frame filho:

...
"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 informações adicionais 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ório 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 sob o banner de anúncios pesados, considere as seguintes 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 os quais 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.
  • Otimizar imagens e vídeos:verifique se as imagens estão compactadas e os vídeos estão otimizados para a Web. Evite carregar arquivos de vídeo grandes automaticamente. Em vez disso, use marcadores leves até que o usuário interaja.
  • Auditar o uso da CPU:animações complexas ou operações JavaScript que acionam layout e pintura contínuos podem aumentar o uso da CPU. Use ferramentas para identificar gargalos no código que possam manter a linha de execução principal ocupada por longos períodos.
  • Monitorar frames descendentes:lembre-se de que a contagem de recursos inclui tudo dentro do iframe do 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 não publicitário: separe frames de conteúdo não publicitário em domínios diferentes ou padrões reconhecíveis que provavelmente não serão considerados domínios de anúncios pela política do provedor da lista de filtros.

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

Para solucionar problemas e resolver intervenções de anúncios pesados de maneira eficaz, primeiro é necessário entender como a lógica de detecção do Chrome identifica o conteúdo como um anúncio e, em seguida, usar as ferramentas de desenvolvedor integradas para auditar os acionadores 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 comparando as solicitações de recursos com 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 não publicitários também sejam carregados desse frame. Um exemplo disso é um player de vídeo carregado em um iframe marcado como um anúncio que também pode carregar conteúdo não publicitário.

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, que codifica por cores os frames de anúncios detectados em vermelho na tela.
  • Anotação de elementos:no painel "Elementos", os iframes de anúncios detectados vão mostrar uma anotação de anúncio ao lado da tag de abertura <iframe>.
  • Atividade de rede:no painel Network, filtre as solicitações com base em um booleano Is ad-related.
  • Status do anúncio:no painel "Aplicativo", na seção Frames , os frames marcados como anúncios vão incluir 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 conferir mais informações sobre as Core Web Vitals.

Uso da rede

Abra o painel Rede no Chrome DevTools para conferir a atividade geral da rede do anúncio. Marque a opção Desativar cache para receber resultados consistentes em cargas repetidas.

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

O valor transferido na parte de baixo da página vai mostrar a quantidade transferida 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 conferir 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.

Classificar 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 Network das DevTools é classificada por tamanho da resposta para identificar arquivos de mídia grandes e não otimizados.
Classificar solicitações por tamanho da resposta.

Além disso, a classificação 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 no DevTools ajuda a diagnosticar problemas de uso da CPU. Abra o menu "Configurações de captura". Use o menu suspenso CPU para desacelerar a 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 desempenho 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 iniciar a gravação da atividade. Talvez você queira testar quando e por quanto tempo gravar, já que um rastreamento longo pode levar muito tempo para carregar. Depois que a gravação for carregada, você poderá usar a linha do tempo na parte de cima para selecionar uma parte da gravação. Concentre-se 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. Classificar 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.
Classificar por "Tempo próprio" na guia "De baixo para cima".

O arquivo de origem associado também está vinculado a ele. Assim, você pode seguir 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 "Fontes".

Os problemas comuns a serem procurados aqui são animações mal otimizadas que acionam layout e pintura 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, considere mudar o código para evitar a correspondência com as regras de filtragem ou entre em contato diretamente com os responsáveis pela EasyList para mudar as regras de filtragem. Lembre-se de que a intervenção de anúncios pesados não afeta frames com gestos do usuário. Portanto, o vídeo pode ser excluído 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, você poderá levantar 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.