Table of Contents
404 errors in Google Search Console mean Google tried to crawl a URL on your site and got a "page not found" response. Left unfixed, they waste crawl budget, dilute link equity, and create a frustrating experience for anyone following old links to your site.
The good news: 404 errors are one of the most straightforward technical SEO issues to fix. This guide walks you through finding them, understanding their severity, and resolving them for good.
Where to Find 404 Errors in Google Search Console
Google Search Console reports 404s in two places:
1. Pages with crawl anomalies (Coverage → Not Found)
Go to Index → Pages (formerly Coverage) in the left sidebar. Under the "Error" or "Excluded" tabs, look for:
- "Not found (404)" — pages Google tried to crawl that returned a 404
- "Soft 404" — pages that returned a 200 status but Google determined the content was equivalent to a not-found page
Click on any status to see the affected URLs.
2. URL Inspection Tool
For a specific URL you're investigating, use the URL Inspection Tool (top search bar in GSC). Enter the full URL and Google will show you the last crawled status, including whether it returned a 404.
Not All 404 Errors Are Equal
Before fixing everything, prioritize. Some 404s don't need to be fixed at all.
High priority — fix these:
- Pages that previously had backlinks pointing to them
- Pages that had significant organic traffic before they were removed
- URLs that appear in your XML sitemap
- Internal links pointing to 404 pages
Low priority — can often ignore:
- Junk URLs that bots invented (e.g.,
/wp-admin/,/phpmyadmin/, random paths) - Old URLs that were never real pages on your site
- Pages removed intentionally with no replacement content
To check whether a 404 URL had backlinks, copy the URL and run it through a backlink checker. If other sites link to it, it's worth redirecting.
The 5 Root Causes of 404 Errors (and How to Fix Each)
Cause 1: You deleted a page without a redirect
The most common cause. You removed a product, deleted a blog post, or restructured your site — and the old URL now returns 404.
Fix: Set up a 301 redirect from the old URL to the closest equivalent page. A 301 passes roughly 90% of the original page's link equity to the destination.
Where to add redirects depends on your platform:
- WordPress: Use a plugin like Redirection or add rules to
.htaccess - Shopify: Settings → Navigation → URL Redirects
- Next.js / Vercel: Add to
redirectsinnext.config.jsorvercel.json - Apache:
.htaccessfile withRewriteRule - Nginx:
return 301in your server block
If there's no equivalent page to redirect to, redirect to the category or parent page. If no reasonable destination exists, let it 404 — don't redirect everything to the homepage, as that creates "soft 404" problems.
Cause 2: You changed the URL slug
You renamed a page from /old-blog-post to /new-blog-post without redirecting the old URL.
Fix: Same as above — add a 301 redirect from the old slug to the new one. Also update any internal links pointing to the old URL.
Cause 3: Internal links point to the wrong URL
A typo or outdated link in your navigation, blog posts, or footer is sending both users and Googlebot to a URL that doesn't exist.
Fix: Search your site's codebase or CMS for the broken URL and update it to the correct destination. This is also an opportunity to audit all internal links for freshness.
Cause 4: Your sitemap references dead URLs
If your XML sitemap lists URLs that return 404, Google wastes crawl budget and may penalize your overall indexing quality.
Fix: Audit your sitemap. Remove any URLs that 404 (or redirect). Most platforms regenerate sitemaps automatically once you fix the underlying pages, but verify the sitemap is clean after making changes.
Cause 5: External links point to old URLs
Other websites linked to a URL that no longer exists on your site. You can't edit their links, but you can handle the inbound traffic gracefully.
Fix: Set up a 301 redirect from the 404 URL to the best matching page. This captures the link equity and sends any visitors who click the link somewhere useful.
Step-by-Step Fix Process
- Export the 404 URLs from GSC Pages report (download the full list as CSV)
- Sort by priority — backlinked URLs first, then any that appear in your sitemap, then internal link sources
- For each URL, determine: Was this a real page? Does a replacement page exist?
- Create redirects for URLs that had traffic, backlinks, or internal links
- Update internal links pointing to 404 pages
- Regenerate and resubmit your sitemap once fixes are in place
- Request reindexing using the URL Inspection Tool for high-priority pages
- Wait 1–2 crawl cycles (typically 1–4 weeks) and verify the 404s clear from the Pages report
How to Tell Google You've Fixed the Error
After implementing redirects or restoring a page, you can accelerate Google's awareness:
- In GSC, go to the URL Inspection Tool
- Enter the old URL (or the redirecting URL)
- Click "Request Indexing"
This doesn't guarantee an immediate re-crawl, but it puts the URL in the priority crawl queue. For most sites, errors clear from the Coverage report within 2–4 weeks of being fixed.
What About Soft 404 Errors?
A soft 404 is when your server returns a 200 OK status code, but Google determines the page content is effectively empty or a "not found" message. This commonly happens when:
- Your CMS shows a "no results" or "page not found" template with a 200 status instead of a real 404
- You redirect deleted products to a generic category page that's nearly empty
- A page loads successfully but its content says "this page no longer exists"
Fix for soft 404s: Either restore real content to the URL, set up a proper 301 redirect to a relevant destination, or return a genuine 404 status code so Google knows the page is intentionally gone.
Preventing Future 404 Errors
Once you've cleared your 404 backlog, set up systems to catch new ones before they compound:
- Monthly GSC audit: Check the Pages report for new 404s at least monthly
- Redirect checklist: Make URL redirects a required step in your content publishing or site restructuring workflow
- Broken link monitoring: Use a tool that crawls your site and alerts you to internal 404s
- Sitemap hygiene: Verify your sitemap auto-removes or flags deleted pages
Google Search Console will continue reporting new 404s as Google discovers them, so the Pages report is your ongoing monitoring dashboard.
Quick Reference: 404 Fix Decision Tree
URL returns 404
│
├─ Was it a real page with traffic or backlinks?
│ ├─ YES → Set up 301 redirect to best matching page
│ └─ NO → Was it in your sitemap or linked internally?
│ ├─ YES → Fix sitemap/internal link, let it 404 naturally
│ └─ NO → Ignore (bot-invented URL, not your content)
│
└─ After fixing:
├─ Request reindexing via URL Inspection Tool
└─ Monitor Pages report for 2–4 weeks
Fixing 404 errors is one of the highest-ROI technical SEO tasks because it recovers link equity, improves crawl efficiency, and removes a negative signal from your Coverage report. Start with your highest-traffic and most-linked pages, set up a redirect workflow, and you'll keep your Pages report clean going forward.
Understanding the HTTP Status Codes That Matter
When you're fixing 404s, you'll see other status codes in your GSC and server logs. Knowing what each one means saves hours of misdiagnosis.
- 200 OK — the page loaded fine. If GSC still flags it as "Not found," look for a client-side redirect or an empty body being served with a 200 (this triggers soft 404s).
- 301 Moved Permanently — the redirect target you want in almost every case. Google eventually consolidates signals to the destination URL.
- 302 Found / 307 Temporary Redirect — temporary redirects. Google may keep the old URL indexed indefinitely. Do not use 302/307 for permanent removals.
- 308 Permanent Redirect — like 301 but preserves the HTTP method. Fine for permanent moves, especially on APIs.
- 404 Not Found — the correct response for URLs that truly don't exist and were never real pages.
- 410 Gone — a stronger signal than 404. Tells Google the page is intentionally and permanently removed. Use 410 for deliberately deprecated content (canceled products, retired campaigns, DMCA takedowns) — Google de-indexes 410s faster than 404s.
- 451 Unavailable For Legal Reasons — use only for legally required takedowns; Google respects this and keeps the URL out of the index.
- 500 / 503 — server errors. If GSC shows a 404 but curl returns 500, the underlying cause is a broken deploy or crashed process, not a missing route.
The short rule: 404 = "we don't know this page," 410 = "this page is gone on purpose." If you're deleting content permanently and want Google to drop it fast, return 410. This is especially useful for pruning thousands of stale programmatic pages at once.
Verifying the Actual Response Code (Before You Fix Anything)
GSC's reports lag real-time by several days, so before you spend an afternoon redirecting URLs, confirm what your server is actually returning right now.
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/missing-page
For a batch check, export the URLs from GSC as CSV and loop:
while IFS= read -r url; do
code=$(curl -s -o /dev/null -w "%{http_code}" -L "$url")
echo "$code $url"
done < urls.csv | sort | uniq -c
Follow redirects with -L to see the final status. Add -I to inspect headers only (faster and lighter). If your list is large, use xargs -P 10 to parallelize. This step catches URLs that were already fixed but are still lingering in the GSC report, and it distinguishes a real 404 from a 500 masquerading as a 404 in the UI.
If you rely on Search Console reports directly, our Search Console Tools dashboard auto-monitors your Pages report, deduplicates against fixes already deployed, and pushes a diff to Slack so you're not manually re-checking a CSV every week.
Redirect Snippets by Platform
Bookmark this section. Every 404-fix workflow eventually needs it.
Next.js (next.config.js)
module.exports = {
async redirects() {
return [
{ source: '/old-post', destination: '/new-post', permanent: true },
{ source: '/blog/:slug', destination: '/articles/:slug', permanent: true },
]
},
}
permanent: true sends a 308 (safe for GET, treated like a 301 by Google). Wildcard params work with the :slug syntax.
Vercel (vercel.json)
{
"redirects": [
{ "source": "/old", "destination": "/new", "permanent": true },
{ "source": "/products/:id", "destination": "/shop/:id", "permanent": true }
]
}
Cloudflare Pages / Workers (_redirects)
/old-post /new-post 301
/products/* /shop/:splat 301
Runs at the CDN edge — zero origin latency.
Nginx
server {
location = /old-post { return 301 /new-post; }
location ~ ^/products/(.*)$ { return 301 /shop/$1; }
}
Apache (.htaccess)
RewriteEngine On
Redirect 301 /old-post /new-post
RewriteRule ^products/(.*)$ /shop/$1 [R=301,L]
WordPress
The "Redirection" plugin is the standard — free, actively maintained, and it writes to the database (survives theme changes). "Yoast Premium" has built-in redirects with 404 auto-capture. For high-traffic sites, avoid PHP-based redirect plugins and push rules into your web server config instead — plugin redirects add a database query per request.
Shopify
Admin → Content → Menus → View URL redirects. Bulk-import via CSV: two columns, Redirect from and Redirect to. Shopify auto-creates 301s from old product URLs when you change a handle, but only if the product is still in your catalog — deleted products need manual redirects.
Squarespace / Wix / Webflow
Each has a URL redirect panel in Settings → SEO. All emit 301s. Bulk import varies (Webflow supports CSV; Squarespace is manual).
Avoiding the Three Common Redirect Failures
- Redirect chains.
A → B → C → Dbleeds link equity and slows crawlers. Google follows up to 10 hops but treats long chains as a soft signal to devalue the URL. Consolidate toA → D,B → D,C → Ddirectly. - Redirect loops.
A → B → Acreates an infinite loop and returns a browser error. Usually caused by conflicting rules in different layers (CDN + app). Diagnose withcurl -ILand count the hops. - Redirect-to-homepage. Redirecting every 404 to
/is Google's textbook definition of a soft 404. Google treats homepage-redirects as "we couldn't find a relevant match" and often keeps the old URL out of the index anyway. Redirect to the closest topical parent, not the homepage.
You can audit your entire redirect map for chains and loops with:
curl -sIL https://example.com/old-url | grep -iE "^(HTTP|location)"
For large sites, use a crawler like Screaming Frog in "list mode" — feed it your redirect CSV and it reports chain depth, loop status, and final target for each URL.
When to Use 410 Gone Instead of 301
Redirecting isn't always the right answer. If you deliberately pruned low-quality pages (thin content, expired campaigns, spammy user-generated pages), redirecting them to a "close enough" page pollutes both your redirect map and Google's understanding of your site.
Use 410 Gone when:
- The URL was intentionally deleted with no replacement
- The content was low quality or spam and you don't want it associated with your brand
- You're doing a content pruning sweep and want Google to drop hundreds of URLs quickly
- A product line has been discontinued permanently
Nginx example:
location = /deprecated-page { return 410; }
Next.js — return 410 from a route handler:
export function GET() {
return new Response('Gone', { status: 410 })
}
In our testing, 410 URLs disappear from GSC's Pages report roughly 2× faster than 404 URLs. If you're trying to clean up a legacy sitemap of thousands of dead pages, 410 is the shortcut.
Fixing 404s Caused by Sitemap Drift
A recurring cause of "Not found" errors is a stale XML sitemap that references deleted URLs. Google trusts sitemaps as a canonical list of what you want indexed, so every 404 in your sitemap is a signal that either your sitemap or your site is broken.
Diagnosis:
curl -s https://example.com/sitemap.xml | \
grep -oP '(?<=<loc>)[^<]+' | \
xargs -P 10 -I{} sh -c 'echo "$(curl -s -o /dev/null -w "%{http_code}" -L {}) {}"' | \
grep -v "^200 "
This pulls every URL from your sitemap, checks each one, and prints anything that isn't a 200. Anything in the output is either a 404 or a redirect chain to strip from the sitemap.
For programmatic sites (Next.js, Nuxt, Astro), regenerate the sitemap from the same data source that drives your routes — never hand-maintain a sitemap of more than 50 URLs. Our Search Console sitemap guide walks through submitting the cleaned file back to GSC.
Handling 404s From External Backlinks
Sometimes a URL 404s because another site linked to something you never had — a mistyped path, an outdated slug, or a URL from a previous site owner. These can still be worth capturing.
Steps:
- Export 404s from GSC and cross-reference with your backlink profile (Ahrefs, Moz, or GSC's Links report — see our GSC backlinks walkthrough).
- Rank the 404 URLs by referring-domain count and referring-domain authority.
- For any URL with a DR 40+ referring domain, set up a 301 to the closest topical match on your site.
A single high-authority link redirected correctly can outperform months of on-page SEO on a competitive keyword. This is the highest-ROI redirect work on most sites.
Automating 404 Detection
Waiting for GSC to surface 404s means you're 3–7 days behind reality. To catch them faster:
- Server log monitoring. Grep your access logs for 404 status codes daily:
awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn | head -50. - Crawl-based monitoring. Weekly crawls with Screaming Frog, Sitebulb, or open-source tools like
wget --spidercatch internal broken links before Googlebot does. - Client-side error tracking. Sentry and similar tools can catch client-navigated 404s (SPA route mismatches) that never touch the server logs.
- GSC API polling. The Search Console API exposes the Pages report programmatically — you can pull deltas hourly and post to Slack. Our GSC API guide walks through the auth flow and quota limits, or skip the plumbing and use Search Console Tools which does this out of the box.
Whichever route you take, the goal is a feedback loop of hours, not weeks. 404s left to accumulate compound — every dead internal link creates more crawl waste, and every un-redirected backlink is squandered authority.
Special Cases: Faceted URLs, Pagination, and Query Strings
Not every 404 warrants a redirect. Faceted URLs (?color=red&size=large) and paginated URLs (/blog/page/47) often 404 correctly once the underlying inventory changes. The fix isn't a redirect — it's telling Google not to crawl these in the first place:
- Use
robots.txtto disallow faceted parameters that shouldn't be indexed - Use
rel="canonical"on paginated pages pointing to the first page (or leave each page self-canonical if content differs meaningfully) - Remove faceted URLs from your sitemap entirely
- Use the URL Parameters tool (in the legacy GSC, but the concept applies) to signal how parameters affect content
Fixing the discovery side (what Google is allowed to crawl) is more efficient than fixing the response side (what Google gets when it crawls something you didn't intend to expose).
FAQ
How long does it take for 404 errors to disappear from Google Search Console after I fix them?
Typically 2–4 weeks. Google recrawls fixed URLs on its own schedule; you can accelerate it by requesting reindexing via the URL Inspection Tool for high-priority pages and by keeping your sitemap current. If a 404 has been "excluded" for months, it can take longer to clear because Google recrawls low-value URLs less often.
Should I redirect 404 URLs to my homepage?
No. Google treats mass redirects to the homepage as soft 404s and often keeps the original URL out of the index anyway. Redirect to the closest topical parent page, or let the URL 404 naturally if no reasonable destination exists.
What's the difference between a 404 and a soft 404?
A 404 is an HTTP status code your server explicitly returns when a page doesn't exist. A soft 404 is when your server returns 200 OK but Google decides the content is effectively empty or a "not found" template. Fix soft 404s by returning a real 404 status code, restoring real content, or setting up a proper 301 redirect.
Is it better to use 404 or 410 for a permanently deleted page?
410 Gone is a stronger, faster signal. Google de-indexes 410 URLs typically 2× faster than 404s. Use 410 for content you deliberately removed and never want back; use 404 when the URL was never a real page.
Do 404 errors hurt my SEO rankings?
A few 404s from bot-invented URLs are harmless. Large numbers of 404s on pages that used to have traffic or backlinks hurt because you lose link equity and Google wastes crawl budget on dead URLs. The problem isn't the 404 itself — it's the un-redirected backlink and the drained crawl budget.
How do I fix 404 errors from URLs I've never seen before?
These are usually bot-generated (/wp-admin/, /xmlrpc.php, random paths from scrapers). If they've never existed on your site, ignore them. Let your server return a clean 404 — Google will eventually stop trying.
Can I use a 302 redirect instead of a 301?
Only for genuinely temporary moves (a page under maintenance, a seasonal campaign that will return). 302s tell Google to keep the old URL indexed, which is the opposite of what you want when fixing 404s from deleted content. For permanent moves, always use 301 or 308.
How do I redirect thousands of URLs efficiently?
Use pattern-based redirects (regex, wildcard) at your server or CDN layer rather than one line per URL. Cloudflare Workers, Vercel redirects(), and Nginx regex rules all support this. For non-pattern lists, keep the redirect map in a database or key-value store and match at the edge — a 10,000-line .htaccess file becomes a performance liability.
My 404 errors keep coming back even after I fix them. Why?
Usually one of three causes: (1) internal links inside your CMS still point to the old URL, (2) your sitemap is regenerating with the deleted URLs still included, or (3) a redirect rule was added at one layer (app) but overridden at another (CDN or reverse proxy). Trace with curl -IL to see which layer is winning.
Want to skip the manual audit? Search Console Tools surfaces your 404 backlog, ranks it by traffic and backlink impact, and monitors your fixes so nothing regresses. Free to try.
Run a Free AI Citation Audit
Are you in the AI Overview? Get a free report showing how often ChatGPT, Claude, and Gemini cite your brand, plus the 3 blockers preventing your discovery in 2026.
No spam. 1-click unsubscribe. Join 1,200+ SEO teams managing the GEO pivot.