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.

No signup required. Results in under 60 seconds.

What this check does

SiteCurl looks at every <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 every 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 different domain), TCP connection, TLS handshake (for HTTPS), and the download itself. On a fast connection, each step takes milliseconds. On a mobile connection 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 attribute trick.

Google's Lighthouse audits specifically check for 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 visitor first sees any content. Render-blocking CSS delays FCP because the browser refuses to show anything until all stylesheets load. On slow connections, this can mean 2-5 seconds of white screen.

Visitors 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. Every additional 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, especially on mobile where connection speed varies 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 dynamically inject stylesheets 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 immediately 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, every page load re-downloads it inside the HTML. Only inline the CSS needed for the first view (typically 10-30 KB). Load the full stylesheet asynchronously.

Deferring CSS that is needed above the fold. If you defer a stylesheet that styles the header or hero section, visitors 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, conditionally 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 indicate unused CSS that could be deferred.

The bottom line

Every 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 resource prevents the browser from showing any content until it finishes downloading. CSS stylesheets in the head are 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 combined stylesheet is optimal for most sites.

Will combining CSS files break my site?

Usually 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 external stylesheet.

Does HTTP/2 make this less important?

HTTP/2 reduces the overhead of multiple requests, but stylesheets are still render-blocking regardless of protocol. The browser still waits for each one to complete. Combining and deferring CSS helps even with HTTP/2.

Check your site speed now