Indexation
Is Your Preview URL Getting Indexed Instead of Your Real Domain?
You bought a domain, but Google keeps showing an ugly platform subdomain or a staging link. That's a duplicate-content problem with two distinct causes — and the fix is to make one URL authoritative.
By SEO Vibes8 min read
You bought a domain, pointed it at your site, and everything looked done. Then you search your business and the result that shows up is an ugly platform subdomain — or a staging link you forgot was public. This is not Google being slow or wrong. It is Google doing exactly what it was told by a site that is, technically, live at more than one address. To fix it you first have to know which of the two situations you are in.
Situation one: a preview or staging URL got indexed
Most AI builders and hosts give every deploy its own URL, and some of those are meant to be private. The good platforms mark them so they stay out of search — Vercel, for example, automatically sets an X-Robots-Tag: noindexheader on preview deployments (and on outdated production ones), so they are not indexed by default (V0-009). Replit’s development URL (*.replit.dev) is only reachable while the editor is running, so it is not a durable public page at all (RPL-013).
The trap is when a safeguard gets removed by accident. On Vercel, if you assign a custom domain to a non-production (preview) branch, Vercel does not set the noindexheader — so that deployment can be indexed (V0-010). A staging site you attached a real domain to is no longer hidden. That is a common way a “private” environment ends up competing with your production site.
Situation two: the default domain never left
The other cause is quieter. When you add a custom domain, the platform’s default address often keeps working too — so the same content is live at two URLs, and Google has to guess which is canonical.
Platforms handle this very differently, and the difference decides how much work the fix is.
Default domains across the builders
Where a second copy of your site comes from
Every builder gives you a default address. What happens to it when you add a custom domain is what separates a clean setup from a duplicate-content problem.
| Platform | Non-production / preview URL | Default production domain | Duplicate-content risk |
|---|---|---|---|
| Vercel / v0 | Preview deploys: noindex by default (V0-009) | Your Vercel project or custom domain; *.vercel.app carries preview and branch deploys (V0-012) | A custom domain on a preview branch loses the noindex and can be indexed (V0-010) |
| Replit | *.replit.dev: editor-gated, not public (RPL-013) | *.replit.app (RPL-013) | *.replit.app stays reachable with a custom domain, with no documented way to disable it (RPL-014) |
| Bolt | WebContainer preview: a dev env, not the site (BOLT-013) | bolt.host subdomain (BOLT-004) | Point crawlers and canonicals at one published address — bolt.host or your custom domain (BOLT-013) |
| Lovable | — | *.lovable.app (LOV-007) | One designated primary domain; others redirect (LOV-011) |
- Vercel / v0
- Preview deploys: noindex by default (V0-009)
- Replit
- *.replit.dev: editor-gated, not public (RPL-013)
- Bolt
- WebContainer preview: a dev env, not the site (BOLT-013)
- Lovable
- —
- Vercel / v0
- Your Vercel project or custom domain; *.vercel.app carries preview and branch deploys (V0-012)
- Replit
- *.replit.app (RPL-013)
- Bolt
- bolt.host subdomain (BOLT-004)
- Lovable
- *.lovable.app (LOV-007)
- Vercel / v0
- A custom domain on a preview branch loses the noindex and can be indexed (V0-010)
- Replit
- *.replit.app stays reachable with a custom domain, with no documented way to disable it (RPL-014)
- Bolt
- Point crawlers and canonicals at one published address — bolt.host or your custom domain (BOLT-013)
- Lovable
- One designated primary domain; others redirect (LOV-011)
Read the last column as a spectrum. Lovable is the more contained case: you designate one primary domain and the others redirect to it (LOV-011), so the duplication is handled by the platform rather than left to you. Replit is the case that needs active handling: the *.replit.app address remains live alongside your custom domain, and there is no documented switch to turn it off (RPL-014), so you have to resolve the duplication with signals rather than by deleting the second URL.
How to fix it, in order
- Pick one canonical home. Decide that your custom domain — one host,
wwwor bare, over HTTPS — is the real site. Every fix below points at that one URL. - Redirect the duplicate where you can. If the platform lets you make other domains redirect to the primary (as Lovable does, LOV-011), do that — a redirect is the strongest, least ambiguous signal.
- Where you can’t redirect, use canonical tags.On a host where the default domain can’t be disabled (RPL-014), give every page a self-referential
<link rel="canonical">that points at the custom-domain URL, so both copies name the same authoritative address. - Never attach a real domain to a preview branch. On Vercel, that is what strips the
noindexand turns staging into an indexable competitor (V0-010). Keep custom domains on production only. - Confirm what Google actually indexed. Use Google Search Console and a
site:search for each address to see which URLs are in the index — then request removal or reindexing so the record matches your intent.
Our free visibility scan reads a public page the way a search engine does and reports what its canonical and indexing signals actually say — with no score and no email gate. To see exactly how your builder handles default domains and rendering, the platform pages break each one down. And when the canonicalization and redirects need to be implemented in the codebase, that is Search Foundation.
Keep reading
Related reading and next steps
- PlatformSEO for Replit sites
Replit's deployment types and the un-disableable default *.replit.app domain, worked through as an SEO decision.
- ServiceSearch Foundation
Implement canonical tags, redirects, and one authoritative domain in your codebase — so only the URL you want ever ranks.
- Diagnostics · 9 min readWhy Your Vibe-Coded Website Is Not Showing Up on Google
Being online and being findable are different things. The four stages of search — discovery, crawling, indexing, ranking — and where AI-built sites break.
- Platform · Lovable · 8 min readCan Google Index a Lovable Website?
Yes — but whether it's indexed depends on which of Lovable's two rendering paths your project is on, plus config Lovable doesn't set for you.
- Checklist · 11 min readSEO Checklist for AI-Built Websites
The twelve layers of SEO for an AI-built site, in dependency order — from technical access and rendering to authority and measurement.
- Platform · Bolt · 8 min readWhy Your Bolt.new Site Is Invisible to Google
A default Bolt.new build is often a Vite single-page app that ships an empty HTML shell — so crawlers see nothing. Why it happens, and the two ways to fix it.
- Metadata · 8 min readog:image and Link Previews for AI-Built Sites
Your link shows a blank card because the Open Graph tags are missing — or trapped in JavaScript the scraper never runs. The tags that matter, and the fix.
See it on your own site
Run a free visibility scan
This article explains what search engines need. The scan shows you which of those things your own public page actually delivers today — no score, no email gate.
This is a narrow technical scan of the public page response. It does not measure rankings, content quality, backlinks, Google index coverage, or business opportunity.