How it works
Once a day, we download your page and every script, stylesheet and image it references (up to 50 files), and add up their size. We also check how each file is served:
- Compression: text files over 1 KB (HTML, CSS, JavaScript) should be compressed with gzip or Brotli.
- Caching: static files should be cacheable, and files behind a CDN should be served from the CDN cache rather than from your server every time.
- Heavy files: any single file over 500 KB, more than 500 KB of JavaScript in total, and JPEG, PNG or GIF images over 100 KB, which a modern format such as WebP or AVIF would shrink.
- Render-blocking scripts: scripts in
<head>withoutasyncordefer, which stop the page from appearing until they have loaded. - Requests: pages that need more than 80 requests.
- Growth: a page that grew by 25% (and at least 100 KB) since the previous run.
The total page weight is charted over time.
Settings
| Setting | Default | What it does |
|---|---|---|
| Budget KB | 3000 |
Fail when the page weighs more than this. |
Statuses
| Status | Meaning |
|---|---|
| OK | The page is within budget and no problems were found. |
| Warning | One of the problems above, or we could not connect. |
| Failed | The page weighs more than your budget. |
By default you are notified of failures only.
Fixing common problems
- Large images: resize images to the size they are displayed at, convert them to WebP or AVIF, and lazy-load images below the fold with
loading="lazy". - No compression: enable gzip or Brotli in the web server or CDN for HTML, CSS, JavaScript, JSON and SVG.
- Render-blocking scripts: add
deferto scripts in<head>, or move them to the end of<body>. - Too much JavaScript: remove unused libraries and split the bundle so each page only loads what it needs.