Total Blocking Time (TBT)

Total Blocking Time (TBT) is a lab metric that adds up how long the browser’s main thread is blocked by long tasks while a page loads, making it unable to respond to clicks, taps or key presses. Lower is better, and it is one of the main signals of JavaScript bloat.

How TBT is calculated

Browsers do most of their work on a single main thread. Any task that runs for longer than 50 milliseconds is called a long task, because during it the page cannot react to the user. TBT takes each long task between First Contentful Paint and the point the page becomes reliably interactive, and counts only the part above 50 milliseconds. A 120 millisecond task adds 70 milliseconds of blocking time. The total of these extra slices is the TBT.

What is a good TBT?

TBT is one of the lab measures that help explain Core Web Vitals results. Lighthouse treats a TBT of 200 milliseconds or less on mobile as good. TBT carries a large share of the overall Lighthouse performance score, so a heavy script can pull that score down sharply even when the page looks quick to load.

TBT and Interaction to Next Paint

TBT is measured in lab tools such as Lighthouse and PageSpeed Insights, not from real users.

The related field metric is Interaction to Next Paint (INP), which became a Core Web Vital in March 2024. Because INP needs real interactions, lab tests cannot measure it directly. TBT is the best lab stand-in: if it is high, real users are likely to experience slow responses too. TBT itself is not a ranking signal, but INP is part of Google’s page experience signals.

Common causes of high TBT

  • Large JavaScript bundles that must be parsed and run on load.
  • Third-party scripts: tag managers, chat widgets, ad code, heatmaps and social embeds.
  • Heavy frameworks hydrating the whole page at once on client-side rendered sites.
  • Unused code shipped to every page, such as plugin scripts loaded site-wide.
  • Complex layout work triggered by scripts that repeatedly change the page.

How to reduce TBT

  1. Run Lighthouse and open the diagnostics for long main-thread tasks and JavaScript execution time to find the worst scripts.
  2. Remove or delay third-party scripts that are not essential, loading them after user interaction where possible.
  3. Split large bundles so each page only loads the code it needs.
  4. Break long tasks into smaller chunks so the browser can respond between them.
  5. Defer non-critical JavaScript and apply minification to reduce download and parse time.
  6. Test on a throttled mobile profile, because fast desktop machines hide the problem.

A note on testing

TBT varies between runs because it depends on the device and network simulation. Run several tests and look at the median rather than reacting to a single number.

Key Takeaways

  • TBT adds up the time long tasks block the main thread during page load.
  • Only the part of each task above 50 milliseconds counts.
  • Lighthouse treats 200 milliseconds or less on mobile as good.
  • TBT is a lab proxy for Interaction to Next Paint, which is a Core Web Vital.
  • Trimming third-party and unused JavaScript is the most effective fix.

Related Terms

Not sure how your own site measures up? Request a free SEO review, or keep learning in the SEO Encyclopedia.