Tempo Total de Bloqueio (TBT)

O que o TBT mede, a matemática de tarefas longas de 50ms, por que ele é o proxy de laboratório para o INP (não um Core Web Vital), e como corrigir uma pontuação vermelha — do ponto de vista de um SEO técnico.

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

O Tempo Total de Bloqueio (TBT) é a soma da parte de bloqueio — o tempo acima de 50 ms — de cada tarefa longa entre a Primeira Pintura com Conteúdo e o Tempo para Interatividade. É uma métrica apenas de laboratório, o maior peso individual (30%) na pontuação de Performance do Lighthouse, e o proxy de laboratório para o Core Web Vital INP (antes era proxy do FID). NÃO é um Core Web Vital e nunca aparece no Search Console ou no CrUX. Limiares do Lighthouse para mobile: bom ≤200 ms, ruim >600 ms. Você corrige da mesma forma que corrige o INP — divida tarefas longas de JS, faça code-splitting, adie ou remova JS não utilizado e reduza o custo de scripts de terceiros. Minha opinião honesta: faça isso pelos usuários e conversões, não por um aumento de ranqueamento.

TL;DR — TBT é a quantidade total de tempo, entre a Primeira Pintura com Conteúdo e o Tempo para Interatividade, em que a thread principal ficou bloqueada por tempo suficiente para impedir a responsividade à entrada. Ele soma a porção de bloqueio (duração − 50 ms) de cada tarefa longa (qualquer tarefa da thread principal acima de 50 ms). É uma métrica de laboratório — o maior peso individual (30%) na pontuação do Lighthouse 10 e o proxy de laboratório para INP — mas não é um Core Web Vital e nunca aparece no CrUX ou no Search Console. Limites para celular: bom ≤200 ms, ruim >600 ms. Corrija como você corrigiria o INP: divida tarefas JS longas, faça code-splitting, adie/remova JS não utilizado, domine scripts de terceiros. Minha opinião honesta: corrija para os usuários, não para um aumento de ranqueamento.

Evidence for this claim Lighthouse classifies mobile TBT at 200 milliseconds or less as good and above 600 milliseconds as poor. Scope: Lighthouse mobile TBT scoring guidance; desktop scoring differs. Confidence: high · Verified: Chrome Developers: Total Blocking Time

O que o TBT realmente mede

A definição do Google é o lugar para começar. TBT é “a quantidade total de tempo após a Primeira Pintura com Conteúdo (FCP) em que a thread principal ficou bloqueada por tempo suficiente para impedir a responsividade à entrada.” A thread principal do navegador processa uma tarefa por vez; enquanto está ocupada com um longo bloco de trabalho, ela não consegue reagir a um clique, um toque ou um pressionamento de tecla. O TBT quantifica quanto da sua janela de carregamento de página é gasta nesse estado bloqueado.

Duas definições fazem todo o trabalho aqui:

  • Uma tarefa longa é “uma tarefa que executa na thread principal por mais de 50 milissegundos.”
  • A porção de bloqueio de uma tarefa é sua duração menos 50 ms. Tarefas com 50 ms ou menos contribuem exatamente 0 ms.

O TBT é a soma dessas porções de bloqueio entre o FCP e o Time to Interactive (TTI). Então, o First Contentful Paint é a linha de partida: nada antes da primeira pintura conta, porque ainda não há nada na tela com o qual interagir.

Evidence for this claim TBT sums the portion above 50 milliseconds of long main-thread tasks between FCP and Time to Interactive. Scope: Lighthouse lab metric definition; not a field Core Web Vital. Confidence: high · Verified: Chrome Developers: Total Blocking Time

O exemplo prático

A própria tabela do Google é a ilustração mais clara. Imagine cinco tarefas executadas na thread principal entre o FCP e o TTI:

Duração da tarefaTempo de bloqueio (duração − 50 ms)
Tarefa um: 250 ms200 ms
Tarefa dois: 90 ms40 ms
Tarefa três: 35 ms0 ms
Tarefa quatro: 30 ms0 ms
Tarefa cinco: 155 ms105 ms
Total Blocking Time345 ms

As tarefas três e quatro estão abaixo da linha de 50 ms, então não contribuem em nada. A tarefa um bloqueia por 250 − 50 = 200 ms, a tarefa cinco por 155 − 50 = 105 ms. Some as porções de bloqueio — 200 + 40 + 0 + 0 + 105 — e você obtém 345 ms de TBT. Isso é uma pontuação de “precisa de melhorias”, impulsionada quase inteiramente por duas tarefas pesadas.

