๐— ๐˜† ๐—ฅ๐—ฒ๐—ฑ๐—ถ๐—ฟ๐—ฒ๐—ฐ๐˜๐˜€ ๐—ช๐—ผ๐—ฟ๐—ธ๐—ฒ๐—ฑ ๐—ถ๐—ป ๐˜๐—ต๐—ฒ ๐—•๐—ฟ๐—ผ๐˜„๐˜€๐—ฒ๐—ฟ, ๐—ฏ๐˜‚๐˜ ๐—š๐—ผ๐—ผ๐—ด๐—น๐—ฒ ๐˜€๐—ฎ๐˜„ ๐—ฆ๐—ผ๐—ณ๐˜ ๐Ÿฐ๐Ÿฌ๐Ÿฐ๐˜€

Google Search Console flagged six URLs as Soft 404.

I checked them with a curl command. Every URL returned a 200 OK status. The pages looked fine to me. So why did Google think they were not found?

The problem was a technical trap in my Single Page App (SPA).

A hard 404 is honest. The server says the page is gone. A Soft 404 is a lie. The server says "here is your page" with a 200 OK status, but the content looks like an error or an empty page to Google.

Here is how it happened:

The site used React and Vercel. We used a prerender layer to show real HTML to crawlers. If a route was prerendered, it worked. If not, it fell back to the app shell. This shell is basically the homepage HTML.

I had three redirects working in the code. They used the React Router Navigate component.

In a browser, it works. The app loads, the JavaScript runs, and the user moves to the new URL.

But Googlebot works differently:

To Google, you served a page that has nothing to do with the URL. That is a Soft 404.

The fix is simple: move the redirect from the app to the server.

Use a server-side 3xx redirect. On Vercel, add a redirect rule in your vercel.json file. This sends a 308 permanent redirect. Now, Google gets the correct instruction before any JavaScript loads.

Two important lessons from this:

  1. GSC reports are snapshots. They are not live. Always check the lastCrawlTime in the API. You might spend hours fixing a bug that Google already knows you fixed.

  2. Do not submit redirect sources to the Indexing API. It is a waste of time. Use the Validate Fix button in Search Console for redirects. Only submit the actual live pages you want indexed.

A 200 status does not mean Google sees a real page. If your content does not match your URL, Google will call it a Soft 404.

Source: https://dev.to/henry_dan_81513dd35a2f540/my-redirects-worked-in-the-browser-googlebot-saw-soft-404s-1pl4