Interaction to Next Paint (INP) para SEO

O que o INP mede, o limite de ≤200 ms no p75, por que ele substituiu o FID em 2024 e como corrigir de fato uma pontuação ruim — na visão de um SEO técnico.

Publicado pela primeira vez: 26 de jun. de 2026 · Última atualização: 3 de ago. de 2026 · Avançado
Idiomas

Interaction to Next Paint (INP) é o Core Web Vital para responsividade. Ele observa cada clique, toque e interação de teclado durante uma visita e reporta a latência que (quase) todas elas ficaram abaixo — medida no 75º percentil no campo. Bom é ≤200 ms, ruim é >500 ms. O INP substituiu o First Input Delay em 12 de março de 2024, porque o FID só cronometrava o atraso de entrada da primeira interação; o INP mede a latência total (atraso de entrada + processamento + apresentação) de todas elas. Você corrige dividindo tarefas longas, cedendo à thread principal, fazendo menos em manipuladores de eventos, reduzindo o DOM e domando scripts de terceiros. É uma métrica de campo — o Total Blocking Time é seu proxy de laboratório.

TL;DR — O INP é a Core Web Vital para responsividade. Ele observa a latência de todas as interações de clique, toque e teclado durante uma visita e relata o valor no 75º percentil (um outlier descartado a cada 50 interações) — não apenas a primeira entrada como a FID fazia. A latência de uma interação = atraso de entrada + duração do processamento + atraso de apresentação. Bom ≤ 200 ms, ruim > 500 ms, avaliado com dados de campo no p75. Ele substituiu a FID em 12 de março de 2024 (FID totalmente removida das ferramentas em setembro de 2024). Corrija-o dividindo tarefas longas, cedendo à thread principal com scheduler.yield(), fazendo menos nos manipuladores de eventos, reduzindo o DOM e adiando scripts de terceiros. É uma métrica de campo — Total Blocking Time é o proxy de laboratório, e os dois nem sempre concordam.

O que o INP mede — e como difere da FID

A definição do Google é precisa: INP “avalia a responsividade geral de uma página às interações do usuário, observando a latência de todos os cliques, toques e interações de teclado que ocorrem ao longo da vida útil da visita de um usuário a uma página.”

Evidence for this claim INP observes click, tap, and keyboard interaction latency throughout a page visit rather than measuring only the first input delay. Scope: Current web.dev INP definition and qualifying interaction types. Confidence: high · Verified: web.dev: Interaction to Next Paint

Essa frase “todas as interações… ao longo da vida útil” é a história completa. INP é uma métrica de nível de visita, não de tempo de carregamento — e o raciocínio do Google é que a grande maioria do tempo do usuário em uma página acontece depois que ela carrega, então a responsividade durante o uso importa mais do que a primeira impressão sozinha.

O contraste com o First Input Delay é a maneira mais clara de entender isso: “O FID media apenas o atraso de entrada da primeira interação em uma página. O INP melhora o FID observando todas as interações em uma página, desde o atraso de entrada até o tempo necessário para executar os manipuladores de eventos.” O FID cronometrava uma coisa sobre uma interação — a espera antes do início do manipulador — e ignorava tanto o tempo de execução do manipulador quanto o tempo que a tela levava para atualizar. O INP mede a latência total de cada interação.

Uma nuance que vale a pena acertar, porque é um mito comum: o INP não é literalmente a pior interação. Para evitar punir uma página por um único pico aleatório, o navegador descarta um outlier para cada 50 interações e, em seguida, relata o valor no 75º percentil das visualizações de página. Em uma visita com poucas interações, isso recai na interação mais lenta; em uma visita intensa, alguns outliers são excluídos primeiro.

O que conta como interação também é mais restrito do que as pessoas assumem. Apenas cliques, toques e pressionamentos de teclado são medidos. Rolagem, passar o mouse e zoom são explicitamente excluídos. E um único gesto pode disparar vários eventos — um toque produz pointerdown, pointerup e click — que o INP agrupa como uma interação, não três. Dentro desse grupo, o INP considera a duração mais longa de evento individual, não a soma de todos eles — então um pointerdown rápido ao lado de um click lento ainda é relatado como uma interação dimensionada pelo evento lento. Se uma página não tiver interações qualificadas durante uma visita, o INP simplesmente não é relatado para ela.

