Skip to content
WP Visibility

Indexing and technical SEO guide

Fix Soft 404 Pages in WordPress

Check the status code and what Google rendered. Make truly missing pages return 404 or 410, and fix the template or content state of useful pages Google read as empty.

Published

On this page

A soft 404 is a page that returns a 200 status while looking, to Google, like an error or an empty page. Fix it by first deciding which kind you have. If the page is genuinely missing or empty, make it return a real 404 or 410, or a 301 if the content moved. If the page is useful, find out why Google saw it as empty, usually through the rendered page in URL Inspection, and fix the template, the resources it loads, or the content state.

What Google flags as a soft 404

Google’s Page Indexing report help, checked September 27, 2026, describes the reason: the page “returns a user-friendly ‘not found’ message but not a 404 HTTP response code,” and recommends “returning a 404 response code for truly ‘not found’ pages.” Google’s HTTP status documentation, checked September 27, 2026, widens it: “If the content suggests an error for Google Search, an empty page or an error message, Search Console will show a soft 404 error.”

So two different situations produce the same label:

  1. A real defect you can demonstrate. The page is missing or empty, and the server still answers 200. curl proves it.
  2. A classification you can only influence. The page has real content, but Google’s rendered copy looked empty or like an error. You can find and fix reasons for that, but you cannot prove from the outside exactly why Google classified it.

Keep the two apart in your notes. The first has a definite fix. The second has likely fixes and a recheck.

Three kinds of soft 404. Missing page: Not found content served with a 200. Empty listing: An archive or search result with no items. Misread page: Real content Google rendered as empty.
One report label covers different situations. A wrong status code is a defect you can prove; a misread page has likely causes you can fix and then recheck.

Check the response and the rendered content

  1. Get the status code as an anonymous visitor:

    curl -s -o /dev/null -w "%{http_code}\n" https://garden.example/category/bulbs/
  2. Inspect the URL in Search Console, run Test live URL, and open View tested page. Google’s URL Inspection help, checked September 27, 2026, says this shows a screenshot of the rendered page, the raw HTML, the HTTP headers, JavaScript console output, and page resources.

  3. Compare the screenshot and HTML with the page in a private browser window.

Then classify the page:

What you find Class Go to
200, and the page says nothing was found Missing page, wrong status Return 404 or 410
200, and the page is an empty archive or search result Empty state, wrong status or wrong exposure Fix the listing, or keep it out of search
200, content looks fine to visitors, but the screenshot is blank, broken, or shows an error Rendering failure Fix resources or scripts
200, content is a placeholder such as “coming soon” Placeholder Publish it later, or return 503 while in maintenance
200, content is complete in the screenshot Uncertain classification Make the main content unmistakable, then recheck

WordPress pages that can end up here

Empty category, tag, and custom taxonomy archives. WordPress does not return a 404 for an archive whose term exists but has no posts. The WP::handle_404() reference, checked September 27, 2026, shows core skips the 404 for tag, category, taxonomy, and post type archives “if they matched an object,” and for authors who exist on the site, even with no posts. The theme then prints its “nothing found” message with a 200.

Internal search results with no matches. The same function skips the 404 for a search with no matches on its first page, so an empty search result is a 200. This matters mainly when search result URLs are linked somewhere Google can follow them.

A 404 design that is not a 404. A page builder or theme option that sends visitors to an ordinary page called “Page not found” returns that page’s 200 status. A plugin that redirects every missing URL to the homepage has a similar effect: after the redirect, the visitor gets a 200 page that is not what they asked for.

Pages that render empty for crawlers. Main content loaded by JavaScript that fails, a robots.txt rule blocking /wp-content/ so the theme’s styles and scripts cannot load, a security plugin that blocks anonymous requests to the REST API that the page depends on, or a consent overlay that covers everything. Google’s crawling troubleshooting page, checked September 27, 2026, notes that a page flagged as a soft 404 may reference “many resources that can’t be loaded.”

Placeholder and maintenance pages. A maintenance plugin that serves a “back soon” page with a 200 to everyone.

Some WordPress requests already get a real 404 and are not soft 404s: handle_404() shows that a paginated archive past its last page, such as /category/bulbs/page/9/ when there are three pages, gets a 404.

Repair the template or content state

Missing pages. Return a 404 or 410, or a 301 if the content moved to a specific page. Google’s troubleshooting page gives exactly that rule. The choice between those responses, and cleaning up links afterward, is covered in 404, 410, or redirect. Remove catch-all “redirect every 404 to the homepage” settings; they turn honest 404s into something else.

Empty archives. Pick one:

  1. Add posts to the term if it is meant to be a real section.
  2. Delete or merge the term if it has no purpose. The archive URL then no longer matches a term; confirm with curl that it returns a 404.
  3. Keep it out of search if the term must exist but its archive has no value to searchers. Keep a Page Out of Search covers setting noindex on a term.

WP Visibility’s sitemap lists only term archives that contain at least one published post, so an empty term does not get advertised there. It also noindexes internal search results by default. Neither changes the 200 status or stops Google from crawling a URL it finds linked. The sitemap rule only stops advertising empty terms, and the noindex asks search engines to leave search pages out of the index.

Custom 404 designs. Build the design into the theme’s 404 template (404.php, or the 404 template in the Site Editor; see the template hierarchy, checked September 27, 2026) so WordPress serves it with a real 404 status. Check with curl after the change.

Rendering failures. Use the live test’s page resources and console output to find what failed. Unblock theme and plugin assets in robots.txt, allow anonymous access to the endpoints the page needs, and make sure consent tools do not hide the main content from the rendered page. The theme or plugin developer may need to fix a script error.

Maintenance. Serve a 503 while the site is intentionally unavailable. Google’s HTTP status documentation says 5xx errors make its crawlers “temporarily slow down with crawling,” and its troubleshooting page warns that returning 503 or 429 “for more than a few days will cause Google to permanently slow or stop crawling URLs on your site,” and that returning them for more than 2 days “will cause Google to drop those URLs from the index.” Keep the window short.

Uncertain classification. If the page is complete and renders correctly, make its main content unmistakable near the top: a clear heading, the actual content, and no text that reads like an error, such as “no results” widgets or “item unavailable” labels left in the template. Then recheck. If the classification persists and every check passes, record that the evidence does not identify a cause.

WP Visibility’s wp visibility post-audit <id> warns when a post has fewer than 150 words. That can help you spot thin placeholder posts, but it is an editing check, not a soft 404 detector; see Run the Site Audit.

Verify and validate

  1. Repeat the curl status check. Missing pages should now return 404 or 410; useful pages should return 200.
  2. Run Test live URL again and compare the screenshot with the visitor’s view.
  3. Open “Soft 404” in the Page Indexing report and click Validate fix. Google says validation typically takes up to about two weeks and sometimes much longer.
  4. Record which class each URL was in, the change made, and the date.

URLs you converted to real 404s should move to “Not found (404),” which is the correct outcome. For how this reason fits among the others, start from the indexing triage guide.

Read next

WordPress SEO with your own assistant.

WP Visibility is $99 a year for unlimited sites, client sites included, with a 30-day refund. Use its SEO tools in WordPress or connect a supported assistant. Read how proposal review and permissions work.