Blog
Smart SEO Blog

Crawl Budget Optimization for Large Websites

This article was written, optimized, and published automatically by Smart SEO — the content and search platform. Get started →
Crawl Budget Optimization for Large Websites
In this article

Crawl budget optimization means removing the low-value URLs that waste Googlebot's time so it reaches your important pages sooner and more often. On a site with hundreds of thousands of URLs, that usually comes down to three fixes: control faceted navigation, clean up redirects and errors, and keep your server fast. The rest is refinement.

Small sites can mostly ignore this topic. Large catalogs, marketplaces, publishers and classifieds sites cannot. Below is how crawl budget actually works, how to tell whether you have a problem, and the practical steps that make a measurable difference.

What Is Crawl Budget and How Does Google Calculate It?

Crawl budget is the number of URLs Googlebot can and wants to crawl on your site in a given period. Google calculates it from two inputs. The crawl capacity limit is how hard it can hit your server without slowing it down. Crawl demand is how much it wants your content, based on popularity and freshness.

Both halves matter. Think of it this way.

Crawl capacity limit rises when your server responds quickly and consistently, and drops when Googlebot sees timeouts, 5xx errors or slow responses. Google's own documentation describes this as a self-adjusting system. Your server essentially sets the ceiling.

Crawl demand depends on how popular your URLs are, how stale Google's copy has become, and site-wide events like a migration, which can temporarily spike demand. A product page that earns links and traffic gets revisited far more often than an orphaned filter page from 2019.

Here's the part many marketers miss: a fast server does not automatically mean more crawling. If demand is low, Google simply won't use the extra capacity. So the job has two sides. Make capacity generous, then make sure demand is concentrated on URLs you actually want indexed rather than spread across millions of near-duplicates.

One more detail worth knowing. Google retired the crawl rate limiter tool in Search Console in early 2024, and Googlebot ignores the crawl-delay directive in robots.txt. If you need Google to slow down in an emergency, returning 503 or 429 status codes temporarily is the supported method. Don't leave those in place for more than a day or two, or pages may start dropping.

Does Your Site Actually Have a Crawl Budget Problem?

Probably not, if you run a few thousand pages. Google's large site owner's guide says crawl budget is mainly a concern for sites with roughly a million or more unique pages that change moderately, or around 10,000+ pages that change daily. A third group also qualifies: sites with a large share of URLs stuck as "Discovered – currently not indexed" in Search Console.

That last signal is the one I trust most. It means Google knows a URL exists but hasn't bothered fetching it yet.

Look for these symptoms:

  • New products or articles take weeks to appear in search, while competitors' equivalents show up within days.
  • The Page indexing report shows a steadily growing pile of discovered-but-not-crawled URLs.
  • Updated prices, stock status or headlines keep showing stale versions in snippets.
  • Crawl Stats show Googlebot spending most requests on parameter URLs, redirects or 404s.

If none of that sounds familiar, your effort is better spent on content quality and links. Crawl budget work won't rescue thin pages; it only helps good pages get found faster. A common trap is blaming crawl budget for what is really a quality problem. When Google crawls a page and chooses not to index it ("Crawled – currently not indexed"), budget isn't your bottleneck. The page itself is.

For broader context on how crawling fits with ranking factors, the definitive 2026 guide to search engine optimization covers the full pipeline from discovery to ranking.

Finding Crawl Waste With Crawl Stats and Log Files

You can't fix waste you haven't measured. Start with the free data, then move to logs.

Search Console Crawl Stats

Open Settings, then Crawl stats. You'll see total requests, average response time and breakdowns by response code, file type, purpose (discovery versus refresh) and Googlebot type. Two things deserve immediate attention: the share of requests returning anything other than 200, and average response time creeping upward. The report only samples hosts and shows 90 days, so treat it as a dashboard, not the full truth.

Server log analysis

Logs are where real answers live. Export at least 30 days of access logs and filter to Googlebot. Tools like Screaming Frog Log File Analyser, Botify, JetOctopus or a simple BigQuery setup will all do the job. Then group requests by URL pattern: product pages, category pages, filtered URLs, internal search, pagination, static assets.