Esta é a parte contraintuitiva que vale a pena internalizar: “Um pequeno número de tarefas na thread principal não significa necessariamente baixo tempo de bloqueio. Por outro lado, um grande número de tarefas não leva necessariamente a muito tempo de bloqueio.” (Essa formulação é da NitroPack, reproduzida aqui — reverificada contra a fonte ao vivo em 2026-07-18.) O que importa é se tarefas individuais cruzam os 50 ms, não quantas tarefas existem.

A janela de medição: FCP a TTI

A janela termina no Time to Interactive“o tempo desde quando a página começa a carregar até quando seus principais sub-recursos foram carregados e ela é capaz de responder de forma confiável e rápida à entrada do usuário.” No Lighthouse, o TTI é encontrado procurando adiante por uma “janela silenciosa” de cinco segundos sem tarefas longas e com no máximo duas requisições de rede em andamento.

Vale notar: o próprio TTI foi removido do Lighthouse 10 porque se mostrou excessivamente sensível a requisições de rede atípicas e tarefas longas, produzindo alta variabilidade. O TBT sobreviveu e se tornou a métrica principal de interatividade. Como Philip Walton disse, “Métricas novas e alternativas, como Largest Contentful Paint (LCP), Total Blocking Time (TBT) e Interaction to Next Paint (INP), geralmente são métricas melhores para usar no lugar do TTI.” O TBT não substituiu o TTI como ponto final da janela — é um número único melhor para o mesmo problema subjacente. E o desaparecimento do TTI da interface do relatório do Lighthouse não é a mesma afirmação de que o TTI não delimita mais a janela de navegação padrão do Lighthouse — a janela em si ainda é medida dessa forma nos bastidores.

Evidence for this claim TTI being removed as a displayed Lighthouse metric does not by itself mean TTI stopped bounding the default Lighthouse navigation TBT window. Scope: lab recommended Confidence: high · Verified: Total Blocking Time (TBT)

Mais uma nota de escopo: “FCP a TTI” descreve especificamente a auditoria de navegação padrão do Lighthouse. Outras ferramentas, ou o próprio Lighthouse executando um trace de período em vez de uma navegação completa de carregamento de página, podem totalizar uma janela de medição diferente — a matemática de tarefa longa de 50 ms não muda, mas os pontos de início e fim do que é somado são específicos da ferramenta e do modo de trace, não uma lei universal da métrica.

Evidence for this claim TBT begins after FCP, but the endpoint is tool and trace-mode specific: page-load tools commonly use TTI, Lighthouse navigation audits default to stopping at TTI, and other tools or timespan traces may total a different measured window. Scope: navigation audits Confidence: high · Verified: Total Blocking Time

O TBT é um Core Web Vital? Não.

Este é o equívoco mais comum, então vamos ser diretos. Os três Core Web Vitals são LCP, INP e CLS. O TBT não é um deles. As próprias palavras do Google: “Total Blocking Time (TBT) is a lab metrics is vital in catching and diagnosing potential interactivity issues that can impact INP. However, it is not part of the Core Web Vitals set because they are not field-measurable, nor do they reflect a user-centric outcome.” (tradução) «O Total Blocking Time (TBT) é uma métrica de laboratório vital para capturar e diagnosticar possíveis problemas de interatividade que podem impactar o INP. No entanto, ele não faz parte do conjunto de Core Web Vitals porque não são mensuráveis em campo, nem refletem um resultado centrado no usuário.» (A gramática nessa frase é deles, não minha.)

Então, onde o TBT aparece e onde não aparece?

  • Onde você vê: Lighthouse, PageSpeed Insights na aba de laboratório e no Chrome DevTools — todos ambientes simulados/de laboratório.
  • Onde você não vê: no relatório Core Web Vitals do Google Search Console, no CrUX ou em qualquer dado de campo. Esses só trazem LCP, INP e CLS.

Se alguém disser que está “observando o TBT no Search Console”, está enganado — o GSC relata dados de campo, e o TBT não é uma métrica de campo.

Uma correção que vale a pena ser precisa: o TBT ser recomendado para laboratório não é o mesmo que o TBT ser impossível no campo. Você pode tecnicamente calcular um total no estilo TBT no campo com a Long Tasks API — o Google diz isso diretamente: “It is possible to measure TBT in the field, but we don’t recommend this as user interaction can affect your page’s TBT in ways that lead to lots of variance in your reports.” (tradução) «É possível medir o TBT no campo, mas não recomendamos isso, pois a interação do usuário pode afetar o TBT da sua página de maneiras que geram muita variação nos seus relatórios.» Isso é uma recomendação contra, não uma barreira técnica. O que é verdade sem exceção é mais restrito: o CrUX e o relatório Core Web Vitals do Search Console nunca trazem TBT, ponto final — esses pipelines só coletam LCP, INP e CLS.

