HTTP Status Codes for Website Owners

An HTTP status code is the three-digit number a server sends before every page. 2xx means it worked, 3xx means the page moved, 4xx means the request was wrong or the page is missing, and 5xx means the server failed. For SEO, use 301 for permanent moves, 404 or 410 for removed pages and 503 for maintenance.

The five classes
RangeClassWhat it means for your site
100 to 199InformationalRarely seen by owners; the connection is still in progress
200 to 299SuccessThe page was delivered and can be indexed
300 to 399RedirectionThe visitor is sent to another URL
400 to 499Client errorMissing page, bad request or no permission
500 to 599Server errorYour hosting or app failed; fix fast

Updated

Developer references list every code ever defined. Site owners need something narrower: which code is my page returning, what does a visitor see, what will Google do with it, and how do I fix it. Search the table below by number or word, then read the SEO and fix sections.

Status code lookup

Common codes, what visitors see and how search engines react
CodeNameVisitors seeSearch engines
200OKThe page loads normallyEligible for indexing
201CreatedUsually an API reply after saving somethingNot relevant to pages
204No ContentNothing changes on screenNothing to index
301Moved PermanentlySent to the new URL automaticallyStrong signal to show the new URL
302FoundSent to another URL for nowWeak signal; old URL may stay in results
303See OtherSent to a result page after a formTreated like a temporary redirect
304Not ModifiedThe cached copy is shownContent unchanged since the last crawl
307Temporary RedirectSent elsewhere, same method keptWeak signal, like 302
308Permanent RedirectSent elsewhere, same method keptStrong signal, like 301
400Bad RequestAn error page; the link or form data is malformedNot indexed
401UnauthorizedA login promptNot indexed
403ForbiddenAccess denied messageNot indexed
404Not FoundYour not-found pageNot indexed; dropped if it was indexed
405Method Not AllowedAn error after submitting a form the wrong wayNot indexed
410GoneYour not-found pageNot indexed; same handling as 404
429Too Many RequestsA rate limit messageTreated as a server error; crawling slows
451Unavailable For Legal ReasonsA notice that the page is blocked for legal reasonsNot indexed
500Internal Server ErrorA generic error pageCrawling slows; persistent errors drop URLs
502Bad GatewayError from the proxy or CDN in front of your appCrawling slows; persistent errors drop URLs
503Service UnavailableMaintenance or overload pageCrawling slows; fine for short downtime
504Gateway TimeoutThe page hangs, then errorsCrawling slows; persistent errors drop URLs

How to fix the common errors

First things to check by host
CodeLikely causeVercel or NetlifycPanel or Apache
403File permissions, IP block or missing index fileCheck password protection and firewall rules in project settingsSet folders to 755 and files to 644; check .htaccess deny rules
404Wrong path, deleted page or missing SPA fallbackAdd a rewrite to index.html for client-side routes; check the output folderCheck the file exists in public_html and slugs match case
500App crash or bad server configOpen the function logs for the failing requestRead the error log; a broken .htaccess line is a frequent cause
502Upstream app crashed or returned garbageCheck function logs and timeoutsRestart PHP-FPM or the app; check memory limits
503Overloaded, paused or in maintenanceCheck usage limits and paused deploymentsCheck resource limits in the host dashboard

Setting the right status in code

Permanent redirect and a removed page on Apache

Goes in .htaccess. The first line sends an old URL to its replacement with 301; the second returns 410 for a page that is gone for good.

Redirect 301 /old-pricing /pricing
Redirect gone /2019-summer-sale

Redirects and an SPA fallback on Netlify

A _redirects file in the publish folder. The last rule serves the app shell for client-side routes with a 200 status.

/old-pricing   /pricing      301
/blog/*        /articles/:splat  301
/*             /index.html   200

Maintenance response with Retry-After

A tiny Node handler that tells crawlers to come back in an hour instead of indexing the maintenance message.

import http from "node:http";

http.createServer((req, res) => {
  res.writeHead(503, { "Content-Type": "text/html; charset=utf-8", "Retry-After": "3600" });
  res.end("<h1>Back soon</h1><p>We are updating the site.</p>");
}).listen(3000);

Why the code matters more than the page text

Crawlers decide what to do with a URL from its status before reading a single word. A friendly error page with a 200 status looks like real content; a working page that accidentally returns 404 disappears from search.

Status codes are set by your server, host or framework, so the same mistake often repeats across thousands of URLs. Checking a handful of representative pages after every deploy catches it early.

Redirect chains

A chain happens when page A redirects to B, which redirects to C. It usually builds up over years of migrations: http to https, then non-www to www, then an old slug to a new one.

Each hop adds a round trip before anything renders. Flatten chains by pointing every old URL directly at the final destination, and update internal links so they never hit a redirect at all.

How it works

  1. Type a code such as 503 or a word such as redirect into the search box to filter the list.
  2. Read the visitor and search columns to see the practical effect on your site.
  3. To find which code a URL actually returns, open your browser's developer tools, choose the Network tab and reload; the Status column shows it.
  4. Use the fix table for the error you see, then recheck the status after the change.

Tips

Frequently asked questions

What is the difference between 301 and 302 for SEO?

Google treats 301 and 308 as a strong signal that the new URL should be the one shown in search, and 302 and 307 as a weak signal. Use 301 when the move is permanent and 302 only when the original URL will come back.

Should I use 404 or 410 for a deleted page?

Either works. Google's documentation says it treats all 4xx codes other than 429 the same way: the URL is not indexed, and indexed URLs returning them are dropped. 410 states more precisely that the removal is intentional and permanent.

What is a soft 404?

A soft 404 is a page that tells people it does not exist, or is nearly empty, while the server still returns 200. Search Console reports these. Fix them by returning a real 404 or 410, or by putting useful content on the page.

Do 500 errors hurt rankings?

Short outages are tolerated. Google slows its crawling when it sees 5xx responses or 429, and URLs that keep failing are eventually removed from the index. Fix persistent server errors quickly and use 503 for planned maintenance.

What is the difference between 307 and 308?

Both keep the original request method, so a form POST stays a POST after the redirect. 307 is temporary and 308 is permanent. 301 and 302 allow clients to switch a POST to GET, which is why APIs prefer 307 and 308.

Related: Redirect checker, Site migration SEO checklist, Sitemap and robots.txt examples, Next.js SEO checklist, Canonical tag checker.

Start for free or see all free tools. We.Inc is free to start, with no card needed. AI building is on paid plans from $20 a month.

More in Guides

We.Inc is an AI-powered website builder you can resell under your own brand. Launch a branded client dashboard, bill on Stripe Connect, and deliver AI-generated websites in minutes. White-label plans start at $99 a month for 25 client sites, with a 7-day free trial and no per-site fees.

Product

Who It's For

Features

Resources

Company

View Sitemap