Bolt.new site shows 404 on refresh: the Netlify fix
A Bolt.new site on Netlify shows "Page not found" on refresh because the app routes pages in the browser and Netlify has no file for /pricing or /success. Add a file at public/_redirects containing /* /index.html 200 and republish. A rule in netlify.toml often does not help here, because Bolt uploads ready-built files and Netlify skips the build step that reads that file.
What you'll see
Moving around the site through its menu works. Refreshing any page other than the homepage, opening a deep link from an email, or returning from Stripe Checkout to /success shows Netlify's "Page not found – Looks like you've followed a broken link or entered a URL that doesn't exist on this site." Customers who just paid land on that page.
Why it happens
1. Client-side routing with no fallback
Bolt's default React + Vite app has one index.html and swaps pages in the browser. A fresh request for /success reaches Netlify, which looks for a file by that name and finds nothing.
2. A netlify.toml rule that never runs
Netlify reads [[redirects]] in netlify.toml during its build. Bolt's publish sends files that are already built, so that step is skipped, and the rule sits in the repository doing nothing. People add it, see no change, and assume redirects are broken.
3. Return URLs pointing at routes the host cannot serve
Stripe and OAuth providers send users to a full URL such as /success?session_id=… as a fresh page load. That is the same as a refresh, so it fails in exactly the same way.
How to fix it
- Create a file called _redirects inside the public folder (public/_redirects, no file extension) with this single line: /* /index.html 200.
- Republish from Bolt, then open the deployed site's /_redirects address or check the deploy's file list in Netlify to confirm the file made it into the output.
- If you deploy from Git instead, check Site configuration > Build & deploy in Netlify shows npm run build and dist; with a real build, netlify.toml rules work as well.
- Open /success, /pricing and any other important route directly in a private window and press refresh on each.
- Run a Stripe test-mode checkout end to end and confirm the success and cancel pages load after the redirect.
- Ask Bolt for an in-app "page not found" screen so mistyped URLs still look like your site.
Prompt to paste into Bolt.new
Add a public/_redirects file containing "/* /index.html 200" so every route works on refresh and when opened directly, including the Stripe success and cancel URLs. Also add a friendly 404 page inside the app for unknown routes.
How to check it's fixed
- Open each main route in a new private window and refresh it; every one should render your page with HTTP status 200.
- Complete a test-mode Stripe checkout and confirm the return page loads.
What a QAlaunch scan shows for this
- Links from the homepage that come back 404 when loaded directly, the same thing a refresh does.
- What a missing page returns: Netlify's generic error or your own 404 screen.
- Pages behind checkout cannot be reached by the scan, so test the Stripe return URL yourself.
See exactly what a full report contains in the sample report.
Frequently asked questions
I added a redirect to netlify.toml. Why is it ignored?
Netlify only processes netlify.toml when it runs the build itself. Files pushed already built, as Bolt does, skip that, so put the rule in public/_redirects, which is copied into dist and read on every deploy.
Does this happen on Bolt Cloud hosting too?
This guide is about Netlify. Bolt now also hosts on its own .bolt.host domains, and how that host treats deep links is not spelled out in Bolt's help center, so test a refresh on your own routes after publishing there.
Is a 200 rewrite bad for SEO?
No, it is the standard setup for single-page apps. Just make sure the app shows a real not-found screen for nonsense URLs and, ideally, sets a noindex tag on it.
Rather have a QA engineer test it by hand?
If this is a site you're launching or handing to a client, I'll go through it by hand, including the Bolt.new-specific issues a scan can't reach, like logged-in flows.
- Up to 10 key pages tested by hand, not a scan
- Every flow a customer uses: forms, sign-up, checkout, booking
- Real mobile and desktop browsers
- A written report in plain language, with screenshots
- A 15-minute call to walk you through it
- 10 years of professional QA experience
Tell me about your site and I'll reply personally, usually the same day.
No payment now. I'll confirm scope and price first.
Related fixes
- Bolt.new blank page after deploy: causes and fixes
- Lovable app gives 404 on refresh after export: the fix per host
- Bolt.new environment variables not working after deploy
- Bolt.new custom domain not connecting: causes and fixes
- Bolt.new Google sign-in not working: causes and fixes
- Bolt.new emails not sending: contact forms and auth emails
More for Bolt.new: all Bolt.new fixes · Bolt.new testing · 9 bugs every AI-built site ships with
Written by Waqas Ahmad, QA engineer with 10 years of professional testing experience. Last checked October 26, 2026.
Sources: Netlify forum: 404 on refresh, bolt.new and netlify.toml · Netlify forum: Stripe redirect page gives 404 on a Bolt site · Netlify forum: Bolt site shows "broken link" error