What Is Total Byte Weight and How to Reduce It?#
Total Byte Weight is the cumulative size of every resource the browser downloads to render a page — HTML, CSS, JavaScript, images, fonts, video, and third-party scripts combined. Performance audits score it on a curve: a compressed transfer size of about 2,667 KiB scores 90, and 4,000 KiB scores 50. The heavier the payload, the slower TTFB, FCP, LCP, and TTI become — directly hurting Core Web Vitals and search rankings.
Key Facts (TL;DR)
- Audit scoring: a compressed transfer size of about 2,667 KiB scores 90; 4,000 KiB scores 50.
- Best-in-class: < 1,000 KB — fast on 4G, usable on 3G.
- Web median (2024): Mobile pages ship around 2.0 MB and desktop around 2.6 MB — both well past the 1,000 KB best-in-class mark (HTTP Archive Web Almanac).
- Growth: Median page weight has grown from ~1.2 MB in 2017 to over 2.3 MB in 2024 — a 90%+ increase in seven years.
- 3G cost: On a 3G mobile connection (~400 Kbps effective), every additional megabyte adds roughly 20 seconds of download time.
- Composition: Images dominate at 40–55% of page weight, JavaScript 20–30%, video 10–15%, fonts 5–10%, CSS 3–5%, HTML 2–4%.
Think of byte weight like luggage on a flight. A carry-on (under 1 MB) gets you boarded fast. A checked bag costs time at every step — security, gate, baggage claim. On a slow mobile connection, that extra weight is the difference between a visitor who sticks around and one who bounces before your hero image even paints.
Why Heavy Pages Hurt Rankings, Conversions, and Wallets#
A bloated payload cascades into every other performance metric — and into your business numbers:
- Slower Core Web Vitals: More bytes mean longer download time, which delays TTFB, FCP, and LCP. LCP is a confirmed Google ranking signal, and pages that fail Core Web Vitals lose ground in competitive queries.
- Mobile is hit hardest: On a 4G connection, every megabyte costs roughly 5+ seconds. A 4 MB page can take 20+ seconds on 3G — well past the point where most visitors abandon.
- Visitor data plans: Heavy pages eat into limited mobile data. In emerging markets, a 4 MB page can cost a real fraction of a daily data budget — and visitors notice.
- Battery drain: Downloading and parsing large JavaScript bundles consumes meaningful battery on phones, especially older ones.
- CDN bills: Egress is billed per GB. Cutting median page weight in half can cut bandwidth costs in half too — especially at high-traffic scale.
- AI search visibility: AI search engines source citations primarily from pages that already rank well. A failing Total Byte Weight pulls Core Web Vitals down, which pulls rankings down, which reduces your chance of being cited in AI Overviews and similar systems.
How Total Byte Weight Is Measured#
The metric is the sum of transfer size (compressed, over-the-wire bytes) of every resource the page requests during load — not the uncompressed file size on disk. The audit's scoring points (about 2,667 KiB for a score of 90, 4,000 KiB for 50) apply to the compressed transfer total.
Worked example for a typical product page:
Resource type Transfer size
-------------------- ------------
HTML document 45 KB
CSS bundle 68 KB
JavaScript bundle 512 KB
Hero image (WebP) 180 KB
Below-fold images 620 KB
Web fonts (woff2) 110 KB
Third-party scripts 240 KB
Video poster + preview 150 KB
-------------------- ------------
Total 1,925 KB (over the 1,000 KB best-in-class mark)- HTML document: 45 KB
- CSS bundle: 68 KB
- JavaScript bundle: 512 KB
- Hero image (WebP): 180 KB
- Below-fold images: 620 KB
- Web fonts (woff2): 110 KB
- Third-party scripts: 240 KB
- Video poster + preview: 150 KB
View the data as a table
| Segment | Value | Share |
|---|---|---|
| HTML document | 45 KB | 2% |
| CSS bundle | 68 KB | 4% |
| JavaScript bundle | 512 KB | 27% |
| Hero image (WebP) | 180 KB | 9% |
| Below-fold images | 620 KB | 32% |
| Web fonts (woff2) | 110 KB | 6% |
| Third-party scripts | 240 KB | 12% |
| Video poster + preview | 150 KB | 8% |
Source: worked example from this article.
On this page, the largest single category is below-fold imagery — exactly where lazy-loading and modern formats yield the biggest wins. The next-largest is JavaScript, where code-splitting and tree-shaking typically cut 30–50%.
Compressed vs. Uncompressed Sizes
Audits measure transfer size, not resource size. A 600 KB JavaScript file served with Brotli compression might transfer as 150 KB — that 150 KB is what counts toward the total the audit scores. This is why text compression and image format choice matter so much: they shrink the transfer size without changing the rendered output.
How to Check Your Page's Byte Weight#
Several tools surface Total Byte Weight, broken down by resource type and origin:
- Greadme Page Audit — surfaces Total Byte Weight alongside Core Web Vitals, breaks the payload down by resource type, and pairs each oversized asset with an AI-generated fix.
- Greadme Site Audit — measures Total Byte Weight across every indexable page on your site, so you can pinpoint which templates (product pages, article pages, listing pages) are dragging your CWV down.
- Chrome DevTools → Network tab — disable cache, reload, and read the "transferred" total at the bottom of the panel. Sort by Size to find the biggest individual offenders.
- web.dev & Google Search Console — Search Console's Core Web Vitals report uses real-user (CrUX) data, while web.dev guidance ties byte-weight audits to LCP and TBT thresholds.
9 Proven Ways to Reduce Total Byte Weight#
1. Convert Images to WebP or AVIF
Modern formats are 25–50% smaller than equivalent JPEG/PNG at the same visual quality. AVIF is even smaller than WebP for photos but has slightly less browser support — use the <picture> element to ship AVIF first with a WebP fallback.
<picture>
<source type="image/avif" srcset="hero.avif" />
<source type="image/webp" srcset="hero.webp" />
<img src="hero.jpg" alt="Hero image" width="1200" height="630" />
</picture>2. Use Responsive Images with srcset
Don't ship a 1920px-wide hero image to a 375px phone. srcset + sizes lets the browser pick the smallest file that still looks sharp at the visitor's screen size and DPR.
<img
src="hero-1200.webp"
srcset="hero-400.webp 400w,
hero-800.webp 800w,
hero-1200.webp 1200w,
hero-1920.webp 1920w"
sizes="(max-width: 600px) 400px,
(max-width: 1024px) 800px,
1200px"
alt="Hero image"
width="1200" height="630" />3. Lazy-Load Below-the-Fold Media
Images and iframes that aren't visible on first paint should not be in the initial transfer. Native lazy-loading is one attribute and ships in every modern browser.
<img src="below-fold.webp" loading="lazy" decoding="async"
width="800" height="450" alt="Product detail" />
<iframe src="https://www.youtube.com/embed/..." loading="lazy"
width="560" height="315" title="Demo video"></iframe>4. Code-Split JavaScript by Route
If a visitor lands on the homepage, they shouldn't download the checkout bundle, the admin bundle, or the rich-text editor. Dynamic imports load code on demand.
// Load the heavy editor only when the user clicks "Edit"
button.addEventListener('click', async () => {
const { mountEditor } = await import('./editor');
mountEditor(target);
});5. Set a Bundle Size Budget in Your Bundler
Make oversized bundles fail the build, not the user. Webpack, esbuild, and Vite all support asset-size warnings or hard limits.
// webpack.config.js
module.exports = {
performance: {
maxAssetSize: 250 * 1024, // 250 KB per asset
maxEntrypointSize: 400 * 1024, // 400 KB per entry
hints: 'error', // fail the build
},
};6. Tree-Shake CSS and Drop Unused Rules
Most sites ship 60–90% unused CSS — leftovers from utility frameworks and component libraries. Build-time tools like PurgeCSS (or Tailwind's built-in JIT) emit only the classes you actually use.
7. Subset and Self-Host Web Fonts
A full multi-weight font family can be 300+ KB. Subset to the characters you need (Latin only, no extended Cyrillic), use woff2 exclusively, and ship the file from your own origin so it shares the page's HTTP/2 connection.
@font-face {
font-family: 'Inter';
src: url('/fonts/inter-latin-400.woff2') format('woff2');
font-weight: 400;
font-display: swap;
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC;
}8. Audit and Cull Third-Party Scripts
Tag managers, A/B testing tools, chat widgets, and analytics each add anywhere from 30 KB to 250 KB. Every quarter, list every third-party request the page makes and ask: "Does this earn its byte cost?" If the answer is no, drop it.
9. Enable Brotli (or gzip) on Text Resources
Brotli typically shrinks HTML/CSS/JS by 70–80%. Most modern web servers (Nginx, Apache) and CDNs support Brotli with one toggle. Combined with HTTP/2 or HTTP/3 (which adds header compression on top of body compression), this is the highest-leverage fix on most sites.
Common Byte-Weight Problems and Fixes#
Problem: Hero Image Shipped at Full Resolution
What's happening: A 1920×1080 JPEG hero (often 800 KB+) is sent to every device, including 375px phones.
Fix: Convert to WebP or AVIF, generate four width variants (400/800/1200/1920), and serve via srcset + sizes. Typical savings: 70–85% on mobile.
Problem: Single Massive JavaScript Bundle
What's happening: Every page downloads the same 800 KB bundle even when only 40 KB is used on the current route.
Fix: Enable route-level code splitting (built into Next.js, Nuxt, SvelteKit, Astro) and lazy-import heavy widgets (rich-text editors, charts, date pickers) only when triggered.
Problem: Auto-Playing Video on Page Load
What's happening: A background hero video starts buffering immediately, costing 1–3 MB before the user has even scrolled.
Fix: Replace with an optimized poster image and require a user click to play. If autoplay is essential, use preload="none" and a low-bitrate WebM/AV1 source.
Problem: Tag Manager Loading Dozens of Scripts
What's happening: A single tag-manager snippet pulls in 8–15 third-party scripts (analytics, A/B testing, chat, retargeting), each adding 50–200 KB.
Fix: Audit every tag, deferred-load non-critical ones, and consider server-side tagging so the third parties don't ship code to the browser at all.
Total Byte Weight Thresholds at a Glance#
Use this table as a quick reference when reviewing audit results:
| Tier | Compressed Transfer Size | Typical Experience (4G) | Typical Experience (3G) |
|---|---|---|---|
| Best-in-class | < 1,000 KB | Fast load, LCP ≤ 2.5 s likely | Usable, LCP often under 4 s |
| Audit score 90 and above | 1,000 KB – about 2,667 KiB | Acceptable on most devices | Borderline; LCP risk |
| Audit score 50 – 89 | 2,667 – 4,000 KiB | LCP delays likely | Slow; bounce risk high |
| Audit score below 50 | > 4,000 KiB | Visible delay before content | Often unusable |
- Good: up to 2.6 MB
- Needs improvement: 2.6 MB to 3.9 MB
- Poor: over 3.9 MB
- Greadme median homepage (desktop): 1.9 MB
Source: Lighthouse 13.4.1, core/audits/byte-efficiency/total-byte-weight.js (p10 = 2,667 KiB, median = 4,000 KiB); Greadme Page Audit, 89 desktop audits May–Sep 2026.
FAQ#
What is a good Total Byte Weight?
Performance audits score compressed transfer size on a curve: about 2,667 KiB scores 90, and 4,000 KiB scores 50. Best-in-class sites stay under 1,000 KB. The web median (per the HTTP Archive Web Almanac, 2024) is around 2.0 MB on mobile and 2.6 MB on desktop — meaning the typical page on the internet today already carries at least twice the best-in-class budget.
Is Total Byte Weight a Google ranking factor?
Not directly — but it strongly influences metrics that are ranking factors. Heavier pages have slower LCP, FCP, and TTI, and LCP is a confirmed Core Web Vital used in ranking. Reducing byte weight is one of the most reliable ways to improve Core Web Vitals across the board.
Does the threshold apply to compressed or uncompressed size?
Compressed (transfer) size — the number of bytes that actually move across the network. A 600 KB JavaScript file served with Brotli might transfer as 150 KB, and only that 150 KB counts toward the total the audit scores. This is why enabling text compression is one of the highest-leverage fixes.
Why has the web median page weight grown so much?
HTTP Archive data shows median page weight has grown from ~1.2 MB in 2017 to over 2.3 MB in 2024. The two biggest drivers are JavaScript bundle growth (frameworks, analytics, A/B testing, personalization) and higher-resolution imagery for retina displays. Most sites compensate by shipping the largest image variant to every device — which is exactly what responsive images are designed to prevent.
Which resource type usually contributes the most?
On most consumer sites: images, at 40–55% of total weight. JavaScript is usually second at 20–30%, then video, fonts, CSS, and HTML. Third-party scripts (analytics, ads, embeds) often span all of those categories and can account for 20–40% of total requests by themselves.
Does Total Byte Weight matter for AI search engines?
Indirectly, yes. AI-driven systems (Google AI Overviews, generative answer engines) preferentially cite pages that already rank well in traditional search. A bloated page hurts Core Web Vitals → hurts rankings → reduces your chance of being chosen as a citation. Lean, fast pages compete better in both surfaces.
How often should I re-measure?
Treat byte weight as a budget that drifts every release. Set a CI check using your bundler's performance.maxAssetSize for JavaScript, run Greadme Page Audit on key templates after every meaningful release, and audit third-party scripts at least quarterly. Drift is much cheaper to catch in week one than in month six.
Conclusion#
Total Byte Weight is the most honest performance metric you have — it's just bytes, and bytes don't lie. Keep the compressed total well under the audit's 2,667 KiB line — ideally under 1,000 KB — and most other Core Web Vitals follow naturally; go heavier and every other optimization fights uphill.
The biggest wins come from three places: modern image formats with responsive srcset, route-level JavaScript code-splitting, and Brotli/gzip on every text resource. Run Greadme Page Audit to see exactly which assets are pushing your page over the threshold and ship a fix in one PR.