What nobody tells you the first time: a good chunk of "Googlebot" traffic in raw logs is fake. Scrapers spoof the user agent constantly. Verify hits with a reverse DNS lookup, or check against Google's published IP ranges, before you draw conclusions. I've seen teams panic about crawl volume on junk URLs that turned out to be a scraper wearing a Googlebot costume.

Once the data is clean, compare two lists: URLs Googlebot crawls most and URLs that drive revenue or traffic. The gap between them is your waste. On large ecommerce sites, it's common to find parameterized filter combinations soaking up a far bigger share of crawl than the core category and product pages combined.

If you're still choosing a crawler or log platform, this breakdown of how to choose the right SEO tools platform helps you match tooling to site size.

Taming Faceted Navigation and URL Parameters

Faceted navigation is the biggest crawl sink on most large sites. Full stop.

A category with ten filters, each with several values, can generate millions of URL combinations. Add sort order, view mode and pagination, and the number becomes effectively infinite. Googlebot will happily keep following those links because each one technically looks like a new page.

My recommended approach, in order of preference:

  • Decide which facets deserve indexing. "Women's running shoes" filtered by brand may have real search demand. Filtered by "sort: price low to high" does not. Keep a short allowlist of indexable facet combinations, usually one or two filters deep.
  • Block the rest in robots.txt. Disallow patterns like ?sort=, ?view= and multi-filter combinations. This is the only method that actually stops the fetch, which is what saves budget.
  • Stop linking to junk. Render non-indexable filters with elements that aren't crawlable links, or load them on interaction. If Googlebot never discovers the URL, it never queues it.
  • Keep parameter order consistent. ?color=red&size=9 and ?size=9&color=red are two URLs to a crawler. Normalize them server-side.

A frequent mistake is relying on noindex or canonical tags alone. Both require Google to crawl the page first to see the directive, so they help indexing but do little for budget. Canonicals are also hints, not commands. Use them for consolidation, and use robots.txt for crawl control.

One caution with robots.txt: blocked URLs can still be indexed without content if they're heavily linked. That's another reason to cut internal links to junk rather than just blocking it. Also, never block a URL you're trying to noindex; Google won't see the tag.

Cleaning Up Redirects, Soft 404s and Duplicate Content

Every redirect hop costs a request. Every soft 404 wastes a fetch on a page that says "nothing here" while returning 200 OK.

Start with redirect chains. After several site migrations, it's normal to find URLs that bounce through three or four hops before landing. Google follows up to ten hops, but each one is a separate request, and long chains slow down discovery of the final URL. Crawl your site with Screaming Frog or Sitebulb, export all redirect chains, and update internal links to point directly at the final destination. Then collapse the chains server-side.

Soft 404s are sneakier. Common sources:

  • Out-of-stock product pages that show an empty template.
  • Internal search results pages with zero results.
  • Expired listings on classifieds or job sites that still return 200.
  • Category pages emptied after a range was discontinued.

For permanently gone items, return a real 404 or 410. Google says these don't hurt your crawl capacity, and over time it requests them less. For temporarily unavailable products, keep the page live with useful content, related items and a restock note. That's a page worth crawling.

Duplicate content needs consolidation too. HTTP versus HTTPS, trailing slashes, uppercase paths, session IDs and tracking parameters like utm_source all create duplicates. Pick one canonical format, 301 everything else to it, and make sure internal links and sitemaps only reference that version. Tracking parameters should never appear in internal links. I still find them in navigation menus on enterprise sites far more often than I'd like.

Retailers with deep catalogs face these issues at scale. The guide on content optimization for e-commerce product pages pairs well with this cleanup, since it covers what to do with thin and seasonal product URLs.

How Server Performance Shapes Crawl Capacity

Speed is the lever that raises your ceiling. When responses are fast and stable, Googlebot opens more parallel connections. When they slow down or throw errors, it backs off, sometimes for days.

Notice the metric here. Googlebot cares about server response time for the HTML request, not your Core Web Vitals score. A page can have a mediocre LCP for users and still be cheap to crawl if the server returns the document quickly.

Practical steps that pay off:

  • Cache HTML at the edge. A CDN like Cloudflare or Fastly serving cached pages cuts response time dramatically for bot traffic.
  • Watch the Crawl Stats host status. Any red flags for robots.txt fetching, DNS resolution or server connectivity need fixing first. If robots.txt fails to load, Google may pause crawling the site entirely.
  • Support conditional requests. Returning 304 Not Modified for unchanged pages, based on ETag or Last-Modified headers, lets Google confirm freshness cheaply.
  • Reduce heavy resources. Fewer render-blocking scripts and consolidated CSS mean fewer fetches when Google renders a page.

