Technical SEOCrawl Errors & Broken Links

Designing Custom 404 Pages and Preventing Crawl Waste from Soft 404s

A well-designed 404 page turns a dead end into a recovery opportunity, keeping a visitor on your site instead of bouncing back to search results. But 404 page design isn't purely a UX concern — get the technical implementation wrong, and you create a "soft 404," a page that looks broken to a user but returns a 200 OK status to crawlers, which actively confuses Google about what's actually on your site.

Get the HTTP Status Code Right First

Your custom 404 page must still return an actual 404 (or 410 Gone, for content permanently and deliberately removed) HTTP status code — not a 200 status with "page not found" text displayed to users. This is the single most common mistake in custom 404 implementations, especially on JavaScript-heavy sites where a client-side router shows a "not found" component but the server still responds 200 to the original request. Verify with a tool like curl or httpstatus.io, not just by looking at the page in a browser, since the visual result looks identical either way.

What Makes a Good Custom 404 Page

Include a clear, friendly message confirming the page wasn't found, a prominent search bar so users can find what they were looking for, links to your most important pages or categories, and if relevant, your main navigation so users aren't stranded without a way back into the site. Avoid design choices that mislead users into thinking they've found real content — a 404 page dressed up to look exactly like a normal content page, without a clear "not found" message, can leave visitors confused about whether they actually got what they were looking for.

Understanding Soft 404s Specifically

A soft 404 is a page that a human would recognize as an error — "no products found," an empty search results page, a deleted listing — but that returns a 200 status instead of 404. Search Console's Indexing → Pages report has a dedicated "Soft 404" category, separate from real 404s, because Google detects the content pattern independently of the status code and flags it as a likely error page regardless of what code you're actually returning.

Common Sources of Soft 404s

  • E-commerce category or search pages that show "0 results" but return 200 — set these to return an accurate status, or ensure they include genuinely useful content (related categories, popular products) rather than an empty result set.
  • Expired event or job listings left live with generic "this listing has ended" text and a 200 status — return 404 or 410, or redirect to a current relevant listing.
  • Thin auto-generated pages (empty tag archives, placeholder author pages) that Google interprets as low-value or error-like even though technically "live."

Fixing Soft 404s at Scale

For templated pages generating soft 404s in bulk (like empty search or filter results), fix the template logic itself so it either returns a correct status code when appropriate or dynamically shows genuinely useful fallback content, such as popular items or a broader category listing, rather than an empty page that reads as an error to both users and Google's classifier.

Track Progress in Search Console Over Time

After deploying fixes, monitor the Soft 404 and Not Found categories in Search Console's Indexing report over subsequent weeks rather than expecting an immediate drop — Google needs to recrawl affected URLs before the report reflects your changes. A steady downward trend confirms the fix is working; a plateau suggests either incomplete template coverage or a new source of soft 404s that wasn't part of the original audit.

Bring Design and Engineering Into the Fix

Custom 404 pages and soft 404 fixes sit at the intersection of design, content, and engineering, and the best results come from involving all three rather than treating it as a purely technical checkbox. A well-designed error page that also returns the correct status code delivers both the user-experience benefit and the crawl-clarity benefit at once, rather than trading one off against the other. For a deeper look at this, see our guide, Sitemaps, Robots.txt & Canonicalization.