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.
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
A single page can easily make 40+ external requests. Each one consumes budget.
“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.”
How to reduce external fetches
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.
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.