What this tool checks
The analyzer fetches the page, measures the HTML itself, then reads every <script src>, <link rel="stylesheet">, <img> and preloaded font it references. Each asset is sized with a lightweight HEAD request — falling back to a GET whose body is immediately cancelled when a CDN refuses HEAD — so nothing large is actually downloaded. It asks servers for the uncompressed representation, so the figures are pre-gzip bytes — the weight the browser must decode, parse and execute rather than the weight on the wire. The whole run is capped at 30 outbound requests, the same budget the broken-link checker uses, which keeps it polite to your server and fast for you. Every asset URL is revalidated before it is fetched, and redirects are never followed automatically.
The output is deliberately honest about its own limits: assets beyond the sample are reported as a count rather than silently dropped, and anything that arrives without a content-length header is listed as unmeasured instead of being scored as zero.
Why page weight is still the thing to fix
Almost every slow page is slow for the same boring reason: it sends too much. Framework bundles that were never code-split, an icon font shipping thousands of glyphs to use six, a hero image exported at 4000px and displayed at 800, four analytics tags that each pull in their own library. None of it is a bug, and none of it shows up in a functional test — the page works perfectly, it just costs the visitor three seconds and a chunk of their data plan.
Weight maps onto Core Web Vitals directly. An oversized hero image is usually the LCP element, so its transfer time is your LCP. Render-blocking CSS in the head delays first paint for everyone. Large scripts monopolise the main thread, which is what turns a tap into a sluggish INP score. Fonts loaded without font-display hold text invisible or swap it late, contributing to layout shift.
How to fix what you find
Images: serve modern formats (AVIF/WebP), size them to their actual display width with srcset, and lazy-load anything below the fold — this is usually the single biggest win and needs no build-system changes. JavaScript: look for one dominant bundle in the list above and split it, or find the library you are using one function from. Defer anything not needed for first paint. CSS: if a single stylesheet is hundreds of kilobytes you are almost certainly shipping a whole framework to style one layout; purge unused rules. Fonts: subset to the characters you use, self-host to avoid an extra connection, and set font-display: swap. Third parties: audit them ruthlessly — every tag should have someone who can say what it is for. Once the obvious weight is gone, run a full audit to see what the change did to real Core Web Vitals rather than to byte counts alone.