As três partes da latência de uma interação

A latência de cada interação se divide em três partes sequenciais. Este é o modelo para manter em mente, porque cada parte aponta para uma correção diferente:

Latência da interação = Atraso de entrada + Duração do processamento + Atraso de apresentação

  1. Atraso de entrada — o tempo antes que seus manipuladores de eventos possam até começar a executar, geralmente porque a thread principal está ocupada terminando uma tarefa longa.
  2. Duração do processamento — o tempo que leva para todos os seus callbacks de manipuladores de eventos executarem.
  3. Atraso de apresentação — o tempo desde quando seus manipuladores terminam até o navegador pintar o próximo frame na tela.

A compilação de atribuição do web-vitals expõe todos os três (inputDelay, processingDuration, presentationDelay) para que você possa ver qual parte domina em uma interação real. De acordo com os dados do Web Almanac de 2024, o atraso de apresentação é frequentemente a maior parte individual na mediana — mas a duração do processamento é onde a alavancagem de otimização geralmente reside, porque é a parte que aumenta em páginas mal construídas.

INP measures the whole interaction. Attribute the delay to the waiting, handler, or presentation phase before choosing a fix. Fonte: web.dev

The interaction begins with input delay while the event waits for the main thread. Processing duration follows while the event-handler callbacks execute. Presentation delay runs from the end of the handlers until the browser lays out and paints the next frame. Together these three sequential phases make up the interaction latency measured by INP.

© Patrick Stox LLC · CC BY 4.0 ·

Os limites — e a ressalva do campo p75

ClassificaçãoValor de INPMedido em
Bom≤ 200 ms75º percentil, campo
Precisa de melhorias> 200 ms e ≤ 500 ms75º percentil, campo
Ruim> 500 ms75º percentil, campo

O Google Search Central afirma o alvo claramente — “um INP de menos de 200 milissegundos” — e enquadra todo o programa como: “Recomendamos fortemente que os proprietários de sites alcancem bons Core Web Vitals para o sucesso na Pesquisa.” O orçamento de 200 ms é genuinamente apertado quando você lembra que o navegador quer um frame a cada ~16,7 ms a 60 fps; todo o trabalho do seu manipulador mais a renderização tem que caber.

Evidence for this claim INP is good at 200 milliseconds or less and poor above 500 milliseconds, assessed at the 75th percentile. Scope: Current web.dev INP thresholds for field measurement. Confidence: high · Verified: web.dev: Interaction to Next Paint

Por que o INP é uma métrica de campo (e os dados de laboratório não são suficientes)

Esta é a armadilha que pega muitos profissionais de SEO: uma pontuação verde no Lighthouse não significa um bom INP. Mas “o Lighthouse não consegue medir o INP” precisa de três casos separados, não um, ou você vai interpretar mal sua própria ferramenta:

  1. Uma execução padrão e não interativa do Lighthouse não relata INP algum. Ela apenas observa o carregamento da página — nunca clica, toca ou digita nada — então não há interação para cronometrar. O Lighthouse usa como fallback o Tempo Total de Bloqueio (TBT) como proxy do tempo de carregamento. O próprio enquadramento do Google: “Because TBT correlates well with INP, a page with a high TBT is a reasonable indicator that there may be high INP values during load.” (tradução) «Como o TBT se correlaciona bem com o INP, uma página com TBT alto é um indicador razoável de que pode haver valores altos de INP durante o carregamento.» As palavras-chave são “during load.” (tradução) «durante o carregamento.» O TBT não diz nada sobre uma interação que dá errado dez segundos depois, quando um widget carregado de forma preguiçosa é executado — é um proxy, nunca um substituto ou uma fórmula de conversão.
  2. Uma interação exercitada manualmente ou sinteticamente — clicar em um botão real no DevTools, ou scriptar um clique em uma ferramenta de laboratório — produz um número real de latência no estilo INP para aquela interação específica. Isso é útil para reproduzir um bug específico. Mas ainda é um único caminho scriptado em um único dispositivo: não pode representar a mistura de dispositivos reais, usuários reais, alvos de interação reais e a vida útil completa de uma visita no campo. Como o Google coloca, o valor resultante “will be dependent on what interactions are performed during the measurement period,” (tradução) «dependerá de quais interações são realizadas durante o período de medição», e o comportamento real do usuário é variável demais para uma única execução de laboratório representá-lo.
  3. A distribuição de campo é a única coisa que o INP realmente é. É por isso que a fonte autoritativa são os dados de campo: o Chrome User Experience Report (CrUX), apresentado por meio do PageSpeed Insights e do relatório Core Web Vitals do Search Console. “Field data is the best source of information you can draw on when it comes to understanding which interactions are problematic for actual users.” (tradução) «Os dados de campo são a melhor fonte de informação que você pode usar para entender quais interações são problemáticas para usuários reais.»

