Third-party scripts and Total Blocking Time: what service website owners actually pay for

Third-party JavaScript can make a service page look ready while its main thread is too busy to respond. Total Blocking Time (TBT) helps diagnose that problem in the lab, but it is not a Google ranking signal or a pound-value calculator. This guide shows owners how to find the scripts doing the work, decide whether they earn their place, and verify changes with both TBT and real-user responsiveness.

Written by Founder of ScanMySEO
Published Updated Reading time9 min read

The hidden cost is not just download size

On a service website, a third-party script may power analytics, call tracking, live chat, appointment booking, maps, reviews, consent controls, A/B testing or advertising. The useful question is not “Are third-party scripts bad?” It is “Which scripts are consuming browser time, what business job does each one perform, and is there a cheaper way to get the same outcome?”

Owners effectively pay for third-party code in four currencies:

  • Main-thread time: JavaScript must be parsed and executed, and long tasks can delay clicks, taps and typing.
  • Customer-task friction: a visitor may see the page but still wait for the browser to respond to a menu, quote form, booking flow or other interaction.
  • Operational complexity: every vendor adds configuration, testing and regression risk when tags, consent rules, themes or vendor code change.
  • Opportunity cost: duplicate or low-value tools consume performance budget that could be spent on features customers actually use.

TBT measures only the first of those directly. It cannot tell you how many leads were lost or convert milliseconds into revenue. Any monetary claim needs your own analytics, lead-quality data and controlled testing rather than a generic “milliseconds cost £X” formula.

What TBT measures — and what it does not

web.dev defines Total Blocking Time as the sum of the blocking portions of long main-thread tasks during a measured page-load window. A task becomes “long” when it runs for more than 50 milliseconds; only the time beyond the first 50 milliseconds contributes to TBT.

That distinction matters. If a task takes 170 milliseconds, it contributes 120 milliseconds of blocking time, not 170 milliseconds. A page can also accumulate TBT from several smaller long tasks rather than one dramatic freeze.

Lighthouse reports TBT as a lab metric. Its current mobile scoring guidance treats 0–200 milliseconds as the green range, but that is a Lighthouse performance threshold, not an SEO requirement and not proof that users will experience every interaction as fast. web.dev recommends using TBT as a useful lab indicator of responsiveness problems while measuring Interaction to Next Paint (INP) in the field for actual user responsiveness.

Third-party code is one possible source of TBT, not the definition of TBT itself. Your own application JavaScript, theme code, plugins or large client-side bundles can create the same long tasks. Likewise, a script being hosted on another domain does not prove it is the biggest performance problem.

TBT, INP and Google Search: keep the metrics separate

The old version of this article treated TBT itself as a search-engine signal. That is too strong. TBT is not a Core Web Vital. Google’s current Core Web Vitals responsiveness metric is INP, alongside Largest Contentful Paint (LCP) and Cumulative Layout Shift (CLS). Google says Core Web Vitals are used by its ranking systems, while also stressing that good scores do not guarantee high rankings and that page experience should be considered holistically. See Google’s current guidance on Core Web Vitals and Search and page experience.

For an owner, the practical interpretation is simpler: use TBT to find browser work that may make the page feel unresponsive during loading; use field INP to understand responsiveness experienced by real visitors; and judge the business result through the customer task you care about. Do not optimise TBT purely to chase a ranking claim that Google does not make.

Where service websites commonly pay the cost

The same script can be valuable on one page and wasteful on another. A booking widget may be central to a “Book an appointment” page but unnecessary on every blog article. A map can be useful on a contact page yet expensive when embedded across dozens of service pages. A chat tool can create leads, but loading its full application before the visitor has had a chance to read the page may be avoidable.

Common scriptBusiness jobPerformance questionOwner decision
Live chatAnswer questions and capture leadsDoes it run substantial JavaScript before the visitor opens chat?Keep if valuable, but test delayed or interaction-triggered loading where the vendor supports it.
Booking or scheduling widgetConvert visitors into appointmentsIs it needed above the fold, or only after the visitor chooses to book?Keep the conversion path; consider loading the full widget only when it is needed.
Map or rich embedShow location or third-party contentDoes the embed load immediately even when it is below the fold?Consider a lightweight placeholder or lazy-loaded embed when appropriate.
Analytics and marketing tagsMeasurement, attribution and advertisingAre several tools collecting the same event or firing site-wide without a current owner?Remove duplicates and obsolete tags before attempting technical micro-optimisation.
Reviews or social widgetsTrust and social proofCould the useful content be presented without loading a large interactive vendor bundle at startup?Compare the widget’s business value with a lighter implementation or later load.

Diagnostic checklist: find the scripts that actually block the page

