CRAWL BUDGET · REPO-FIRST FIELD NOTES
Crawl Budget: When It Actually Matters (and When It Doesn't)
Google's own documentation tells most sites not to worry about crawl budget — then the rest of page one teaches them to optimize it anyway. Here is how to tell whether it actually binds your site, and the four levers to pull if it does.
Search “crawl budget” and the results page performs a small comedy. The top organic result is Google’s own documentation, which opens by telling most readers to close the tab: if your site has fewer than a few thousand URLs, it will be crawled efficiently, and there is nothing here for you to optimize. Every guide ranked underneath it teaches those same readers to optimize it anyway — prune your 40-page blog, block your CSS, fret over a “budget” you could not exhaust if you tried. The result is a generation of small-site owners doing crawl-budget surgery on sites Google was never struggling to crawl, sometimes cutting things that were actually helping.
This guide takes Google at its word. Crawl budget is real, it matters enormously — for a specific class of site — and for that class there are exactly four levers worth pulling: killing crawl traps, fixing internal linking, sitemap hygiene, and server health, diagnosed from Crawl Stats and server logs rather than from vibes. For everyone else, the honest answer is that your problem is almost certainly something cheaper to fix. This is the crawl layer of our agentic SEO pillar, and a companion to the broader technical SEO audit guide — same rule applies here as there: no fix is done until Search Console says it did something.
What crawl budget actually is
Crawl budget is not a quota Google assigns you like a phone plan. It is the intersection of two forces Google documents explicitly. The first is the crawl capacity limit: the maximum rate at which Googlebot will fetch your pages without hurting your server. It is elastic — respond fast and healthy and the limit rises; respond slowly, or with server errors, and Googlebot backs off. Your infrastructure sets this ceiling, not your SEO.
The second is crawl demand: how much Google wants to crawl your site, driven by how many URLs it knows about, how popular they are, and how stale its copies have become. A site that publishes daily and gets linked to builds demand; a site of a thousand static pages that never change does not need recrawling, and Google will not waste the visits. Crawl budget is whichever of the two runs out first — and this is the detail the panic-guides skip: for a small site, neither one ever runs out. The capacity limit is never approached and the demand is easily satisfied. There is no budget to optimize because nothing is being rationed.
When crawl budget actually matters: Google’s own thresholds
Google’s large-site crawl budget guide names its audience in numbers, which almost no one quotes because the numbers disqualify almost everyone. The guide is written for sites with over a million unique pages whose content changes weekly, or over ten thousand unique pages whose content changes daily — plus one symptom-based case: sites where Search Console classifies a large share of URLs as “Discovered — currently not indexed,” meaning Google knows the pages exist and has chosen not to fetch them yet. The 2017 Googlebot crawl-budget post from Google’s search team draws the floor even lower: a few thousand URLs or fewer, crawled efficiently, nothing to worry about — and if your new pages tend to get crawled the same day you publish them, stop reading.
Who actually clears the bar? E-commerce catalogs with faceted navigation, classifieds and job boards with high listing churn, publishers with deep archives and daily output, and any platform that generates pages programmatically — a locale × category × filter matrix compounds into millions of URLs fast. The common thread is not raw page count but URL space that grows faster than value. A 500-page site with clean routes has no crawl-budget problem by definition. A 50,000-product store whose filters mint a new URL per combination can starve its own money pages while Googlebot wanders the combinatorics.
The small-site panic, debunked
The panic playbook is recognizable on sight: a 200-page blog blocking its CSS and JS to “save budget,” noindexing pagination, disallowing category pages, pruning posts that were quietly earning long-tail clicks. Every one of those moves has a real cost and none has a crawl benefit at that scale. Blocking rendering resources makes pages harder for Google to evaluate. And the noindex trick does not even do what its users think: Googlebot has to crawl a page to see the noindex tag, so it saves no crawl at all — Google’s crawl-budget documentation says this outright.
When a small site’s pages are not being indexed, the constraint is almost never crawl budget. It is crawl demand — Google fetched the page, evaluated it, and declined. That is a quality and relevance problem wearing a plumbing problem’s clothes.
The distinction matters because the two problems have opposite fixes. A budget problem is fixed with subtraction: fewer junk URLs competing for fetches. A demand problem is fixed with addition: stronger pages, real internal links, evidence the content is worth storing. The small-site owner who prunes and blocks is applying the large-site cure to the small-site disease — and if what is actually being rationed is attention in an AI-mediated results page rather than Googlebot fetches, the fix lives in zero-click SEO territory, not robots.txt.
Diagnose before you optimize: Crawl Stats and server logs
If you might genuinely have a crawl-budget problem, the diagnosis is observable — nobody should be optimizing crawl on intuition. Search Console’s Crawl Stats report (under Settings, easy to miss) is the free first instrument: total crawl requests over 90 days, average response time, and three breakdowns that carry most of the signal. By response — a meaningful share of fetches spent on 404s, redirects, or server errors is budget burned on nothing. By purpose — discovery versus refresh tells you whether Google is finding new URLs or re-reading old ones. By file type — thousands of fetches of parameterized junk show up here before they show up anywhere else.
Server logs are the second instrument, and past a certain size the decisive one: the only record of every URL Googlebot actually requested, not a sample. The question to ask the logs is brutal and simple — what share of Googlebot’s requests hit URLs I want indexed? On large sites the answer is routinely a minority. On a site we audited, the crawl was dominated by filter-combination URLs no searcher would ever want, while genuinely new product pages sat undiscovered for weeks — the crawl-budget problem in one sentence: Google worked hard and fetched the wrong things.
The four levers that actually move crawl budget
For sites past the thresholds, four levers do nearly all the work, in descending order of impact. Each one should leave the diagnosis as a task with a metric committed in advance — the same proof contract every fix carries in a closed-loop SEO system.
Kill crawl traps
A crawl trap is any pattern that mints URLs faster than they can carry value: faceted navigation that turns every filter combination into an address, session IDs and tracking parameters in internal links, infinite calendar pagination, and sort orders that duplicate an entire category under a new query string. Google’s own list of crawl-wasting URL types is led by exactly these. The fix hierarchy: stop generating the URLs where possible, stop linking to them where not, and disallow the residual patterns in robots.txt — which, unlike noindex, actually prevents the fetch. One template-level trap outweighs a thousand individually pruned pages.
Fix internal linking
Crawl demand follows links. Pages buried five clicks deep, or reachable only through the sitemap, get crawled late and rarely; orphan pages effectively volunteer to be forgotten. The lever is architectural, not cosmetic: important pages within a few clicks of the home page, hub pages that concentrate internal links onto what should rank, and no internal links pointing at redirects, dead URLs, or parameterized duplicates — every such link is an instruction to Googlebot to spend a fetch on nothing.
Sitemap hygiene
The sitemap is a statement of what you want crawled, and most large sites let it rot into a lie: expired listings, redirected URLs, noindexed pages, thin duplicates. A sitemap Google has learned to distrust stops being a useful discovery signal. The standard is strict — canonical, indexable, 200-status URLs only, with accurate lastmod values, so that a changed page is a recrawl invitation and an unchanged one is not. On generated sites this is one template fix, not an editorial project.
Server health and response speed
The lever everyone forgets because it belongs to a different team: the crawl capacity limit is set by your server’s behavior. Sustained slow responses shrink it; 5xx errors and 429s make Googlebot back off outright — Google documents both. Faster responses raise the ceiling on every other lever. This is also where redirect chains and soft 404s live: each hop in a chain is a separate fetch, and a soft 404 is the worst of both worlds — budget spent and a low-quality signal recorded.

Repo-first: crawl traps are written in code
Here is what the crawl-first guides structurally miss: every crawl trap is a few lines of source code. The faceted-navigation trap is a route handler that accepts arbitrary parameter combinations and a template that links to them. The infinite calendar is a pagination component with no upper bound. The rotting sitemap is a sitemap generator querying the wrong set. A crawler shows you a hundred thousand symptomatic URLs; the repository shows you the five files that mint them — and the diff that stops it. If you or your agent can read the codebase, the crawl-budget audit is mostly file reads, exactly as argued in the repo-first audit method.
| Lever | Where it lives in the repo | Verify signal |
|---|---|---|
| Kill crawl traps | Route handlers, filter/param link templates, robots rules | Crawl Stats: junk-pattern fetches collapse; discovery share shifts to real URLs |
| Internal linking | Nav and hub components, link helpers, template link targets | Impressions on formerly deep or orphaned pages |
| Sitemap hygiene | Sitemap generator + the query that feeds it, lastmod source | Sitemap-submitted vs indexed converge; fresh pages crawled sooner |
| Server health | Caching and rendering paths, redirect config, error handling | Crawl Stats: average response time down, 5xx share down, total requests up |
The repo is also where the fix becomes exhaustive instead of statistical. Pruning junk URLs from a crawl export treats symptoms one at a time; changing the template that generates them treats every current and future instance in one commit. This asymmetry is why an agent working inside the actual codebase — reading routes, editing templates, opening a PR — beats a dashboard exporting findings for someone else to interpret.
Verify it: no crawl fix is done until Crawl Stats says so
Crawl-budget work has a property most SEO lacks: unusually fast, unusually direct feedback. Block a trap pattern and the fetch mix in Crawl Stats shifts within days — you can watch the junk share fall and the response-time average improve. That makes it indefensible to skip verification here, and yet the standard playbook does: the robots.txt change ships, the ticket closes, and nobody reads the report that would show whether Googlebot’s behavior actually changed.
The honest workflow commits the metric before the fix, in two stages. Stage one, mechanical: the Crawl Stats signal from the table above — did the crawl actually redistribute? Stage two, the one that justifies the work: did pages that were starved of crawl start earning impressions? That second reading needs roughly three weeks of Search Console data, the same physics as every verdict in the verified-causal-movement discipline — and it keeps the goalposts honest, because a crawl that redistributed without any page gaining visibility is an interesting null, not a win.
Crawl budget as folklore
A 200-page site blocks CSS, noindexes pagination, and prunes long-tail posts to "save budget" no one was spending. No baseline was read, no metric committed, no re-measurement scheduled. The work cannot be proven useless — which is the only reason it survives.
Crawl budget as diagnosis
Crawl Stats and logs read first. Verdict: either "no problem — crawled promptly, move on," or a named trap with a template-level fix, a robots rule, a Crawl Stats signal expected in days, and an impressions verdict read three weeks later. Confirmed, regressed, or inconclusive — written down either way.
Run this as a board rather than a project and the loop closes itself: the trap lands as a task with its expected impact and verify metric, the PR link records exactly what shipped, and the weekly monitor reads Search Console and writes the verdict. Crawl budget stops being a folklore topic and becomes what it always should have been — a measurable constraint that either binds your site or does not, with the answer in the data rather than in a blog post written for a site a thousand times your size.
The fastest way to find out which side of the threshold you are on is to look at your own numbers. A free SEO report connects your Search Console and shows where the real constraint sits — pages Google is not showing, pages shown but never chosen, and whether crawl is anywhere on that list. And if it is, and you would rather the whole loop ran itself — traps found in the source, fixes shipped as PRs, verdicts read from Crawl Stats and impressions — book a call and we will show you the board doing exactly that.
Frequently asked questions

Written by
Luke McCormackFounder, My Agentic SEO
SEO & Google specialist leading go-to-market and growth at My Agentic SEO.
More about LukePart of the cluster
Agentic SEO: What It Is and How an Agent Runs Your SEOLet the agent run the first stage on your real data
Connect your Google Search Console and get a free professional SEO report — diagnosed and prioritized on your actual site. It takes minutes.