Use o laboratório (casos 1 e 2) para encontrar e reproduzir uma interação lenta; use o campo (caso 3) para confirmar se ela está realmente prejudicando as pontuações dos visitantes reais.

Por que sua pontuação de INP é ruim

Quase todo problema de INP remonta ao thread principal estar bloqueado quando um usuário interage. Os suspeitos usuais:

  • Tarefas longas. Qualquer tarefa no thread principal acima de 50 ms é uma tarefa longa; a quantidade acima de 50 ms é seu “período de bloqueio”. Enquanto uma está em execução, sua interação não pode ser tratada. Esta é a maior causa isolada.
  • Manipuladores de eventos pesados. Fazer demais de forma síncrona dentro de um manipulador de clique/entrada infla diretamente a duração do processamento.
  • Tamanho grande do DOM. DOMs maiores custam mais para renderizar, o que infla tanto o atraso de entrada quanto o de apresentação.
  • Scripts de terceiros. De acordo com o Web Almanac, provedores de consentimento, gerenciadores de tags, análises e widgets de chat são os principais infratores — e eles afetam até sites de conteúdo simples. Eles são o primeiro lugar onde eu olho em uma página que não construí.
  • JavaScript pós-carregamento. Só porque uma página renderizou não significa que terminou de carregar — scripts que são avaliados após a primeira pintura podem bloquear interações iniciais.

Como corrigir

As estratégias, aproximadamente em ordem de impacto:

1. Divida tarefas longas. O conselho central do Google sobre manipuladores é “do as little work as possible in them.” (tradução) «faça o mínimo de trabalho possível neles.» Divida um trabalho grande em tarefas menores para que o navegador possa intercalar uma interação do usuário. Quando as tarefas são divididas, “the browser can respond to higher-priority work much sooner — including user interactions.” (tradução) «o navegador pode responder a trabalhos de prioridade mais alta muito mais cedo — incluindo interações do usuário.»

2. Ceda a thread principal. A forma moderna e recomendada é scheduler.yield() (Chrome 129+, Firefox 142+): await scheduler.yield() pausa seu código, permite que o navegador lide com o trabalho pendente e retoma com prioridade — para que outras tarefas não furem a fila à frente da sua continuação. O fallback clássico é setTimeout(..., 0), que ainda funciona, mas envia seu código para o final da fila de tarefas (e os navegadores impõem um piso de 5 ms após várias chamadas aninhadas). Uma coisa para parar de fazer: isInputPending() — o Google agora diz “we no longer recommend using this API.” Veja a aba Scripts para o padrão.

3. Faça menos nos manipuladores de eventos — adie o trabalho não crítico. Execute apenas a atualização visual que o próximo frame precisa de forma síncrona; empurre todo o resto (salvar, verificação ortográfica, análises, contagens de palavras) para trás de requestAnimationFrame + setTimeout ou um yield. O usuário vê a resposta imediatamente; a contabilidade acontece depois.

4. Evite layout thrashing. Ler propriedades de layout logo após escrever estilos na mesma tarefa força o navegador a um layout síncrono que ele poderia ter agrupado. Agrupe leituras e depois escritas.

