A head script may block rendering

In the reportSynchronous external script declared in the document head

render_blocking_head_script · Review item

Short answer

This appears when a page's <head> declares an external script without async, defer or type="module". The browser stops building the page until such a script has downloaded and run. Add defer or async where the script allows it.

Severity: Medium. For review: the delay itself is not measured, and some scripts must run first.

Why it matters

web.dev's guide to Largest Contentful Paint says rendering of the entire page is blocked while stylesheets or synchronous scripts in the <head> are still loading, and that it is almost never necessary to add scripts without async or defer to the head.

What to do

  1. Look at the finding: it shows each script, its address, where it sits in the head and whether it comes from the page's own origin or another.
  2. Add defer to scripts that work with the page, or async to independent ones such as analytics.
  3. If a script must run before the page is shown, keep it small, or put its code inline.

When to leave it as it is: if a script must run before anything is shown, such as a consent or testing script that changes the page, you can leave it, keeping it as small as you can.

What we read

We read the <head> of each crawled page as served, without running JavaScript, and look for <script src> tags without async or defer that are classic scripts, not type="module". Inline scripts, scripts in the body and scripts added by JavaScript are not checked.

A page is reported when the audit fetched such a script and it answered 200. The finding shows whether it comes from the page's own origin or another.

A page is marked as not checked when its HTML could not be read in full, for example because it contains unsupported SVG markup, <select> or <math>, when it has no <head> tag or its head contains <noscript> or an element that belongs in the body, when a script has nomodule, or when such a script was not fetched.

Example & evidence

Illustrative example — one page head, not a live audit.

The head of https://bakery.example/ contains:

<head>
<script src="https://bakery.example/js/slider.js"></script>

The script has no async or defer, so the browser waits for it before building the page, and the page is reported with it.

<script src="https://bakery.example/js/slider.js" defer></script>

A possible correction, if the slider only needs to run once the page is built.

Confirm & check again

Check for yourself: view the page source and look at every <script src> in the head for async, defer or type="module".

Check again: Full audit — run a new audit of the site. The finding closes when the page is crawled again, read in full, and its head has no such script and nothing that keeps it from being checked, such as a nomodule script or a <noscript> in the head.

Limits & sources

The check reads how scripts are declared; it does not measure how long they block rendering or their effect on Largest Contentful Paint. Inline head scripts, which also block, are not assessed, and the blocking attribute is ignored.

Confidence: High because the declaration is read directly from the HTML.

Sources

  • web.dev, Optimize Largest Contentful Paint — says rendering of the entire page is blocked while stylesheets or synchronous scripts in the <head> are loading, and that synchronous scripts in the head are almost never necessary. Checked 28 September 2026.

Editorial review: 30 October 2026