A gotcha I've hit more than once: aggressive bot protection. Firewall rules or rate limiting configured for scrapers sometimes throttle verified Googlebot too, producing intermittent 403s or 429s. Crawl rate drops, and nobody connects it to the security change made two weeks earlier. Whitelist verified Google IP ranges and review WAF logs whenever crawl volume dips suddenly.

Once waste is reduced, you want demand flowing toward priority pages. Two signals do most of the steering.

XML sitemaps

Sitemaps should list only canonical, indexable URLs that return 200. No redirects, no noindexed pages, no parameter variants. Split large sitemaps by page type (products, categories, articles) so you can see indexation rates per segment in Search Console. Keep each file under the 50,000-URL and 50MB uncompressed limits.

Use lastmod honestly. Google has said it uses this value when it's consistently accurate. If your CMS stamps today's date on every URL daily, Google learns to ignore it, and you lose a valuable freshness signal.

Internal linking

Internal links are the strongest crawl prioritization tool you control. Pages linked from the homepage and main navigation get crawled more often than pages buried six clicks deep. Orphaned pages, linked from nowhere, may only be found via sitemaps and crawled rarely.

Audit click depth across your crawl. Your most valuable templates should sit within three clicks of the homepage. Hub pages, "new arrivals" modules and related-product blocks are reliable ways to surface fresh content quickly. For a structured approach, see how to build an internal linking strategy that works.

One honest opinion: I'd prioritize fixing internal links over fiddling with sitemap priority values every time. Google largely ignores the priority and changefreq fields anyway.

JavaScript Rendering and Its Hidden Crawl Cost

JavaScript-heavy sites pay twice. Google fetches the HTML, then queues the page for rendering, which requires fetching scripts, API responses and other resources. Each of those resource requests draws on the same crawl capacity.

If key content or links only appear after client-side rendering, discovery slows down. Google can render JavaScript well these days, but delays still happen, and links injected late may be found later than links in the initial HTML.

The fix I recommend for large sites is server-side rendering or static pre-rendering for anything you want indexed. Frameworks like Next.js and Nuxt make this straightforward. At minimum, make sure navigation links are real <a href> elements in the initial response, not click handlers on divs.

Also watch API endpoints. If your front end calls dozens of uncacheable JSON endpoints per page, Googlebot fetches those too. Consolidate calls and cache responses where possible. Teams running React or Vue storefronts will find more detail in these single page application SEO tips.

Making Crawl Efficiency a Habit

Crawl budget optimization isn't a one-time project. New filters launch, migrations add redirects, and developers ship tracking parameters into navigation without telling anyone. Set a monthly review of Crawl Stats and a quarterly log analysis, and add crawl checks to your release process so problems get caught before Googlebot finds them. Do that, and your important pages will consistently be discovered first.

Frequently Asked Questions

Does noindex save crawl budget?

Not much. Google must crawl a page to see the noindex tag, so the fetch still happens. Over time Google may crawl long-term noindexed pages less frequently, but the effect is slow. If your goal is reducing crawl volume on low-value URLs, block them in robots.txt and remove internal links to them instead.

How long does crawl budget optimization take to show results?

Most sites see changes in Crawl Stats within two to six weeks after blocking major waste and fixing server errors. Indexing improvements for new pages often follow within a similar window. Large shifts in crawl demand take longer, because they depend on Google relearning which sections of the site are popular and frequently updated.

Do 404 errors hurt my crawl budget?

Real 404 and 410 responses don't reduce your crawl capacity, according to Google. They do consume requests while Google confirms the pages are gone, but it gradually checks them less often. The bigger problem is internal links pointing at 404s, which keep sending Googlebot to dead ends. Fix those links at the source.

Can I increase my crawl budget by asking Google?

No form exists for requesting more crawling. You raise capacity by improving server speed and reliability, and you raise demand by publishing content people link to and visit. Google's former option to report a crawl problem only applied when Googlebot was crawling too little because of a server issue on its side.