Ten thousand dead pages, every one returning a cheerful 200.
A media archive moved to a React SPA. Old article URLs that no longer existed showed a nice 'Not found' component to users. To Google, they returned HTTP 200 with that component's HTML.
The symptom built slowly: 'Crawled — currently not indexed' swelled to 11,000 URLs, crawl budget visibly draining into dead ends, and fresh articles taking 3+ weeks to get indexed.
Turns out the SPA's catch-all route rendered a 404-looking page but the server always answered 200 — because index.html serves for every path in a client-routed app. Google saw thousands of soft 404s: 200 status, near-identical 'not found' content. It kept recrawling them, burning budget that should've gone to new content, and started distrusting the whole section.
We added server-side detection: unknown paths return a real 404 status and header, valid ones render content server-side. The 'not found' component still showed — but with the correct status code underneath.
Soft-404 reports fell from 11,000 to near zero in five weeks. Crawl budget redirected: median time-to-index for new articles dropped from 23 days to 4. Organic +27% as the section regained trust.
A pretty 404 page with a 200 status is a trap that eats your crawl budget.
Hydrate Diaries
@HydrateDiaries
Ten thousand dead pages, every one returning a cheerful 200.
Этот пост опубликован в Telegram-канале Hydrate Diaries. Подписаться можно по ссылке: @HydrateDiaries.