Detects oversized resources affecting page performance
3 of 3 free audits left today
See what Large Resource finds on your site. No sign-up needed.
Threshold check — before loading anything, the auditor checks that sizeLimitBytesWarning is lower than sizeLimitBytesFail. When it is not, the audit fails with a single check that names both values, and nothing is measured.
Page loading — opens the URL with Playwright (Basic auth is honoured) and waits for the load event. A page that answers HTTP 403, HTTP 429 or a Cloudflare challenge is reported as blocked; any other HTTP error, or a browser error, ends the audit with an ERROR.
Resource discovery — reads the src / href of img, script, link[rel=stylesheet], video and iframe elements. Relative and protocol-relative URLs are resolved against the final page URL; data:, blob: and other non-HTTP URLs are skipped.
Size lookup — sends an HTTP HEAD request per resource and reads Content-Length. When the answer has no Content-Length (chunked or streamed responses) or the HEAD fails, a GET downloads the body, up to sizeLimitBytesFail, and counts its bytes; a download that reaches the limit is reported as "at least" that size. Resources are measured eight at a time, each request limited to 5 seconds. A resource that neither request can size is reported as INFORMATION.
Comparison — every resource whose size is at or above sizeLimitBytesFail produces one FAIL check; every resource at or above sizeLimitBytesWarning and below sizeLimitBytesFail produces one WARNING check. Each check carries the resource URL, its size and both limits in data (sizeInBytes, sizeIsLowerBound, sizeLimitBytesWarning, sizeLimitBytesFail).
| Key | Type | Default | Description |
|---|---|---|---|
sizeLimitBytesFail | integer (bytes) | 1024000 (1000 KB) | Resources at or above this size fail the audit. Set it per monitored URL on the Configuration tab; plain integer bytes only (for example 1048576 for 1 MB). |
sizeLimitBytesWarning | integer (bytes) | 512000 (500 KB) | Resources at or above this size, and below sizeLimitBytesFail, produce a warning. Must be lower than sizeLimitBytesFail. |
evaluateExternalResources | boolean | true | When false, resources served from a host other than the audited site or one of its subdomains (www. ignored) are not measured. Each one left out is listed as an INFORMATION check, 37A-LargeResourceAuditor-101. Set it per monitored URL on the Configuration tab. |
An invalid value (missing, zero, negative, fractional) makes the auditor fall back to that preference's default and log a warning. A warning limit equal to or above the fail limit is not an invalid value: it makes the audit fail until the thresholds are fixed.
Every row maps to one checkRule* method and one CheckCode, in the order the auditor runs them.
| CheckCode | Status | When it fires | Recommendation | Why it matters |
|---|---|---|---|---|
37A-LargeResourceAuditor-401 | FAIL | sizeLimitBytesWarning is equal to or above sizeLimitBytesFail. Message: sizeLimitBytesWarning ({warning}) must be lower than sizeLimitBytesFail ({fail}). | On the auditor's Configuration tab, set sizeLimitBytesWarning below {fail}, or raise sizeLimitBytesFail above {warning}. | Until the warning threshold is lower than the fail threshold this audit cannot measure the page, so oversized files that slow it down go unreported. |
37A-LargeResourceAuditor-500 | ERROR | The page could not be loaded in the browser (browser error, timeout, or an HTTP error status other than a block). Message: Could not load {url} in the browser: {error}. | Make sure {url} loads in a browser (it answered: {error}), then run the audit again. | — |
37A-LargeResourceAuditor-100 | INFORMATION | Neither HEAD (Content-Length) nor GET could size a resource. Message: Could not measure the size of {resource}: {problem}. | Make sure {resource} answers a HEAD or GET request within 5 seconds; until then its size is not compared with the {warning} warning threshold. | — |
37A-LargeResourceAuditor-400 | FAIL | A resource is at or above sizeLimitBytesFail. Message: Resource {resource} is {size}, at or above the {fail} fail threshold. | Compress, resize or lazy-load {resource} ({size}) to bring it below {fail}, or raise sizeLimitBytesFail if the size is intentional. | Oversized files delay rendering and waste mobile data, so visitors wait longer and more of them leave before the page loads. |
37A-LargeResourceAuditor-300 | WARNING | A resource is at or above sizeLimitBytesWarning and below sizeLimitBytesFail. Message: Resource {resource} is {size}, at or above the {warning} warning threshold and below the {fail} fail threshold. | Compress or lazy-load {resource} ({size}) before it grows past {fail}. | Large files add load time on every visit, and visitors on slow mobile connections feel it most. |
37A-LargeResourceAuditor-200 | SUCCESS | All rules passed. Message: All {n} measured resources are below {warning}; the largest is {resource} at {size}. | — | — |
37A-LargeResourceAuditor-590 | ERROR | The audited page answered HTTP 403, HTTP 429 or a Cloudflare challenge, so 37AuditsBot was blocked before it could read the page. | Allow 37AuditsBot in your firewall or bot protection: allowlist its user agent, or verify its Web Bot Auth signature. See https://www.37audits.com/bot. | While 37AuditsBot is blocked this audit cannot look at the site, so problems on it go unreported. |
37A-LargeResourceAuditor-101 | INFORMATION | evaluateExternalResources is false: one check per resource that was not measured, served from a host other than the audited site or one of its subdomains. The check's resource is that URL; data carries host, siteHost and evaluateExternalResources: false. Message: Not evaluated: the resource {resource} is served from {host}, outside {siteHost}, and Evaluate external resources is off. Never changes the result's status. | Turn on Evaluate external resources for this monitored URL to assess third-party resources too. | — |
Sizes are shown in MB with two decimals (1.20 MB); a size measured by a download that stopped at the fail limit reads at least 0.98 MB.
| Status | Description | Test logic |
|---|---|---|
| INFORMATION | A resource could not be measured | Neither HEAD nor GET gave its size. Never changes the overall status. |
| SUCCESS | No resource reaches the warning limit | Every measured resource is below sizeLimitBytesWarning. |
| WARNING | One or more resources are large, none too large | At least one size is greater than or equal to sizeLimitBytesWarning, and none reaches sizeLimitBytesFail; the summary message counts them. |
| FAIL | One or more resources are too large, or the thresholds are inconsistent | At least one size is greater than or equal to sizeLimitBytesFail (the summary counts the failures and, when present, the warnings), or sizeLimitBytesWarning is not lower than sizeLimitBytesFail. |
| ERROR | The audit could not run | The page could not be loaded (…-500) or the site blocked 37AuditsBot (…-590). |
Oversized hero images and videos are the most common cause of a slow Largest Contentful Paint.
Big JavaScript bundles block the main thread and delay interactivity on low-end devices.
Resources loaded dynamically after the load event (for example by scripts or CSS url() references) are not discovered.
A resource behind a slow server (more than 5 seconds per request) is reported as unmeasured rather than compared with the limits.
The limits apply to every resource type alike; they do not distinguish a 1 MB video from a 1 MB script.
This documentation is built and hosted on Mintlify, a developer documentation platform.
Add this auditor to your monitoring setup and start identifying issues on your websites today.