Do not start by deleting whatever vendor name looks suspicious. Build a repeatable baseline and attribute the work first.

  1. Choose one important page and one customer task. Examples include submitting an enquiry, opening navigation, starting a booking, calling the business or requesting a quote. This prevents a generic speed score from becoming the only success criterion.
  2. Record a lab baseline. Run Lighthouse under consistent settings and note TBT along with the overall performance context. Repeat the test enough times to recognise normal run-to-run variation rather than treating one result as absolute truth.
  3. Record the page in Chrome DevTools Performance. Current Chrome tooling can group third-party activity in the 3rd parties insight, while the Performance panel lets you inspect long tasks and attribute work to scripts and origins.
  4. Match each expensive script to a business owner and purpose. “Marketing tag” is not enough. Identify who needs it, what decision or customer function depends on it, where it needs to run and what would break if it were removed.
  5. Separate network cost from execution cost. A script may download quickly but execute heavily, or download slowly while doing little main-thread work. TBT is mainly about blocking CPU work, so do not assume the largest file is automatically the biggest TBT contributor.
  6. Check field responsiveness. If you have enough real-user data, review INP through your field-performance tooling. A low lab TBT is encouraging, but it does not replace field evidence.

If the long tasks are mostly first-party, fix your own JavaScript before blaming vendors. If third-party work is material, move to the decision framework below.

Prioritising remediation: remove, delay, replace or keep

For each script, score the measured browser cost against business necessity. Then choose the least risky action that removes unnecessary work.

EvidenceDefault actionReason
High measured cost; no clear owner or current business useRemoveUnused code cannot justify ongoing performance and maintenance cost.
High cost; useful but not needed during initial viewingDelayLoading on interaction, later in the journey or only on relevant pages can protect the critical path.
High cost; essential function; vendor offers limited controlReplace or reconfigureA lighter vendor, reduced feature set or different integration may preserve the business function with less browser work.
Low measured cost; clear business valueKeepPerformance work has an opportunity cost too. Document the dependency and focus on larger bottlenecks.

This framework deliberately avoids a universal “maximum number of scripts”. Ten small, well-timed scripts can be cheaper than one heavy application, and a single high-value widget may be worth more than several technically perfect but unused integrations.

What optimisation can realistically change

For scripts you control, reducing unused JavaScript, splitting work and shortening long tasks may help. For vendor code, owners often have less control, so the most effective changes are frequently about when and where a script loads rather than editing its internals.

  • Remove duplicate or abandoned tags first. This is usually safer than trying to tune code nobody needs.
  • Load scripts only on pages that require them. A booking integration does not automatically belong on every article or service page.
  • Delay non-critical third-party code. web.dev’s third-party JavaScript guidance covers approaches including asynchronous loading and lazy loading. Remember that async or defer can reduce parser blocking, but the script can still consume main-thread time when it eventually executes.
  • Use lightweight facades or placeholders for heavy embeds where suitable. The full third-party experience can load when the visitor chooses to use it rather than at the start of every page view.
  • Reconfigure the vendor before replacing it. Disable features, triggers or page coverage you do not use. A smaller configuration can be lower-risk than migrating a revenue-critical tool.
  • Consider server-side tagging selectively for measurement stacks. Google documents that server-side tagging can reduce the amount of measurement code running in the browser, but it adds infrastructure, cost and implementation work; it is not a universal fix for chat, booking or other interactive widgets.

For a deeper implementation-focused walkthrough, see ScanMySEO’s guide to managing third-party scripts.

A practical script cost ledger for an owner

Instead of converting TBT directly into money, maintain a short ledger for the scripts on your most valuable templates. The figures should come from your own measurements.

RecordWhat to capture
Script/vendorThe tool or integration and the pages where it loads.
Owner and purposeWho needs it and the customer or measurement job it performs.
Performance evidenceThird-party CPU activity, long tasks, TBT contribution where attributable, and relevant field INP observations.
Business evidenceLeads assisted, bookings completed, measurement dependency or another defensible reason to keep it.
ConstraintVendor limitations, consent requirements, contractual dependencies or engineering effort.
DecisionRemove, delay, reconfigure, replace or keep — plus who owns the next check.

For example, if a chat widget creates a large amount of startup work but only a small share of visitors open it, the useful experiment is not “remove chat forever”. It is “delay the full widget until intent is clearer, then compare responsiveness and lead behaviour”. The right answer depends on your site’s evidence.

Verification: prove the page improved without breaking the business

Performance work is not finished when a Lighthouse number turns green. Verify both the technical result and the service journey.

  1. Retest under the same lab conditions. Compare TBT and the long tasks attributed to the script you changed.
  2. Test the customer task. Submit the form, open chat, start the booking flow, click the phone link and use any other function the script supports.
  3. Verify measurement. Confirm required analytics and conversion events still arrive. A faster page with broken attribution is not automatically a successful change.
  4. Check field INP over time where data is available. TBT may improve without producing an immediate field change, and a real-user INP problem can exist outside the initial load window measured by TBT.
  5. Watch for regression. Tag-manager edits, plugin updates and vendor releases can restore scripts you removed or change when they execute.

The owner-level success condition is therefore not “lowest possible TBT”. It is less unnecessary main-thread blocking while the website still completes the customer and measurement jobs that matter. That is a defensible performance decision; a generic claim that a particular TBT value guarantees more leads or higher rankings is not.

Hansel McKoy

Hansel McKoy is the founder of ScanMySEO and a technical SEO specialist with more than 10 years of experience across agency, in-house, public-sector, and founder-led roles.

Founder of ScanMySEO


Get More Out of ScanMySEO