Render-blocking resources

mediumperformance-render-blocking

A script or stylesheet in <head> that the browser must resolve before painting anything. defer, async and preload fix the three common cases.

What it is

A render-blocking resource is a stylesheet or synchronous script in <head> that the browser must download and process before it can paint anything — the page stays blank until every one of them resolves. This check looks specifically at resources in the document head, the ones the browser encounters before it can render a single pixel.

It's distinct from Total Blocking Time: TBT measures blocking after the page has started rendering; this measures what delays that first render happening at all.

Why it matters

Every render-blocking script in <head> adds its full download-plus-parse time directly to how long a visitor stares at a blank page — and that cost compounds when several are queued one after another on a slow connection.

Adding defer or async to head scripts, and loading non-critical CSS via a preload-then-swap pattern, lets the browser paint using what it already has while those resources continue loading in the background.

How to fix it

with a reference doc
html
<script src="/app.js" defer></script>
<link rel="preload" as="style" href="/non-critical.css" onload="this.rel='stylesheet'">

Reference documentation

Related checks

3
highLargest Contentful Paint (LCP)Largest Contentful Paint (LCP) measures the time from navigation start until the largest image or text block in the viewport has rendered — a stand-in for 'when does this page feel loaded' rather than 'when did the first byte arrive'. It's one of Google's three Core Web Vitals.mediumText compressionThis checks whether text resources — HTML, CSS, JavaScript — are served with gzip or brotli compression via the Content-Encoding header. Resources under about 1.4KB are excluded, matching Lighthouse's own threshold: below that size, compression's header overhead costs more than it saves.highTotal Blocking Time (TBT)Total Blocking Time (TBT) sums how long the main thread was blocked by long tasks (over 50ms) between First Contentful Paint and the page becoming interactive. It's the lab-measurable stand-in this scanner uses for Interaction to Next Paint (INP), which needs real user interaction data that a single-page lab test can't produce.

This is one of the 75 checks the scanner runs. See what we check for the full list, every severity weight, and how the score is computed from them.

See whether your own site passes render-blocking resources.

One page, all 75 checks, free. No account, no card.

Run a scan