5. Reduza o tamanho do DOM. Árvores menores renderizam mais rápido. content-visibility pode renderizar lazy elementos fora da tela para que não custem durante o carregamento ou interação.

6. Audite e adie scripts de terceiros. Esta é a correção de SEO de maior alavancagem em sites reais. Carregue scripts de consentimento/tag/análises de forma lazy, condicione-os à interação ou mova-os para fora do caminho crítico. Uma página de conteúdo “leve” pode falhar no INP puramente por causa de um widget incorporado pesado.

O INP afeta o ranqueamento?

Sim — o INP é um dos três Core Web Vitals, e os Core Web Vitals fazem parte dos sinais de experiência de página do Google. Mas é um sinal leve: um desempate entre resultados comparavelmente relevantes, não um fator de ranqueamento primário. Não persiga uma pontuação INP perfeita às custas de conteúdo e relevância.

Dois pontos práticos de SEO. Primeiro, mobile é o número difícil. No Web Almanac de 2024, ~74% dos sites mobile passaram no INP versus ~97% no desktop — e como o Google indexa mobile-first, o número mobile é o que conta. Segundo, sites complexos vão pior: apenas ~53% dos 1 000 principais sites passaram, porque páginas ricas em recursos enviam mais JavaScript para bloquear a thread principal. O desenvolvimento pesado de recursos é um risco para o INP, e páginas de alta interação — páginas de produto, checkout, resultados de busca, formulários — estão muito mais expostas do que conteúdo estático.

INP vs FID — o quadro completo

FID (aposentado)INP (atual)
InteraçõesApenas a primeiraTodas, visita inteira
O que medeApenas atraso de entradaAtraso de entrada + processamento + apresentação
Limite bom≤ 100 ms≤ 200 ms
StatusRemovido das ferramentas em set. 2024Core Web Vital desde 12 de mar. de 2024

O FID se foi — removido do Search Console no dia em que o INP foi lançado e do CrUX BigQuery/API até setembro de 2024. Se uma ferramenta ou auditoria ainda referencia o FID, está desatualizada.

Casos extremos que fazem os dados do INP discordarem

Um punhado de peculiaridades do ciclo de vida explica a maioria das perguntas “por que meu RUM não corresponde ao CrUX”:

  • Sem interações, sem INP. Se uma visita nunca recebe um clique, toque ou pressionamento de tecla — ou recebe apenas gestos excluídos, como rolagem e passar o mouse — não há valor de INP para essa visualização de página. Isso é normal em páginas de conteúdo somente leitura e não é um bug no seu monitoramento.
  • Iframes contam para a métrica, mas seu próprio JavaScript não consegue ver dentro deles. Uma interação dentro de um iframe incorporado (um anúncio, um widget, um formulário incorporado) contribui para o INP da página. Mas um script RUM de primeira parte não consegue ler eventos de um iframe de origem cruzada da mesma forma que a métrica do próprio navegador consegue — então o CrUX e uma configuração RUM de mesma origem podem legitimamente discordar em páginas com incorporações de terceiros. Documente essa lacuna em vez de tratar uma discrepância entre RUM/campo como um bug.
  • Restaurações do cache de ida e volta redefinem o INP para zero. Uma página recuperada do bfcache (o botão voltar, por exemplo) inicia uma contagem de INP do zero — as interações anteriores à navegação de saída não são transferidas.
  • Abas de longa duração e em segundo plano ainda precisam reportar. Como uma aba pode ficar aberta por horas sem nunca ser formalmente descarregada — especialmente no celular, onde o sistema operacional pode simplesmente matá-la — o INP deve ser capturado quando a página fica oculta, não apenas no descarregamento. Configurações de RUM que só enviam dados no unload perderão silenciosamente dados dessas visitas.

Onde isso se encaixa

O INP é uma peça do quadro dos Core Web Vitals, junto com o Largest Contentful Paint (carregamento) e o Cumulative Layout Shift (estabilidade visual). Verifique-o no PageSpeed Insights e no relatório do Search Console (campo), e depure-o no Lighthouse / Chrome DevTools (laboratório, via proxy TBT). Os dados por trás de tudo isso vêm do CrUX.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.