Open a URL that does not exist on a JavaScript website and you may still receive 200 OK.
The page can display “Not found,” show the homepage, remain in a loading state or render content from another route. To a basic uptime monitor, the request succeeded.
To a search crawler or user, it is the wrong page.
Soft 404 and wrong-route monitoring checks page identity and meaning alongside the status code.
Quick answer
A soft 404 is a URL that responds as though it succeeded—often with 200 OK—but the content indicates that the requested resource is missing or invalid.
To detect it on a JavaScript website:
- Test known valid and deliberately invalid URLs.
- Check the raw status and redirect chain.
- Inspect rendered title, H1, canonical, robots directives and main content.
- Verify that valid routes contain route-specific markers.
- Verify that invalid routes return a meaningful error status or an appropriate
noindexstrategy. - Compare the public, rendered and crawler-facing response.
- Monitor these canary URLs after deployments.
Do not decide from 200 alone.
What is a soft 404?
A hard 404 is straightforward: the server responds with 404 Not Found for a missing resource.
A soft 404 describes a mismatch between response status and page meaning. The server reports success, but the page behaves like an error.
Examples:
200 OKwith “This product no longer exists”200 OKwith an empty application shell200 OKwith homepage content for an unknown path200 OKwith a generic error component200 OKafter an API returns “record not found”200 OKwith a permanent loading screen
Search systems may interpret these pages as errors even though the status is successful. Users may also land on confusing or unrelated content.
Why single-page applications create soft 404s
Many SPAs use a server fallback that sends the same application HTML for every path. Client-side routing then decides which view to display.
This is useful for real routes. It becomes a problem when the route or requested record does not exist and the application displays an error without changing the HTTP status.
Common causes include:
- catch-all hosting rewrites
- client-side router with no server error route
- API returns missing data after the HTML response is sent
- generic exception boundary returns an error component
- static host serves
index.htmlfor every URL - a prerendering cache stores fallback content under the requested route
The framework is not the diagnosis. The deployed response behavior is.
Wrong-page content is related but broader
A URL can return the wrong content without looking like a traditional error page.
Examples:
- every product URL shows the homepage
- Product A's URL displays Product B
- an English URL serves another language
- an old slug renders the current category page without a redirect
- a crawler-facing cache maps several routes to one snapshot
- title and canonical belong to one route while the body belongs to another
These may not be labeled soft 404s by every system. Operationally, they share the same monitoring requirement: verify the requested page's identity, not only whether HTML arrived.
Use valid and invalid canary URLs
For each important page template, keep two tests.
Valid canary
A stable real URL with expected content.
Example:
/products/known-product
Expected:
200 OK- product-specific title and H1
- required product name and description
- self-canonical
- indexable directives
Invalid canary
A deliberately nonexistent URL that will not become valid accidentally.
Example:
/products/pb-soft-404-test-nonexistent
Expected:
- preferably an appropriate
404response, or - a deliberate error-handling path with an effective
noindexstrategy where a meaningful status is impractical
Do not use a random real-looking identifier that could later be created.
Testing both canaries catches two directions of failure: valid content disappears, or invalid content starts looking valid.
Check the response before rendering
Record:
- status code
- redirect chain
- final URL
- response body
- response headers
X-Robots-Tag- server-level cache indicators where available
If an invalid URL returns 200, continue into rendered behavior. If it returns 404, confirm that the body is a useful error page rather than homepage or unrelated content.
The status is necessary evidence but not the complete test.
Check the rendered page identity
After JavaScript runs, inspect:
- document title
- H1
- main-content text
- canonical
- robots meta
- structured data
- route-specific links and CTA
- error message or loading state
Create a page identity contract using multiple markers.
For Product A:
- title contains Product A
- H1 equals Product A
- product identifier appears in the main content
- canonical ends in Product A's intended slug
- structured data names Product A
If only the title changes but the body and canonical belong to Product B, the page is still wrong.
Compare raw, rendered and crawler-facing output
A route can behave differently across delivery layers.
| Raw response | Rendered browser | Crawler-facing response | Likely issue |
|---|---|---|---|
App shell with 200 | Correct product | Correct product | Rendering dependency; monitor relevant crawler capability |
App shell with 200 | Not-found page | App shell or not-found with 200 | Soft 404 handling gap |
Homepage with 200 | Correct product | Homepage | Bot routing or prerender cache mapping issue |
Product A with 200 | Product A | Product B | Wrong cached snapshot or route key |
404 | Useful error page | Useful error page | Expected missing-route behavior |
Preserve excerpts from each view. A screenshot alone cannot prove status, canonical or crawler HTML.
Google's guidance for SPA error pages
Google's JavaScript troubleshooting documentation notes that SPAs often report 200 for client-side error pages.
It describes two strategies:
- Redirect to a URL for which the server returns
404. - Add or change a robots meta tag to
noindexon the client-rendered error page.
Google's JavaScript SEO basics also recommends meaningful HTTP status codes where possible.
A real 404 or 410 response is usually the clearest signal for a missing resource. When the architecture makes that impractical, implement and test the documented client-side strategy carefully.
Do not block the error page before noindex can be seen
If the chosen strategy depends on a noindex directive in the page, the crawler must be able to access the page to observe it.
Blocking the route in robots.txt can prevent the crawler from seeing the rendered directive. Access policy and indexability are separate controls.
Verify the exact public result with the relevant testing tools rather than assuming the tag is processed.
Detect homepage fallbacks
Homepage fallback is common on misconfigured static hosting and edge rewrites.
Monitor for:
- homepage title on a deep route
- homepage H1 or hero text
- canonical pointing to
/ - same content signature across many unrelated URLs
- identical structured data for every route
- absence of route-specific markers
An invalid route that looks like the homepage can create confusing discovery and analytics. A valid route with homepage content is an even more urgent regression.
Detect wrong cached pages
Prerendering and CDN caches need route-specific keys and correct invalidation.
Test:
- several URLs from the same template
- query and locale variations that should differ
- current release marker
- cache age
- content signature per canonical URL
- response under the intended crawler user agent
If different URLs return the same cached snapshot, inspect cache key construction, normalization, redirects and fallback behavior.
Refresh the narrowest affected scope and then repeat every page-identity assertion.
Monitor after deployments and content changes
Run canary checks:
- before release in a production-like environment
- immediately after production deployment
- after routing, hosting or CDN changes
- after framework upgrades
- after prerender configuration changes
- on a scheduled production cadence
A CMS deletion can create a soft 404 without a code deployment. Keep scheduled monitoring in addition to release tests.
Use How to Monitor JavaScript SEO After Every Deployment for the full release workflow.
Alert with page identity evidence
A useful incident alert says:
Product page canary returned
200, but the rendered H1 and canonical belong to the homepage. The browser and crawler-facing responses both changed after release2026.08.26.2.
Include:
- URL and expected template
- status and final URL
- failed identity markers
- raw, rendered and crawler profile
- previous and current values
- content excerpt or diff
- deployment context
- severity and owner
This is more actionable than “content hash changed.”
Prioritize by scope
Critical
Valid pages across a core template return error, homepage or unrelated content.
High
Invalid routes across an important section return indexable 200 error pages, or crawler caches map routes incorrectly.
Medium
One route or low-volume template has inconsistent status, canonical or error handling.
Low
The error page is technically correct but could give users clearer navigation.
Confirm template scope before escalating a single URL as a site-wide incident.
Who this is for
- SaaS founders with already-shipped JavaScript websites
- React, Vite, Vue, Lovable, Bolt, or Base44 users
- SEO freelancers checking crawler-readable HTML
- Agencies maintaining client sites without rebuilding them
Where Prerender Buddy fits
Prerender Buddy can monitor the signals a basic uptime check misses:
- valid and invalid canary routes
- status and redirect chain
- raw-versus-rendered identity
- required and forbidden content
- canonical and indexability
- crawler-facing output
- cache freshness and route-specific signatures
If prerendering is enabled, the same monitoring verifies that each URL receives the correct equivalent snapshot.
What fixing soft 404s cannot guarantee
Correct error handling cannot guarantee:
- crawling or indexing of valid pages
- search rankings
- AI mentions, citations or recommendations
- traffic or conversions
It prevents missing and wrong pages from masquerading as valid content and makes the site's public behavior more accurate.
You may not need Prerender Buddy if
- Server HTML is already complete.
- Static pages crawl correctly.
- You are already rebuilding with SSR or static generation.
- You only need an audit, not a rendering fix.
Final recap
Soft 404s happen when a page reports success but behaves like an error. JavaScript routing can also return homepage or wrong-route content under valid URLs.
Test known valid and invalid canaries. Compare raw, rendered and crawler-facing responses. Verify status, page identity, canonical, directives and route-specific content. Monitor after deployments and content changes.
The important question is not “Did HTML return?” It is “Did this URL return the correct page?”
Use the JavaScript SEO Score for a fast page baseline, then add valid and invalid canaries to the agency monitoring workflow when the checks span client sites.
Want to detect successful responses carrying the wrong content? Start monitoring with Prerender Buddy and define page-identity checks for critical routes.
Frequently asked questions
What is a soft 404?
A soft 404 is a URL that returns a successful or non-error response while the content indicates that the requested resource is missing or invalid.
Why does my SPA return 200 for missing pages?
Many SPA hosts send the same application shell for every route. Client-side code discovers the missing resource only after the server has already returned 200.
Should an SPA error page return 404 or use noindex?
A meaningful error status is usually clearest. Google also documents a client-side noindex strategy when status handling is impractical. Test the final rendered and crawler-facing result.
Is showing the homepage for an unknown URL a soft 404?
It can be treated as wrong or soft-404-like content because the requested resource is absent despite a successful response. Fix the routing and return an appropriate error result.
Can prerendering cause wrong-page content?
A misconfigured route mapping, fallback or cache key can store or serve the wrong snapshot. Prerendering itself is not the cause in every case; compare origin, cache and crawler responses.
How can I monitor soft 404s automatically?
Keep stable valid and invalid canary URLs. Check status, title, H1, canonical, directives and route-specific content across raw, rendered and crawler-facing views.
Does fixing a soft 404 make a page rank?
No. It corrects error behavior. Search systems make separate crawling, indexing and ranking decisions for valid pages.