Part of the Speed audit

Check for render-blocking stylesheets

Stylesheets in your page head block the browser from showing any content until they finish downloading. SiteCurl counts how many are holding up your first paint.

Start 7-Day Studio Trial

No signup required. Results in under 60 seconds.

423,000+ checks run and counting

What this check does

SiteCurl looks at each <link rel="stylesheet"> tag inside your page's <head>. Each one that does not have a specific media attribute (like media="print") is counted as render-blocking. The browser will not paint a single pixel until all of these stylesheets finish downloading.

Pages with 3 or fewer blocking stylesheets pass. More than 3 triggers a warning. The finding shows the exact count and the threshold so you know how many to remove.

Stylesheets with a media attribute set to something other than all (such as print or screen and (min-width: 768px)) are not counted as blocking. The browser downloads them but does not wait for them before painting.

How this shows up in the real world

When a browser reads your HTML, it stops at each stylesheet link in the <head> and waits. It cannot apply any styles until it has all of them. It cannot show any content until styles are applied. So if you have 6 CSS files in the head, the browser makes 6 requests, waits for all 6 to complete, then starts painting.

Each request involves DNS lookup (if the file is on a new domain), TCP link, TLS setup (for HTTPS), and the download itself. On a fast link, each step takes milliseconds. On a mobile link with 200ms latency, each step takes much longer. Six CSS files means six rounds of overhead.

The fix is not to remove CSS. Your page needs styles. The fix is to reduce the number of files the browser must wait for. Combine multiple files into one. Inline the critical CSS needed for the first view. Defer the rest with a media tag trick.

Google's Lighthouse audits flag render-blocking resources and reports them as opportunities to speed up First Contentful Paint. Reducing blocking CSS directly improves this metric.

Why it matters

First Contentful Paint (FCP) measures when the user first sees any content. Render-blocking CSS delays FCP because the browser refuses to show anything until all stylesheets load. On slow links, this can mean 2-5 seconds of white screen.

Users who see nothing for multiple seconds leave. They do not wait to find out if your page is worth it. They hit the back button and try the next search result. Each extra blocking stylesheet extends that white-screen window.

FCP is one of the metrics Google uses to evaluate page experience. Pages that paint faster rank better in search results, most of all on mobile where speeds vary widely.

Who this impacts most

Sites using multiple CSS frameworks or UI libraries tend to have the most blocking stylesheets. A page loading Bootstrap, a custom theme, a font stylesheet, and two plugin stylesheets has 5 blocking CSS files before it can show any content.

WordPress sites with many plugins are common offenders. Each plugin may add its own stylesheet to the head. Ten active plugins can mean 10 render-blocking CSS files, even if most of them are small. The overhead is in the number of requests, not just file size.

Single-page apps that inject stylesheets on the fly may also hit this issue if their initial HTML includes many CSS links for the app shell.

How to fix it

Step 1: Count your blocking stylesheets. Run a SiteCurl scan to see how many render-blocking stylesheets your page has. The finding shows the count and which ones are blocking.

Step 2: Combine CSS files. If you have multiple CSS files that always load together, combine them into one. Your build tool (Webpack, esbuild, Vite) can bundle them. Fewer files means fewer blocking requests.

Step 3: Inline critical CSS. Extract the CSS needed for above-fold content and put it directly in a <style> tag in the <head>. Tools like Critical (npm package) can automate this. The browser applies inline styles right away without waiting for a download.

Step 4: Defer non-critical CSS. For stylesheets that only affect below-fold content, load them without blocking: <link rel="stylesheet" href="below-fold.css" media="print" onload="this.media='all'">. This lets the browser download the file without waiting for it before painting.

Step 5: Remove unused CSS. If a plugin or framework stylesheet is loaded but not used on the page, remove the link. Tools like PurgeCSS or your browser's Coverage tab can show which CSS rules are actually used.

Common mistakes when fixing this

Inlining too much CSS. Inline CSS is not cached. If you inline your entire 200 KB stylesheet, each page load re-downloads it inside the HTML. Only inline the CSS needed for the first view (often 10-30 KB). Load the full stylesheet in the background.

Deferring CSS that is needed above the fold. If you defer a stylesheet that styles the header or hero section, users see unstyled content flash before the styles load. Only defer CSS for below-fold sections.

Adding media="all" and thinking it defers. media="all" is the default. It does not defer anything. Use media="print" with an onload swap to actually defer a stylesheet.

Ignoring plugin stylesheets. CMS plugins often add their own CSS files. If a plugin's styles are only needed on specific pages, load them only on those pages instead of site-wide.

How to verify the fix

After making changes, run another SiteCurl scan. The blocking stylesheet count should be 3 or fewer. You can also check in Chrome dev tools: open the Performance tab, record a page load, and look at the First Contentful Paint marker. It should appear earlier after reducing blocking CSS.

Use Chrome's Coverage tab (Ctrl+Shift+P > 'Show Coverage') to see how much of each CSS file is actually used on the page. Red bars show unused CSS that could be deferred.

The bottom line

Each stylesheet in your page head adds a download the browser must finish before showing anything. Combine CSS files, inline what matters for the first view, and defer the rest. Three or fewer blocking stylesheets keeps your first paint fast.

Example findings from a scan

5 render-blocking stylesheets in <head>

2 render-blocking stylesheets in <head>, within safe range

No render-blocking stylesheets in <head>

Frequently asked questions

What does render-blocking mean?

A render-blocking file stops the browser from showing any content until it loads. CSS in the head is render-blocking by default. The browser waits for all of them before painting the page.

How many stylesheets are too many?

SiteCurl flags pages with more than 3 render-blocking stylesheets. This does not mean 3 is ideal. Fewer is better. One file is best for most sites.

Will combining CSS files break my site?

Often not, if the CSS rules remain in the same order. Test after combining. If styles depend on load order, maintain that order in the combined file.

Can I check render-blocking CSS without signing up?

Yes. The free audit checks your home page for render-blocking resources as part of a full seven-category scan. No signup required.

What is critical CSS?

Critical CSS is the minimum set of styles needed to render the above-fold content. By inlining it in a style tag, the browser can paint the first view without waiting for any outside stylesheet.

Does HTTP/2 make this less important?

HTTP/2 cuts the cost of many requests, but stylesheets still block the render no matter the protocol. The browser still waits for each one to complete. Combining and deferring CSS helps even with HTTP/2.

Check your site speed now