What is Total Blocking Time (TBT)?
Total Blocking Time (TBT) is a Lighthouse lab metric that measures the total amount of time between First Contentful Paint (FCP) and Time to Interactive (TTI) during which the main thread was blocked long enough to prevent input responsiveness. The "blocking time" for a task is any duration in excess of 50ms — a task that runs for 200ms contributes 150ms of blocking time.
What TBT Measures
TBT quantifies how much JavaScript execution is competing with the browser's ability to respond to user input. Long tasks (over 50ms) on the main thread block the browser from handling clicks, keystrokes, or scrolls, making the page feel frozen. TBT is the lab proxy for INP (Interaction to Next Paint) — reducing TBT is the primary path to improving real-world interactivity.
What is a Good TBT Score?
What Causes Poor TBT Scores?
- ✗Large JavaScript bundles that execute synchronously on the main thread during page load
- ✗Third-party scripts (analytics, tag managers, ad networks, chat widgets) running long tasks
- ✗Inefficient JavaScript that does heavy computation synchronously rather than in a Web Worker
- ✗Excessive DOM size (over 1,500 nodes) forcing expensive style recalculation and layout
- ✗Unused JavaScript — loading full libraries when only small parts are needed
- ✗Unoptimised React/Vue hydration that processes large component trees synchronously
How to Fix TBT
- ✓Code-split large JavaScript bundles with dynamic import() so only the code needed for the current page loads
- ✓Defer non-critical third-party scripts using async, defer, or loading them after the interactive event
- ✓Move heavy computation to Web Workers to keep the main thread free
- ✓Remove unused JavaScript identified in the Lighthouse "Reduce unused JavaScript" audit
- ✓Reduce DOM size — aim for under 1,500 total DOM nodes
- ✓Use React.lazy() and Suspense to defer component hydration for off-screen sections
- ✓Audit and reduce tag manager payloads — Google Tag Manager is frequently the largest TBT contributor
Check Your TBT Score
Run a free audit at speedexporter.com to see your exact TBT score alongside a breakdown of the specific JavaScript files and third-party scripts causing the most blocking time.
Run a free Lighthouse audit →Frequently Asked Questions
What is a good TBT score?
Lighthouse considers TBT "good" at 200ms or under. Between 200ms and 600ms needs improvement. Above 600ms is poor. Aim for under 150ms to score in the green range.
What is the difference between TBT and TTI?
Time to Interactive (TTI) is the point at which the page becomes reliably interactive. Total Blocking Time measures how much time during the FCP-to-TTI window was blocked by long tasks. High TBT pushes TTI later.
Is TBT a Core Web Vital?
TBT is not a Core Web Vital, but it is a strong lab-based predictor of INP (Interaction to Next Paint), which is a Core Web Vital. Improving TBT will generally improve your real-world INP scores.
How does Google Tag Manager affect TBT?
GTM loads and executes all configured tags on page load. Each tag adds JavaScript that runs on the main thread. Sites with 10+ GTM tags often have TBT over 1,000ms from GTM alone. Audit your tags and defer non-critical ones using GTM trigger conditions.