SPOKE 04 · BYTE-LEVEL SEO

Every external file linked from your page (script, stylesheet, font, image) consumes its own fetch budget. Cross the threshold and WRS quietly skips the rest. Most sites have no idea this is happening.

When Google fetches your HTML, that’s one budget. When WRS renders the page, every external resource it has to download (CSS, JS, fonts, third-party widgets) consumes a separate fetch quota. Once that quota is exhausted, additional resources are dropped, even if your bytes are under 2MB.

CONFIRMED BY GOOGLE · MARCH 31, 2026

Google directly confirms separate fetch budgets

“Every referenced resource in the HTML (excluding media, fonts, etc) is fetched by WRS with its own separate per-URL byte counter, not counting against the parent page’s 2MB budget.”

Google Search Central, “Inside Googlebot,” March 31, 2026

This is the single most under-appreciated detail in modern technical SEO. Two consequences flow from it:

  • Optimising your parent HTML to stay under 2MB does not save your external resources. Each linked JS or CSS file still has its own byte limit, and if any one of them exceeds it, the render of that resource is truncated, potentially breaking the entire page.
  • A single heavy bundle is more dangerous than many small ones, up to a point. One JS file at 5MB will be truncated in the middle. But making 60 small fetches exhausts WRS’s per-render fetch budget. The sweet spot is small numbers of small bundles.

How fetch budgets work

For each URL Google decides to render, WRS gets a limited number of subresource requests it can make and a finite time window to complete them. The exact numbers fluctuate with site authority and server response times, but the principle is constant: the more external dependencies your page has, the higher the risk that one or more critical files never get fetched.

What competes for the fetch budget

📦

JavaScript bundles

Main bundle, vendor bundle, route-level chunks, lazy-loaded components, every separate JS file is a separate fetch.

🎨

External CSS

Framework styles, plugin styles, custom styles, third-party widget styles, each linked stylesheet costs one fetch.

🔤

Web fonts

Each font file from Google Fonts, Adobe, or self-hosted directories. A page with 6 font variants makes 6 fetches.

🌐

Third-party widgets

Chat tools, review widgets, social embeds, analytics, each loads its own JS and CSS, often from external domains.

📡

XHR / fetch API calls

JS-initiated API calls for reviews, recommendations, pricing, counted as fetches and timed.

🖼️

Above-the-fold images

Each hero, logo, product image, and icon is a separate request. Image CDNs help speed but still count.

A typical WordPress page’s external requests

jQuery + WordPress core JS (8 files)

Theme + plugin CSS (12 files)

Web fonts (5 variants)

Third-party trackers (8 scripts)

Above-the-fold images (15 requests)

A single page can easily make 40+ external requests. Each one consumes budget.

Apurv Singh

PRACTITIONER NOTE

“I audited a luxury jewellery site running on WordPress with 23 active plugins. Every plugin enqueued at least one CSS and one JS file on the front-end. The category pages were making 67 external requests before any product image loaded. We disabled 9 unused plugins, consolidated 5 plugin stylesheets into a single critical CSS file, and lazy-loaded 4 third-party widgets. Indexed page count went from 312 to 1,847 in 6 weeks.”

Apurv Singh, Founder HQ Digital

How to reduce external fetches

01
Audit your plugin stack
Disable any plugin that isn’t core to revenue. Each one likely adds 2 to 5 fetch requests per page.

02
Bundle and concatenate
Use a caching plugin or build step to combine CSS and JS files into 2 to 3 bundles each.

03
Self-host fonts
Google Fonts and Adobe Fonts add DNS lookups, TLS handshakes, and HTTP overhead. Move to your own domain.

04
Defer third-party trackers
Load Pixel, GA, Hotjar, and other trackers after page load with defer or async attributes.

05
Use CSS sprites for icons
15 separate icon requests can become 1 sprite. SVG sprites are even better for retina-ready rendering.

06
Inline critical CSS
First-paint CSS can sit inline in the head. Saves a fetch and accelerates render in WRS.

How to diagnose fetch issues

Use the Network tab in DevTools

Reload the page with cache disabled. At the bottom you’ll see total request count. If you’re over 40, you’re at risk. Sort by size to find heavy offenders and by time to find slow ones.

Compare your DevTools to “View Crawled Page”

If your local page shows content from JS that’s invisible in Search Console’s Crawled Page view, your fetch budget is exhausted in WRS. Identify which external resource isn’t being fetched.

CONTINUE THE SERIES

Next: Server Performance and Crawl Rate

A slow server quietly throttles how often Google can crawl you. Here’s the relationship between TTFB and crawl quota.

Read Spoke 05 →