Skip to content
Search & AI DiscoveryIntermediate8 min read

Crawling and Indexing Explained

Being crawled, being indexed, and ranking are three separate things. Most "we don't rank" problems are actually a failure at one of the first two.

Written by Daksh BathlaFounder — Technology, Product & Business
Published 4 August 2026 · Updated 11 August 2026

Four stages, not one

"We're not ranking" is almost never a ranking problem on a small site. It's usually a page that was never fetched, or was fetched and not stored. Those are different failures with different fixes, and treating them as one is why people spend months writing content that no engine has read.

What happens to a page, in order
StageWhat happensFails when
DiscoveryThe engine learns the URL existsNothing links to it and it's in no sitemap
CrawlingThe URL is fetchedrobots.txt blocks it, or the server errors
RenderingJavaScript is executed to see the final pageContent needs a script that failed or timed out
IndexingThe page is stored as a candidate resultIt's noindex, a duplicate, or judged too thin to keep
RankingIt's ordered against other candidates for a queryThis is the only stage that's about quality

Reading index states

A search console reports why each URL is or isn't indexed. The wording varies by engine, but the categories are consistent, and each points at a different fix.

Common states and what to do
StateMeansFix
Discovered, not crawledKnown but never fetchedUsually low priority — improve internal links to it
Crawled, not indexedFetched and judged not worth storingContent problem: thin, duplicated, or no clear purpose
Duplicate, engine chose a different canonicalIt found a near-identical page it prefersConsolidate, or set the canonical you actually want
Excluded by noindexYou told it not to indexIntentional? If not, find the stray tag or header
Blocked by robots.txtNot allowed to fetchUnblock — and remember a block prevents reading a noindex
Soft 404Returns 200 but looks like an error or empty pageReturn a real 404, or put content on it

The one worth dwelling on is "crawled, not indexed." It's the engine saying it read the page and decided storing it wasn't worth the disk. On a new site a handful of these is normal. Across most of your pages, it's a verdict on the content, and no technical fix will change it.

Crawl budget, and who it applies to

Crawl budget is the rough number of pages an engine will fetch from your site in a period. It's a function of how important your site seems and how fast your server responds.

When it does apply, the cause is almost always URL multiplication: filters and sort parameters producing thousands of near-identical pages. `?colour=blue&sort=price` and `?sort=price&colour=blue` are two URLs with one page behind them.

  • Disallow filter and sort parameters in robots.txt, so they're never fetched
  • Set a canonical on every filtered view pointing at the unfiltered page
  • Return real 404s for combinations that have no results, rather than an empty 200
  • Keep the server fast — a slow site is crawled less, which is a compounding penalty

Sitemaps in practice

A sitemap is a list of URLs you want indexed. It's a hint about discovery, not an instruction to index, and it doesn't override anything — a page in your sitemap that's blocked in robots.txt stays blocked.

  • Include only canonical, indexable URLs — a sitemap full of redirects and noindex pages is a contradiction the engine has to resolve, usually against you
  • Generate it from the same data the pages render from, so it can't go stale
  • Set `lastmod` honestly. Stamping today's date on every URL every day makes the field worthless and is treated as such
  • Split above 50,000 URLs, and use a sitemap index
  • Reference it from robots.txt and submit it in a search console
sitemap.ts
// Generated from the content collections, so a new lesson appears in// the sitemap without anyone remembering to add it.const learningRoutes = [  "/learning",  ...lessons.map((l) => `/learning/lessons/${l.slug}`),  ...dictionaryTerms.map((t) => `/learning/dictionary/${t.slug}`),];

Diagnosing a missing page, in order

  1. Search for the exact URL in the engineIf it appears, it's indexed and you have a ranking question, not an indexing one. Stop here.
  2. Fetch the URL yourself with JavaScript disabledIf the content is missing, the engine's first pass sees what you just saw.
  3. Check robots.txt and the page's meta robots tagTwo lines, ninety seconds, and the cause of a surprising share of these.
  4. Check the URL is in your sitemap and linked from somewhereAn orphan page with no internal links is a page the engine has little reason to reach or to value.
  5. Read the index state in a search consoleBy this point you've ruled out the mechanical causes, and the state tells you whether it's a duplicate or a content judgement.

Common mistakes

  • Treating "not ranking" and "not indexed" as the same problem
  • Optimising crawl budget on a two-hundred-page site
  • Putting noindex on a page that's also blocked in robots.txt, so the noindex is never read
  • Sitemaps containing redirects, 404s, and noindex URLs
  • Stamping every sitemap entry with today's date, which makes lastmod meaningless

Key takeaways

  • Discovery, crawling, rendering, indexing, and ranking are five stages that fail differently
  • "Crawled, not indexed" is a content verdict, not a technical bug
  • Crawl budget matters above a few thousand URLs, and almost never below
  • A sitemap is a discovery hint and a coverage diagnostic, not an indexing instruction

Try it yourself

Open your site's coverage report in a search console and compare submitted URLs against indexed ones. Read the reason attached to the largest excluded group — that one reason usually explains most of the gap.

TERMS USED HERE