TBT é o proxy de laboratório para INP

Veja por que o TBT existe. As ferramentas de laboratório carregam uma página em um ambiente simulado, sem usuário real, então elas não podem medir o Interaction to Next Paint — o INP precisa de cliques e toques reais. O TBT preenche essa lacuna: “the Total Blocking Time (TBT) metric is lab-measurable and is a proxy for INP.” (tradução) «A métrica Total Blocking Time (TBT) é mensurável em laboratório e é um proxy para o INP.»

Os dois estão mecanicamente relacionados: “Although INP and TBT are calculated differently, they are both reflections of a blocked main thread during the bootstrap process. When the main thread is blocked, the browser is delayed in responding to user interactions.” (tradução) «Embora o INP e o TBT sejam calculados de forma diferente, ambos são reflexos de uma thread principal bloqueada durante o processo de inicialização. Quando a thread principal está bloqueada, o navegador atrasa a resposta às interações do usuário.» E, empiricamente, “A low TBT often correlates with a low Interaction to Next Paint (INP).” (tradução) «Um TBT baixo frequentemente se correlaciona com um Interaction to Next Paint (INP) baixo.»

Mas “proxy” não é “substituto”. O Google é explícito: “Total Blocking Time (TBT) may be a reasonable proxy metric for INP, but it’s not a substitute for INP in and of itself.” (tradução) «O Total Blocking Time (TBT) pode ser uma métrica proxy razoável para o INP, mas não é um substituto para o INP por si só.» Eles divergem de maneiras reais:

  • TBT alto, INP bom. O TBT mede o bloqueio durante o carregamento. Se seus usuários não tentam interagir de fato durante essa janela bloqueada — eles esperam a página parecer pronta primeiro — o INP deles pode ser bom mesmo com um TBT feio.
  • TBT bom, INP ruim. O INP também cobre handlers de eventos lentos e trabalho de renderização que disparam após o carregamento, além de coisas como o atraso de toque de 300 ms do navegador em páginas não otimizadas para mobile — nada disso o TBT vê.

Quando o laboratório e o campo discordam, confie no campo. O INP (o número do usuário real) tem prioridade sobre o TBT (a estimativa de laboratório).

Uma nota histórica que confunde as pessoas: o TBT costumava ser o proxy de laboratório para o First Input Delay (FID). O INP substituiu o FID como Core Web Vital em 12 de março de 2024, então o TBT agora é o proxy do INP. O mecanismo subjacente nunca mudou — sempre foi sobre uma thread principal bloqueada durante o carregamento — mas qualquer artigo mais antigo que chame o TBT de “proxy do FID” é anterior a essa mudança.

Por que o TBT domina a pontuação do Lighthouse

O TBT carrega o maior peso individual na pontuação de Performance do Lighthouse — 30%, um peso introduzido no Lighthouse 10 e, verificado ao vivo contra os docs de pontuação do Chrome em 18/07/2026, ainda inalterado até o atual Lighthouse 13:

MétricaPeso
First Contentful Paint10%
Speed Index10%
Largest Contentful Paint25%
Total Blocking Time30%
Cumulative Layout Shift25%

Trate essa tabela como específica de versão e data, não como uma constante permanente — o Lighthouse já mudou seus pesos antes e pode mudar de novo. Verifique novamente contra a pontuação de performance do Lighthouse antes de citá-la em um deck de auditoria.

Esta é a razão prática pela qual o TBT importa para auditorias de SEO, mesmo não sendo um sinal de ranqueamento: um TBT ruim tem um efeito desproporcional naquele grande número do Lighthouse que todo mundo captura de tela. O exemplo prático de Addy Osmani torna isso concreto — remover um polyfill de Intersection Observer reduziu o TBT de 400 ms para 300 ms e elevou a pontuação de Performance do Lighthouse de 63 para 70. Uma correção, sete pontos, por causa do peso de 30%.

Mais uma nuance: o limite de categoria “Bom ≤200 ms” e a pontuação do Lighthouse são escalas diferentes. Para pontuar 90+ no subscore de TBT, você precisa de aproximadamente ≤300 ms em mobile, e para atingir 100, precisa de ≤100 ms. (Esses valores de subscore são a documentação da curva de pontuação do DebugBear, reverificada na fonte ao vivo em 2026-07-18.) “Bom” e “100” não são a mesma métrica.

O TBT afeta o ranqueamento no SEO?

