TBT Above Target, When JavaScript Holds the Page Hostage
TBT above target. That is the flag when a page’s Total Blocking Time passes 200 milliseconds, and TBT measures how long the main thread is too busy to respond to the visitor. It is the lab proxy for Interaction to Next Paint, the Core Web Vital that tracks responsiveness, because true responsiveness can only be measured from real visitors, and TBT is the closest a lab test can get. If the report layout is new to you, the guide to reading an Enterramon test walks through every section.
The report names the measured value, the device, and the score impact, and the numbers get real fast. One recent report in our records shows a page at 819 milliseconds on desktop and 1,320 on mobile, against the 200 millisecond target, costing twelve points on the desktop performance score and fifteen on mobile. Those are not small misses, that is a page whose main thread is busy for over a second on a phone, frozen to the visitor the whole time.

What TBT measures
Every task a page runs on its main thread, parsing a script, handling a click, updating the layout, blocks the browser from doing anything else while it runs. Most tasks are short, but a long JavaScript task can hold the thread for hundreds of milliseconds, and during that time the page cannot respond to a tap, a scroll, or a click. Total Blocking Time adds up the time inside long tasks, the part beyond 50 milliseconds where the page is genuinely unresponsive.
The measurement window matters as much as the math. TBT only counts blocking time between the first content appearing on screen and the moment the page becomes fully interactive, so work that finishes before first paint or starts very late in the background does not count against it. That is why a script that quietly runs after the page is already usable can escape the metric, while the scripts that run in the critical window between first paint and interactivity are the ones that push it over target.
The 200 millisecond target is the line the report checks against, and past 600 milliseconds the finding escalates, because at that point the page is spending most of its early life frozen. The single biggest source of long tasks is JavaScript, which is why this finding almost always points at scripts, and why the fix is about what the page runs rather than how fast the server answers.
Why TBT matters for responsiveness
The visitor experience TBT protects is the moment they try to interact. A page can paint quickly and still feel broken if tapping a button does nothing for a second while the main thread finishes a long script task. That is the lag people describe as the page being slow, and it is different from the delay of content appearing, which is LCP’s job to measure. LCP says how fast the page shows, TBT says how fast it answers.
Because real responsiveness only shows in field data from actual visitors, the lab uses TBT as the stand-in, and the two track each other closely. A page that keeps its main thread clear in the lab is a page that feels responsive to real people. The watch note on this finding says it plainly, TBT is the lab proxy for real-world INP, and the fix that brings TBT down is the fix that brings real responsiveness up.
The script that holds the thread
The usual culprit is a large script that parses and runs as one long task, or a pile of third-party scripts that each add their own blocking chunk. A single bundled application script can hold the thread for hundreds of milliseconds by itself, and tag managers, analytics, chat widgets, and embeds stack on top of it. The report’s own findings point at the worst offenders, and the duplicate library and heavy weight checks often fire alongside this one for the same reason.
Third-party scripts deserve particular suspicion, because they are code you did not write and cannot easily optimise. Every tag manager, analytics snippet, chat widget, and embedded player is a download plus a main-thread task to run it. A page can ship modest first-party code and still fail TBT purely on the weight of its third-party scripts, which is why reducing what the page loads matters as much as how the code is written.
Cutting the blocking time
Split the big scripts. A single large script parses as one long task. Code splitting breaks it into smaller chunks that load and run as the page needs them, so no single task holds the thread for long. If the site bundles its own JavaScript, look at what is in the main bundle and move the parts only some pages use into separate files.
Defer or async what does not need to run now. Scripts marked defer wait until the document is parsed while keeping their order, which suits first-party bundles whose parts depend on each other. Independent third-party scripts, like analytics, suit async instead, because async lets each one run as soon as it downloads without waiting for the document, and scripts that only power below-the-fold features can wait longer still. The report’s own JavaScript findings show which files are worth questioning.
Move third-party code off the critical path. Load tag managers, chat widgets, and embeds after the page is interactive, or only when the visitor engages with them. Every third-party script removed or deferred is blocking time returned to the main thread, and third-party weight is often the single biggest lever on this metric.
Offload heavy work to a Web Worker. Some work is genuinely needed but does not need the main thread, parsing large data, processing text, crunching numbers. A Web Worker runs that work on a background thread and leaves the main thread free for layout, painting, and answering the visitor, which is the difference between a page that stutters while it thinks and one that stays responsive.
WordPress site owners never touch the scripts themselves, their levers are the plugin list and the theme’s features. Every active plugin ships its own script, so the first move is to deactivate anything nothing on the site uses, and a theme with built-in sliders and animations may load those libraries on every page, even where the feature never appears, which is exactly the weight this metric counts. An optimisation plugin can apply defer across the site as the practical version of that route, and the code-splitting and Web Worker fixes are developer work, so hand those to the person who maintains the theme with this finding from the report.
Watching the thread free up
Re-test after each change, because TBT responds to script reductions faster than most metrics. The report gives the value every run, so you can watch it fall toward the 200 millisecond line. This site is the proof that the fixes work, after we removed a duplicated script library and trimmed the heaviest assets, our own blocking time dropped to tens of milliseconds on both desktop and mobile, and the TBT finding disappeared.
TBT shares its causes with the other performance findings, heavy scripts, duplicate libraries, and third-party weight all land here. Fix those and the main thread frees up, which is the responsiveness the metric exists to protect. The result a visitor feels is a page that answers when they tap it, instead of one that makes them wait for the script to finish.