What Is Total Byte Weight and How to Reduce It?

Saar Twito9 min read
Saar Twito
Saar TwitoFounder & SEO Engineer

Hi, I'm Saar - a software engineer, SEO specialist, and lecturer who loves building tools and teaching tech.

View author profile →

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)
A 1,925 KB product page, by resourceThe worked example above, as a share of the total 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
View the data as a table
SegmentValueShare
HTML document45 KB2%
CSS bundle68 KB4%
JavaScript bundle512 KB27%
Hero image (WebP)180 KB9%
Below-fold images620 KB32%
Web fonts (woff2)110 KB6%
Third-party scripts240 KB12%
Video poster + preview150 KB8%

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:

TierCompressed Transfer SizeTypical Experience (4G)Typical Experience (3G)
Best-in-class< 1,000 KBFast load, LCP ≤ 2.5 s likelyUsable, LCP often under 4 s
Audit score 90 and above1,000 KB – about 2,667 KiBAcceptable on most devicesBorderline; LCP risk
Audit score 50 – 892,667 – 4,000 KiBLCP delays likelySlow; bounce risk high
Audit score below 50> 4,000 KiBVisible delay before contentOften unusable
Total byte weight: the thresholds on one axisLighthouse lab scoring points: 90 at 2,667 KiB, 50 at 4,000 KiB.

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.