Guide · 10 min read

Bolt.new SEO: get your Bolt site on Google

For makers who built a site with Bolt.new and can't find it on Google. What crawlers receive, how to check in five minutes, prompts that fix it in Bolt, and when to move the code.

Updated · By the Serpkin team

In short

  • Bolt projects are often Vite + React single-page apps, which send the same near-empty HTML for every URL. Check yours with curl.
  • Fix rendering first: add a build-time prerender step, or ask Bolt for a framework that outputs HTML, then confirm with curl after publishing.
  • Give each route its own title, description and absolute canonical in the HTML, and make unknown URLs return 404 instead of the app shell.
  • Bolt's SEO Boost prerendering is no longer in its current docs; use it if your settings still show it, otherwise don't count on it.
  • Custom domains need Bolt Pro. For redirects, 404 control or CI, sync to GitHub and host on Netlify or Vercel.

A Bolt.new site can show up on Google once it is published publicly, but if your project is a typical Vite + React app, crawlers get one near-empty HTML file for every URL and have to run JavaScript to see anything. Google often does, later; many other crawlers and link previews don't. So the first fix is rendering: get each page's text, title and links into the HTML, either with a build-time prerender step or by building on a framework that outputs HTML. Then add per-page metadata, a sitemap and your custom domain. Bolt doesn't document how its hosting renders pages, so this guide shows you how to check what yours sends. For the wider picture, see SEO for AI-built websites.

What Bolt builds and where it runs

Bolt stacks and hosting, per Bolt's help center (October 2026)
QuestionWhat Bolt documentsSEO meaning
FrameworkJavaScript frameworks such as React and Vue; Bolt picks one unless your prompt names oneCheck package.json: a Vite + React SPA needs extra work
BackendJavaScript (Node.js) backends onlyServer rendering is possible, but not the default for most projects
Default hostingBolt hosting with a free .bolt.host domainHow it serves routes (static vs server) isn't documented
Custom domainsPro plans onlyNeeded to own your canonical host
NetlifyOptional provider; first publish creates a netlify.app URLNetlify's redirect and prerender features apply
VisibilityPublic sites can be listed by search engines; private sites can'tPublish publicly before testing

