Setting up a repeatable HTML Page Weight Analyzer run that holds up under review means turning it into a five-stage measurement workflow instead of a one-click check. The run still has the same five stages — capture the original uncompressed HTML response body, run the analyzer on that paste, read the UTF-8 byte total and the inline, data URI and external-reference breakdown against Googlebot's 2 MB reference, fix the largest source-level hotspot, then remeasure the real deployed response — but each stage exists because the next one depends on it. Pasting the wrong source skews every downstream number, ignoring the header and compression caveat turns a transparent body reading into a false crawl guarantee, and re-pasting a shrunken draft instead of the deployed response hides the hotspot you actually need to fix. The analyzer runs entirely in the browser, parses the pasted text inside a detached template fragment without fetching or executing it, and reports UTF-8 bytes via the browser TextEncoder API. Those three properties — local-only parsing, browser-grade UTF-8 measurement, and a body-only reference — are the constraints every step in your set-up must respect. Use this article to commit those constraints to paper before you open the tool, so each paste, click, and remeasurement answers a deliberate question instead of producing noise.

What a good set-up checklist commits to
Before you paste anything, the set-up should commit five decisions to paper. First, name the exact response you intend to measure — the public HTML, the locale variant, the authenticated variant, or the JavaScript-rendered snapshot — and pick one. Second, name the capture method that matches that decision: View Source for the public HTML, an authorized curl capture for the variant the browser does not show you, or a saved response body for offline review. Third, agree that the headline number will be UTF-8 bytes, not a JavaScript string length and not a transfer size. Fourth, agree that the 2,000,000-byte reference is a body-only decimal comparison, not a certification that Googlebot will fetch the whole document. Fifth, agree on the remeasurement trigger: a change to the deployed HTML, not a change to a local draft. Writing those five commitments into the set-up turns the analyzer from a one-click toy into a measurement instrument, and it gives the rest of the team a paper trail when the numbers disagree.
If you want a shorter pre-flight, the documenting steps workflow shows how a written checklist protects each run from silent source drift between captures.
Capture the right response body first
Capture is the step most likely to invalidate every number that follows. The analyzer measures what you paste, not a live URL, so the quality of the paste is the quality of the result. The preferred input is the original uncompressed HTML response body from View Source, a saved response body, or an authorized curl capture against the public URL. Avoid the Elements panel after JavaScript has run: that view can include mutations that were never in the response and can omit source details that were. If the server varies by user agent, locale, authentication, or device class, plan a separate paste for each representative response, because a single paste averages over real differences and hides the variant that actually broke the budget.
Two more capture rules belong in the set-up. The analyzer never downloads referenced resources, so any external stylesheet, script, image, frame, preload, or media reference contributes only its URL characters to the pasted total — not the file's payload. Plan to read the external-reference inventory as a list, not as a weight. And plan for the headline total to use UTF-8 bytes, where ASCII characters are usually one byte, but accented letters, CJK text, and emoji each occupy more than one byte. A document that looks short in a text editor can read large in the analyzer for exactly that reason.
Run the analyzer in the right order
Once the paste is ready, the run itself follows a fixed sequence. Treat the order as part of the set-up, not as a suggestion.
- Open the HTML Page Weight Analyzer and paste the captured response body into the input area. Do not paste fragments, summaries, or rebuilt markup.
- Run the analysis and wait for the result view to render. The analyzer parses the paste inside a detached template fragment, so pasted scripts do not execute and referenced URLs are not requested.
- Read the headline total first. Confirm it is expressed in UTF-8 bytes and confirm the underlying code-point count separately so you can spot UTF-16 versus UTF-8 confusion at a glance.
- Read the inline script and inline style shares next, then the data URI byte total, then the bounded external-resource inventory. Order matters because a hotspot in inline script or data URI is usually a faster fix than one hidden inside an external file list.
- Compare the headline total to the 2,000,000-byte body reference and note the remaining bytes or the overage. Treat the reference as a body-only decimal comparison, not as a Googlebot fetch guarantee.
- Record the run with the capture method, the variant, the date, and the result numbers, so the next remeasurement has a baseline.
Read the result against the 2 MB reference
The reading step is where the set-up earns its keep. The analyzer reports five families of numbers — total UTF-8 bytes, Unicode code points, inline script and style shares, data URI bytes, and the bounded external-reference inventory — and each family answers a different question. Total UTF-8 bytes tells you whether the response body is approaching the documented Googlebot limit. Code points help you catch cases where characters that look cheap, like emoji or accented product names, are silently driving the byte total upward. Inline script and style shares tell you whether the document is dragging serialized application state, duplicated hydration data, embedded libraries, or repeated critical CSS into the response body. Data URI bytes tell you whether the document is embedding Base64 images or fonts directly into markup, which inflates the source even though it removes a network request. The external-reference inventory tells you how many distinct URLs the document asks the browser to fetch, not how large those URLs are.
| Family | What it counts | What it deliberately ignores |
|---|---|---|
| Total UTF-8 bytes | The pasted response body measured by the browser TextEncoder API. | HTTP response headers, gzip or Brotli transfer size, and any resource not present in the paste. |
| Inline script and style shares | The text inside each inline script or style element, as UTF-8 bytes and as a percentage of the full paste. | External script src values and external stylesheet links. |
| Data URI bytes | The complete attribute value of every supported data: reference, counted once. | The decoded Base64 payload, to avoid double-counting bytes already present in the source. |
| External-resource inventory | A bounded list of URLs from common image, media, frame, stylesheet, preload, and external script attributes, plus preserved srcset declarations. | The payload size of each referenced file; the analyzer never downloads them. |
| 2,000,000-byte reference | A conservative decimal body reference matching Google's documented 2 MB per-URL Googlebot allowance. | Header bytes, compression, separately fetched resources, and indexing outcomes. |
For example, if a pasted body measures 1,873,420 UTF-8 bytes, the bytes remaining below the reference are 2,000,000 − 1,873,420 = 126,580 bytes. That is a useful planning number, but the set-up must record the matching header caveat alongside it: Google's documentation says the limit applies to uncompressed data and that headers consume part of the per-URL allowance, so a body that fits cleanly inside 2,000,000 bytes can still cross the actual line once headers are added.
Plan the fix and remeasure cycle
The last stage of the set-up turns a measurement into an action and a verification. The first decision is which hotspot to fix first, and the rule is to fix the largest source-level hotspot in the response body, not the largest number in the external-reference inventory. Source-level hotspots are inside the paste, so the next remeasurement will see the change directly. External-reference hotspots are inside files the analyzer does not download, so remeasuring the paste will not move the number even when the page actually got faster.
Typical source-level fixes that show up as byte savings in the analyzer include moving inline scripts to cacheable external files, removing duplicated serialized hydration data, splitting a single oversized inline style block into a critical CSS file plus a deferred stylesheet, and replacing large Base64 data URIs with same-origin image or font URLs. After each fix, the set-up must remeasure the deployed response, not a local draft, and it must compare the deployed body against the same 2,000,000-byte reference using the same capture method. If you want a guardrail against the most common drift sources, the guide on mistakes that skew HTML page size analyzer results pairs well with the cycle by naming the inputs that produce misleading drops.
The cycle ends only when the deployed body sits well below the reference with header room to spare, when the inline shares and data URI totals match the design intent, and when the external-resource inventory reflects the actual page rather than a development leftover. The analyzer never claims the page will be crawled, indexed, or ranked as a result of those changes; that evidence still comes from Search Console, from log files, and from a manual review of what the live page actually serves.