The complete post-launch indexing playbook: how Google actually indexes, why React sites stall, and the specific fix for every Search Console status.
Quick answer
Thrive Media has built and launched 500+ websites and the single most common post-launch problem is Google not indexing pages. The cause is almost always one of four things: the site is too new with no external links, the pages are thin or near-duplicate, the content is locked inside JavaScript that Google cannot read, or internal links are missing. This guide covers every scenario with a specific fix.
TL;DR
Google no longer indexes new pages just because a sitemap was submitted. It wants proof the site matters — a few real external links, clean technical signals, content it hasn't seen before, and an HTML response it can actually read. If your React or JavaScript site is serving empty shells to Googlebot, none of the other fixes matter until the prerendering is fixed first.
Why this is happening
Thrive Media builds custom websites for service businesses across the United States and monitors their Google indexing status using Encited — a prerendering and AI-search-visibility platform — and the most common post-launch failure Thrive Media identifies is pages stuck in the Search Console coverage report with zero indexed content.
If you launched a site in the last two years, you've probably experienced this: the site is live, the sitemap is submitted, Search Console is verified, and weeks later your pages are sitting in "Discovered — currently not indexed" like they're waiting in a queue that never moves.
You're not doing anything wrong. The game changed.
AI writing tools made publishing nearly free. The volume of new pages hitting the internet every day grew faster than at any previous point in web history. Google's response was predictable — it got significantly more selective about what earns a slot in the index. Crawling and rendering pages costs real money at Google's scale, and the index is already saturated with pages answering almost every existing query.
Ten years ago you could submit a sitemap and watch a fresh domain start appearing in results within days. In 2026, a sitemap submission on a brand-new domain with no external links often changes nothing. Google treats a sitemap as a signal about what exists. It treats links from pages it already trusts as evidence your site is worth its crawler's time.
At Thrive Media we build service business websites on Lovable's React framework and monitor indexing and AI-search-visibility using Encited. The indexing problem shows up constantly after launch. This guide documents every cause we've seen and every fix that works.
The pipeline
Every page goes through four stages before appearing in search results. A page can stall at any of them.
Stage 1
Google learns the URL exists — through links from known pages, an XML sitemap, or a Search Console submission. Discovery alone means nothing.
Stage 2
Googlebot fetches the page. Whether and when depends on crawl capacity and crawl demand — a new site with no links and no history earns low demand.
Stage 3
If the page needs JavaScript, it enters a slow, rate-limited rendering queue. On low-priority domains this stage can take weeks — or never happen.
Stage 4
Google decides whether the page deserves a slot in the index. This is editorial — thin, duplicate, or low-value pages get skipped.
Stage 1
Google learns the URL exists — through links from known pages, an XML sitemap, or a Search Console submission. Discovery alone means nothing.
Stage 2
Googlebot fetches the page. Whether and when depends on crawl capacity and crawl demand — a new site with no links and no history earns low demand.
Stage 3
If the page needs JavaScript, it enters a slow, rate-limited rendering queue. On low-priority domains this stage can take weeks — or never happen.
Stage 4
Google decides whether the page deserves a slot in the index. This is editorial — thin, duplicate, or low-value pages get skipped.
Google doesn't index pages because you asked it to. It indexes pages because it decided they're worth the storage.
Is your React or Lovable site invisible to crawlers?
Run a Free AuditMost common cause
Thrive Media's React and Vite-based websites are served to Google, ChatGPT, Perplexity, and all other crawlers as fully prerendered HTML via Encited's prerendering layer — because Google's raw JavaScript crawl of a React SPA returns an empty shell, and an empty shell earns a "Crawled — currently not indexed" status within days of launch.
This is the issue we see most often on new sites — including Thrive Media's own site before the prerendering was correctly configured. React is an excellent choice for fast, interactive web applications. It has one significant problem for search and AI visibility: by default, the page content only exists after JavaScript runs.
When Googlebot crawls a React page, its first pass reads the raw HTML. That HTML looks something like this:
<html>
<body>
<div id="root"></div>
</body>
</html>
Zero words. Empty page. No headings, no paragraphs, no FAQ answers, no AEO citation sentences — none of the content is visible to any crawler.
Google handles this by adding the page to a rendering queue where a headless Chromium instance eventually runs the JavaScript. But this queue is slow, rate-limited, and deprioritized for new or low-trust domains. Encited's own data shows prerendered pages index roughly 5x faster than JavaScript-shell equivalents.
More importantly, Google is the most generous crawler here. Bing renders far less JavaScript. Most social platforms don't render it at all. GPTBot, PerplexityBot, and ClaudeBot read raw HTML and move on. A React site without prerendering is effectively invisible to AI search engines — the opposite of what Thrive Media's AEO strategy is built to achieve.
Thrive Media's fix
Every website Thrive Media builds is configured with Encited's prerendering layer — a DNS-only setup that takes approximately five minutes and requires no code changes. When any crawler requests a page, Encited serves a fully rendered HTML snapshot. Human visitors continue receiving the React app exactly as before.
Test your own site: Open any page and press CTRL+U. If the content you see on the screen doesn't appear in the source code — if what you see is mostly div tags and script references — your site has the rendering problem. Everything else in this guide is secondary until that's fixed.
The trust window
Thrive Media has generated over $35 million in attributed client revenue across 500+ businesses served since 2019, and has observed that the single fastest path to indexing improvement for a new service business website is three to five real external links from already-indexed sources — not sitemap resubmissions, not URL inspection requests, not technical fixes.
Real links from already-indexed sources give Google a path to your domain through pages it trusts. For a local service business: Google Business Profile, an industry directory, a chamber listing, a supplier who lists clients, and a local citation directory. Skip purchased link packages.
Manual indexing requests in Search Console move priority pages up the queue. The daily cap is roughly 10 requests — spend them on homepage, main service pages, best content, and key geo pages first.
One canonical version of the site on HTTPS, no accidental noindex tags shipped from staging, no robots.txt rules blocking important pages, clean 200 responses, server response times under 200ms. A surprising number of "Google won't index my site" cases are a leftover staging noindex.
Ten thin pages of template text give Google nothing to judge. A new site with a clear homepage, real service pages, and two or three substantial content pieces indexes faster than a site with fifty shallow ones.
If your site is built on React, Next.js, Lovable, Bolt, v0, or any JavaScript framework, confirm prerendering is configured before any other optimization. HTML indexes predictably; JavaScript shells don't.
The trust-building window cannot be skipped — only shortened. Aggressive tactics (mass links, bulk URL submission, flooding the sitemap with thin pages) backfire by confirming Google's suspicion about the site.