The five-minute diagnosis

  1. Curl the published page
    Terminal
    URL=https://your-domain.com/pricing      # or https://your-site.bolt.host/pricing
    curl -s $URL | grep -o "<title>[^<]*"
    curl -s $URL | grep -o "<h1[^>]*>[^<]*"
    curl -s $URL | grep -c "<a href"          # links a crawler can follow without JavaScript
    Terminal
    $ curl -s https://your-site.bolt.host/pricing | grep -o "<title>[^<]*"
    <title>Vite + React + TS
    $ curl -s https://your-site.bolt.host/pricing | grep -o "<h1[^>]*>[^<]*"
    (no output)
    $ curl -s https://your-domain.com/pricing | grep -o "<h1[^>]*>[^<]*"
    <h1>Pricing for busy studios
    
    Illustrative output. Top: a Vite + React Bolt project with the default index.html. Bottom: the same page after a prerender step.
  2. Check unknown URLs, robots.txt and the sitemap
    Terminal
    curl -s -o /dev/null -w "%{http_code}\n" https://your-domain.com/no-such-page   # want 404
    curl -s https://your-domain.com/robots.txt
    curl -s https://your-domain.com/sitemap.xml | head -3

    A 200 for the missing page, or a sitemap URL that returns your app's HTML instead of XML, means every path is rewritten to index.html. Netlify's docs describe exactly that for the common /* /index.html 200 rule: it serves index.html instead of a 404, whatever URL is requested. The robots.txt tester and sitemap validator catch both.

  3. See what Google gets

    In Search Console, run URL Inspection, Test live URL, View tested page. If your copy shows up there but not in curl, Google renders it; other crawlers still won't. The free SEO checker shows the raw server HTML for one URL.

Fixes, in order of impact

  1. 1Real HTMLPrerender each public route, or use a framework that outputs HTML
  2. 2MetadataUnique title, description, canonical per route, in the HTML
  3. 3Real 404sUnknown URLs return 404, not the app shell
  4. 4Sitemap + robotsStatic files in public/, absolute URLs
  5. 5One hostCustom domain, then Search Console
Fix order for a Bolt site: without real HTML, metadata and sitemaps help only the crawlers that run JavaScript.

1. Get real HTML for each public page

Turn on Bolt's SEO/GEO skill first (gear icon, Skills): it is one of Bolt's curated skills and is off by default. Then ask for a build-time prerender. Bolt's docs don't say whether its hosting runs custom build scripts, so publish and curl to confirm it worked.

Prompt for Bolt chat
Add a build-time prerender to this Vite + React app, without a headless browser:
1. src/seo.ts with the list of public routes and a unique title and description for each.
2. src/entry-server.tsx that renders a route with renderToString and StaticRouter.
3. scripts/prerender.mjs that runs after "vite build", writes dist/<route>/index.html with
   the rendered markup and that route's <title>, meta description and canonical
   (https://your-domain.com + path), plus dist/404.html with noindex and dist/sitemap.xml.
4. main.tsx: hydrateRoot when #root has content, createRoot otherwise.
Keep the design and copy exactly as they are.

The full code for these files is in React SEO for Vite apps. If you are starting a new project and most of it is content, it is simpler to ask Bolt for a framework that outputs HTML from the start ("Build this as an Astro site", for example), since Bolt lets your prompt pick the framework.

2. Put per-page metadata in the HTML

With prerendering in place, each file gets its title, description and canonical from src/seo.ts. For client-side navigation, React 19 can render <title> and <meta> from any component. Ask Bolt to add Open Graph tags (og:title, og:description, an absolute og:image) the same way, so link previews work. Check lengths with the SERP preview.

3. Make unknown URLs return 404

On Netlify, a root 404.html is served for paths that don't match a file, so once every public route has its own HTML you can scope the SPA rewrite to the parts that need it:

public/_redirects
# Only the logged-in app is client-side routed
/app/*  /app/index.html  200

Bolt doesn't document redirect or 404 settings for its own hosting. If the not-found curl still returns 200 there, have your not-found route add <meta name="robots" content="noindex">, which is Google's fallback advice for single-page apps.

4. Add robots.txt and a sitemap

public/robots.txt
User-agent: *
Allow: /

Sitemap: https://your-domain.com/sitemap.xml

Files in public/ are copied to the build output as-is in Vite projects. Use absolute URLs on your custom domain in the sitemap, and list only public pages.

5. Move to your own domain and verify it

Custom domains need Bolt Pro. If you switch between Bolt hosting and Netlify, Bolt notes that custom domains don't carry over automatically, so re-point them. Then verify the domain in Search Console, submit the sitemap, and check that the .bolt.host or netlify.app address isn't what Google lists (search site:your-site.bolt.host). If it is, the absolute canonicals from step 2 are your main signal; redirect the platform host where your host allows it.

If you host on Netlify: the Prerender extension

Netlify's old built-in prerendering was shut down in early 2026. Its replacement, the Prerender extension, adds an edge function that sends requests from relevant crawler user agents to a function that renders the page in a headless browser. You enable the extension and redeploy; there is no extra fee beyond normal function usage. It is a quick bridge for an existing SPA, but it is dynamic rendering, which Google calls a workaround, and people and unlisted bots still get the empty shell. Prerendering at build time is the sturdier fix.

What you can and can't control

SEO controls for a Bolt project ('not documented' means Bolt's help center doesn't say)
ItemBolt hostingNetlify
Head tags, robots.txt, sitemapYes, as project filesYes, as project files
Server renderingNot documentedVia framework adapters or functions
PrerenderingSEO Boost, if still in your settingsBuild-time prerender, or the Prerender extension
Redirects and 404 statusNot documented_redirects and 404.html
Custom domainPro planSet up in Netlify; doesn't carry over from Bolt

When to move the code off Bolt, and how

Move when you need things Bolt doesn't document (permanent path redirects, server rendering, header control), or when the prerender step has to run in CI you control. Bolt is still a fast way to build; you can keep it as the editor.

  1. Get the code

    Connect GitHub: Bolt commits after each working change and pulls outside changes about every 30 seconds, so you can keep editing in both places. Or download a ZIP from the project title menu.

  2. Deploy it somewhere you control

    Netlify works directly. Vercel has a guide for deploying a Bolt ZIP with Vercel Drop, which detects the framework. A Vite SPA on Vercel needs a rewrite to index.html; scope it to client-only routes for the same 404 reason as above.

  3. Hand the repo to a coding agent
    Prompt for a coding agent
    This Vite + React app was built in Bolt and will be hosted at https://your-domain.com.
    Make every public route return its own HTML: prerender at build time (or migrate to
    React Router framework mode with prerender if that's simpler here). Each route needs a
    unique title, description and absolute canonical; unknown URLs must return 404; generate
    sitemap.xml from the route list. Done when curl on the preview deploy shows each route's
    <h1> and <title> and /no-such-page returns 404.

From there, npx serpkin sets up Claude Code, Codex or Cursor in the repo, registers the site and runs a first scan, which flags pages whose text isn't in the server HTML and groups small metadata fixes into one "Fix the basics" mission. Run npx serpkin check <preview-url> before you point the domain, to catch a lost title, canonical or sitemap.

Check a page nowFree: see what a crawler finds on any URL, with a prompt for your agent.

Questions

Is Bolt.new good for SEO?

It builds quickly, but a typical Bolt project is a client-rendered Vite + React app, which crawlers see as an almost empty page. Prerender the public routes or use a framework that outputs HTML, then add metadata and a sitemap.

Why isn't my Bolt site showing up on Google?

Common reasons: the site is private or not published, the HTML has no content until JavaScript runs, every page has the same title, or there's no sitemap or Search Console property. Curl a page and check Search Console's Page indexing report.

How do I add a sitemap to a Bolt.new site?

Put a sitemap.xml with absolute URLs on your domain in the public/ folder (or generate it at build time), add a Sitemap line to public/robots.txt, then submit it in Search Console.

Does Bolt have prerendering?

Bolt used to document SEO Boost, which prerendered pages for search engines on projects with a custom domain. It's no longer in Bolt's current help center. A build-time prerender step works on any host.

Sources

Let your agent do the SEO work.

Serpkin finds the next fix from real search data, hands it to Claude Code, Codex or Cursor, and checks it after you ship.

npx serpkin
Start free