Back to blog

JavaScript Soft 404s: How to Detect Wrong-Page Content

Detect JavaScript soft 404s, homepage fallbacks and wrong-route content by checking status, page identity, rendered HTML and crawler-facing responses.

Monitoring
Aug 29, 2026
10 min read

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:

  1. Test known valid and deliberately invalid URLs.
  2. Check the raw status and redirect chain.
  3. Inspect rendered title, H1, canonical, robots directives and main content.
  4. Verify that valid routes contain route-specific markers.
  5. Verify that invalid routes return a meaningful error status or an appropriate noindex strategy.
  6. Compare the public, rendered and crawler-facing response.
  7. 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 OK with “This product no longer exists”
  • 200 OK with an empty application shell
  • 200 OK with homepage content for an unknown path
  • 200 OK with a generic error component
  • 200 OK after an API returns “record not found”
  • 200 OK with 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.html for every URL
  • a prerendering cache stores fallback content under the requested route

The framework is not the diagnosis. The deployed response behavior is.

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 404 response, or
  • a deliberate error-handling path with an effective noindex strategy 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 responseRendered browserCrawler-facing responseLikely issue
App shell with 200Correct productCorrect productRendering dependency; monitor relevant crawler capability
App shell with 200Not-found pageApp shell or not-found with 200Soft 404 handling gap
Homepage with 200Correct productHomepageBot routing or prerender cache mapping issue
Product A with 200Product AProduct BWrong cached snapshot or route key
404Useful error pageUseful error pageExpected 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:

  1. Redirect to a URL for which the server returns 404.
  2. Add or change a robots meta tag to noindex on 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 release 2026.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.