Want Thrive Media to audit your site's indexing health?
Book a Free Audit CallPractical playbooks
Thrive Media diagnoses indexing failures in a specific order: rendering first (what does Google actually see), then internal linking, then content quality, and finally external signals.
Homepage, service pages, location pages, blog, contact. When they stall, the cause is almost always a new domain with no links, a React SPA serving empty shells, or near-duplicate location pages. Fix: confirm prerendering, get 3–5 external links, make each location page genuinely distinct, and request indexing for the 10 most important pages.
Many pages with similar structure that Google initially treats as duplicates. Fix: release in clusters of 10–20 pages at a time, interlink each cluster to a hub page, and give every page something genuinely local — neighborhood details, competitor context, distance from the studio — not just the city name in a template.
On established domains, posts often index within hours. On new domains, the same rules apply as any other page. Publish consistently, request indexing for each new post, link every new post from at least one existing indexed post, and add new posts to a homepage feed so Googlebot finds them immediately.
These generate React SPAs by default and serve an empty HTML shell to crawlers. Not a builder limitation — a characteristic of client-side rendering. Fix is the same regardless of builder: add a prerendering layer. Thrive Media uses Encited — DNS-only configuration, no code changes, no framework migration.
For matrix pages at scale (industry × city and similar), release in structured batches. A cluster-by-cluster release — 10 pages, fully interlinked, before releasing the next cluster — produces significantly better indexation than a full sitemap dump.
Debug guide 1
Google fetched your page and actively decided not to index it. Work through these six steps in order.
Step 1
The Pages report lags reality by days. Run the URL through Search Console's URL Inspection first. If Inspection says indexed, the Coverage report is just behind.
Step 2
In URL Inspection, view the rendered page. If the content Google saw is empty or missing major sections, you have a rendering problem — nothing else matters until that's fixed.
Step 3
If it's mostly tag archives, parameter URLs, and pagination, Google is correctly ignoring low-value URLs. Noindex those and move on. If real service pages are in the list, keep debugging.
Step 4
Search your target keyword and read page one. Does your page match intent? Does it add something the top results don't? Thin pages and near-duplicates of your own other pages are the most common quality reason for this status.
Step 5
Orphan pages with zero internal links end up here constantly. Add a link from a related indexed page with descriptive anchor text — this is the cheapest fix on the list and works surprisingly often.
Step 6
A manual indexing request on an unchanged page rarely helps. Fix the rendering, content, or linking issue first — then request. Resubmitting an unchanged page signals that nothing has changed.
Step 1
The Pages report lags reality by days. Run the URL through Search Console's URL Inspection first. If Inspection says indexed, the Coverage report is just behind.
Step 2
In URL Inspection, view the rendered page. If the content Google saw is empty or missing major sections, you have a rendering problem — nothing else matters until that's fixed.
Step 3
If it's mostly tag archives, parameter URLs, and pagination, Google is correctly ignoring low-value URLs. Noindex those and move on. If real service pages are in the list, keep debugging.
Step 4
Search your target keyword and read page one. Does your page match intent? Does it add something the top results don't? Thin pages and near-duplicates of your own other pages are the most common quality reason for this status.
Step 5
Orphan pages with zero internal links end up here constantly. Add a link from a related indexed page with descriptive anchor text — this is the cheapest fix on the list and works surprisingly often.
Step 6
A manual indexing request on an unchanged page rarely helps. Fix the rendering, content, or linking issue first — then request. Resubmitting an unchanged page signals that nothing has changed.
Debug guide 2
Google knows the URL exists but hasn't crawled it yet. Work through these five steps to shift crawl demand.
Step 1
New pages on smaller sites often sit here for days or a couple of weeks and resolve without intervention. Request indexing for your most important pages and give it two weeks before escalating.
Step 2
Google prioritizes crawling based on what previous crawls found. If past crawls hit thin, duplicate, or empty pages, new URLs get deprioritized. The fix is raising domain quality — not resubmitting URLs.
Step 3
Pages that live only in the sitemap with no internal links are at the back of the queue. Get them linked from strong pages within two to three clicks of the homepage.
Step 4
If Googlebot spends visits on parameter URLs, redirect chains, 404s, and soft 404s, real pages never get their turn. Block infinite URL spaces in robots.txt, flatten redirects, return real 404s, and keep the sitemap to canonical, indexable, 200-status URLs only.
Step 5
A JavaScript-shell site earns low crawl demand because Google's first impression of the domain is empty pages. "Discovered — currently not indexed" at scale on a React site is often the rendering problem wearing a different costume.
Step 1
New pages on smaller sites often sit here for days or a couple of weeks and resolve without intervention. Request indexing for your most important pages and give it two weeks before escalating.
Step 2
Google prioritizes crawling based on what previous crawls found. If past crawls hit thin, duplicate, or empty pages, new URLs get deprioritized. The fix is raising domain quality — not resubmitting URLs.
Step 3
Pages that live only in the sitemap with no internal links are at the back of the queue. Get them linked from strong pages within two to three clicks of the homepage.
Step 4
If Googlebot spends visits on parameter URLs, redirect chains, 404s, and soft 404s, real pages never get their turn. Block infinite URL spaces in robots.txt, flatten redirects, return real 404s, and keep the sitemap to canonical, indexable, 200-status URLs only.
Step 5
A JavaScript-shell site earns low crawl demand because Google's first impression of the domain is empty pages. "Discovered — currently not indexed" at scale on a React site is often the rendering problem wearing a different costume.
If 80% of your new site sits in "Discovered — currently not indexed," you're not dealing with a page-level problem. You're dealing with a domain-level trust problem. Resubmitting URLs won't fix it.
Status glossary
Thrive Media's prerendering configuration — managed through Encited with DNS-only setup and no code changes to the Lovable-built site — reduced the proportion of Thrive Media's own pages showing thin or zero content from 94 pages to zero, and is now the standard architecture for every client website Thrive Media builds.
Your server returned an error when Google tried to crawl. Check hosting capacity and whether security or firewall rules are blocking Googlebot.
A redirect loop, chain too long, or redirect to a dead URL. Trace the full chain and make every redirect a single hop to a final 200 page.
Googlebot was told not to fetch the page. Fine if intentional. Otherwise, remove the disallow rule — a page must be crawlable for Google to even see a noindex tag on it.
Page requires authentication or refused Googlebot. Normal for login-protected areas. A problem if hitting public pages — usually a CDN or WAF challenging bots.
Page doesn't exist. Correct for removed content. Add 301 redirects for removed pages that have replacements.
Page says nothing but returns 200, or is so thin Google treats it as empty. Return a real 404/410, redirect, or add real content.
Google saw a noindex directive and obeyed. Perfect when intentional. The classic accident is a staging noindex that shipped to production.
Google found duplicates and you didn't declare a winner — Google picked one. Add explicit canonical tags to the version you want indexed.
You declared a canonical and Google overrode it. Your content is too similar between pages, or internal links point at a different version. Differentiate the content or align signals.
Google fetched it and passed. Quality, duplication, rendering, or internal linking problem. See the debug guide above.
Google knows it exists but hasn't crawled it. Crawl demand or capacity problem. See the debug guide above.
FAQ
Twelve answers to the most common indexing questions Thrive Media hears from clients.
Sitemap submission tells Google your pages exist. It does not tell Google your pages are worth crawling. A sitemap on a new domain with no external links, no user signals, and no crawl history often does nothing for weeks. What actually moves Google are external links from already-trusted sources, clean technical signals (no rendering issues, no accidental noindex tags), and content that isn't a near-duplicate of what's already in the index. Thrive Media's standard recommendation for any new site is to get three to five real external links before expecting meaningful indexing activity.
An established site with regular publishing activity can see new pages indexed within hours to a few days. A healthy small site with a few external links typically sees new pages indexed within days to a couple of weeks. A brand-new domain with no external links can take anywhere from two weeks to several months for meaningful indexing coverage. The trust-building period cannot be skipped — it can only be shortened by building external signals and publishing high-quality content consistently.
Yes, as a nudge for pages that are ready to be indexed. A manual request moves a crawlable, indexable page up the queue and regularly cuts the wait from days to hours. It does nothing durable for a page Google already evaluated and skipped — in that case, the page needs to be fixed before requesting again. Manual requests are capped at approximately 10 per day, so spend them on the highest-priority pages: homepage, main service pages, best content.
React sites and AI-builder sites (Lovable, Bolt, v0, Replit) generate JavaScript single-page applications that serve empty HTML shells to crawlers by default. When Googlebot crawls the page, it reads raw source containing an empty root div and no actual content. Content only appears after JavaScript runs in a browser. Google handles this by adding the page to a slow, rate-limited rendering queue, which often means new or low-trust domains wait weeks or months for rendering and indexing. The fix is a prerendering layer — Thrive Media uses Encited — which intercepts crawler requests and serves fully rendered HTML immediately, with no code changes to the site.
Prerendering generates a complete HTML snapshot of each page and serves that snapshot to crawlers while human visitors receive the normal JavaScript application. If your site is built with React, Vue, Angular, or any JavaScript framework, you almost certainly need it. Test by viewing the page source (CTRL+U) — if the source shows minimal HTML with no visible content, prerendering is not configured. Thrive Media implements Encited's prerendering as a DNS-only configuration on every React-based client site.
"Discovered — currently not indexed" means Google found the URL but hasn't crawled it yet. The page is in a queue. The cause is typically low crawl demand or crawl capacity. "Crawled — currently not indexed" means Google fetched the page, read the content, and actively decided not to index it. This is a content quality, duplication, or rendering judgment. The fixes are different for each status — see the debugging sections above.
Not penalized in the traditional sense, but large numbers of unindexed pages — especially thin, near-duplicate, or templated pages — can depress Google's quality assessment of the entire domain, which slows indexing of your good pages too. Think of every page as carrying a quality signal for the domain. Pages that add something unique deposit positive signals. Pages that add nothing dilute overall domain quality. This is why pruning weak pages often improves indexing for the pages that remain.
Both. External links from already-indexed pages are how Google discovers new domains in the first place, and they function as a crawl priority signal — a domain other sites link to is worth Googlebot's time. The difference between a new domain with zero external links and the same domain with five real links is often the difference between months of "Discovered — currently not indexed" and normal indexing behavior. Links don't need to be high-DA authority links to unlock indexing — a Google Business Profile and a few relevant directory citations are enough to start.
Google makes indexing decisions page by page, not site by site. Pages with clear content, strong internal linking, and unique information index faster. Pages that are thin, structurally similar to other pages on the site, reachable only through the sitemap with no internal links, or only visible after JavaScript runs tend to stall. For a service business site with many geo pages, the solution is ensuring each page has genuinely distinct content and a clear internal link path from the homepage.
No. Indexing is getting into the library. Ranking is whether anyone recommends your book. If Google Search Console's URL Inspection tool says a page is indexed, the remaining work is content relevance, quality, topical authority, and external signals — not technical indexing. The only way to confirm a page is indexed is URL Inspection, not the position report.
Crawl budget is Google's term for how much crawling activity it allocates to a site. Google's documentation says crawl budget is primarily a concern for sites with over a million pages, or sites with 10,000+ pages that change daily. In practice, crawl demand affects sites of any size — a small site serving thin or JavaScript-empty pages earns low crawl demand and gets crawled infrequently. Clean, fast, content-rich pages increase crawl demand regardless of site size.
Every website Thrive Media builds includes Encited's prerendering configuration as standard — a DNS-only setup that ensures every crawler (Google, ChatGPT, Perplexity, Claude, Bing) receives fully rendered HTML immediately rather than a JavaScript shell. Thrive Media also implements FAQPage, LocalBusiness, and Organization schema in the prerendered HTML on every page, adds canonical tags on every URL, and submits each new URL to Google Search Console URL Inspection after launch. Post-launch monitoring is handled through Encited's dashboard and Search Console's Coverage report.
Thrive Media offers a free technical audit that checks your indexing status, prerendering configuration, and AEO citation readiness in one session.
Book a Free Site Audit
Written by
Chris Lewis is the founder of Thrive Media, a custom AI web design and implementation agency based in Thousand Oaks, CA. He has built and launched websites for 500+ service businesses across Ventura County, Los Angeles, and Southern California, and monitors their search and AI visibility using Encited's prerendering and AEO platform.