Não diretamente — e serei mais direto sobre isso do que a maioria.

O TBT não é um sinal de ranqueamento. O input de ranqueamento de interatividade do Google é o INP, uma métrica de campo. O TBT é um diagnóstico que ajuda você a encontrar e corrigir as tarefas longas que prejudicam o INP. Melhorar o TBT pode melhorar o INP, o que talvez ajude marginalmente o lado de Page Experience no ranqueamento — mas isso está a dois elos de “pode” de distância das suas posições.

E aqui está minha posição real sobre toda a questão dos Core Web Vitals, que já escrevi antes no meu guia de velocidade de página: não acho que os Core Web Vitals tenham muito impacto no SEO e, a menos que você seja extremamente lento, geralmente não os priorizo. Faça isso pelos usuários e pelas conversões, não por um aumento no ranqueamento. Isso se aplica em dobro ao TBT, que é um proxy de laboratório para uma métrica de campo para um pequeno input de ranqueamento. Corrija porque uma página congelada faz você perder clientes — não porque está perseguindo uma posição.

O que causa TBT alto

Quase sempre é JavaScript:

  • Carregamento, análise ou execução de JavaScript desnecessários — nas próprias palavras da auditoria do Lighthouse. Enviar um bundle grande que a página não precisa no carregamento é a causa clássica.
  • Declarações de JavaScript ineficientes — trabalho síncrono pesado que monopoliza a thread principal.
  • Scripts de terceiros — gerenciadores de tags, widgets de chat, analytics, scripts de anúncios. Frequentemente o maior contribuinte individual, e o que você menos controla.
  • Bootstrap pesado de framework — a hidratação do React e similares podem executar tarefas longas durante a inicialização.
  • Recálculo de estilo/layout e coleta de lixo — layout síncrono forçado, recálculos grandes de estilo e pausas de GC aparecem como tarefas da thread principal também; não presuma que toda tarefa longa no trace seja execução de JavaScript.

Também não presuma que o tamanho de transferência do bundle é a história completa. A atribuição de trace tem lacunas reais: frames de origem cruzada e threads de worker têm limites de privacidade e segurança sobre o que um observador de tarefas longas pode relatar sobre eles (veja Solução de problemas), então uma tarefa não atribuída no seu trace não é prova de que nenhum terceiro está envolvido — pode apenas significar que a API de atribuição não tem permissão para informar você.

Como corrigir TBT alto

As correções são da mesma família das correções de INP — ambas se resumem a uma thread principal bloqueada.

  1. Encontre as tarefas longas. Abra o painel Performance do Chrome DevTools e procure por tarefas acima de 50 ms (elas são marcadas com cantos vermelhos), ou execute a auditoria “Avoid long main-thread tasks” do Lighthouse.
  2. Audite scripts de terceiros primeiro. Eles geralmente são as vitórias mais fáceis. Use as abas Coverage e Network do DevTools para ver o custo de cada script e carregue com lazy-load embeds pesados (YouTube, mapas, chat) atrás de uma fachada.
  3. Divida as tarefas longas. Ceda à thread principal para que o navegador possa lidar com entrada entre os blocos — “quando as tarefas são divididas, o navegador pode responder a trabalho de maior prioridade muito mais cedo—incluindo interações do usuário.” A API moderna é scheduler.yield(), com um fallback de setTimeout(resolve, 0) (veja a aba Cheat Sheets para o padrão). Observe que o Google não recomenda mais isInputPending() — ceda independentemente de haver entrada pendente.
  4. Reduza o JavaScript. Faça code-split de bundles grandes para que menos seja analisado e avaliado no carregamento, remova JS não utilizado (a aba Coverage do DevTools mostra o que), e use defer em scripts não críticos.
  5. Mova computação pesada para fora da thread principal. Web Workers executam trabalho intensivo de CPU em uma thread separada, deixando a thread principal livre para responder.

Um efeito colateral útil: tarefas longas que bloqueiam a thread principal também podem atrasar Largest Contentful Paint rendering, então corrigir o TBT às vezes também melhora o LCP — especialmente quando há JS que bloqueia a renderização envolvido.

Onde ir a seguir

O TBT vive na família Core Web Vitals junto com seu equivalente de campo Interaction to Next Paint, as métricas de carregamento Largest Contentful Paint e First Contentful Paint, e as ferramentas de laboratório Lighthouse, PageSpeed Insights e Speed Index que as reportam. Se você lembrar apenas de uma coisa: o TBT é a luz de aviso de laboratório para a responsividade de campo — persiga as tarefas longas, não o número.

Add an expert note

Pin an expert quote

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