Last updated
HTTP Status Code Reference
The HTTP Status Code Checker tests URLs and returns their status codes. Here is a complete reference of all status code categories:
/* 2xx — Success */
200 OK → Request succeeded, response body contains the resource
201 Created → Resource created successfully (POST/PUT)
204 No Content → Success, no response body (DELETE, some PUT)
206 Partial Content → Partial resource returned (range requests)
/* 3xx — Redirection */
301 Moved Permanently → Permanent redirect — passes link equity (SEO)
302 Found → Temporary redirect — does NOT pass link equity
303 See Other → Redirect to GET after POST (form submission)
304 Not Modified → Cached version is still valid (conditional request)
307 Temporary Redirect → Temporary redirect, preserves HTTP method
308 Permanent Redirect → Permanent redirect, preserves HTTP method
/* 4xx — Client Errors */
400 Bad Request → Invalid request syntax or parameters
401 Unauthorized → Authentication required
403 Forbidden → Authenticated but not authorized
404 Not Found → Resource does not exist
405 Method Not Allowed → HTTP method not supported for this endpoint
409 Conflict → Request conflicts with current state
410 Gone → Resource permanently removed (better than 404 for SEO)
422 Unprocessable → Validation errors in request body
429 Too Many Requests → Rate limit exceeded
/* 5xx — Server Errors */
500 Internal Server Error → Unhandled server exception
502 Bad Gateway → Upstream server returned invalid response
503 Service Unavailable → Server temporarily down (maintenance/overload)
504 Gateway Timeout → Upstream server timed out
Checking Redirect Chains
The checker follows all redirects and shows each step in the chain. Here are common redirect patterns:
/* HTTP to HTTPS redirect (correct) */
Step 1: GET http://example.com/page
→ 301 Moved Permanently
→ Location: https://example.com/page
Step 2: GET https://example.com/page
→ 200 OK
→ Total redirects: 1 ✓
/* www to non-www redirect (correct) */
Step 1: GET https://www.example.com/page
→ 301 Moved Permanently
→ Location: https://example.com/page
Step 2: GET https://example.com/page
→ 200 OK
/* Redirect chain (too many hops — bad for SEO) */
Step 1: GET http://www.example.com/old-page
→ 301 → https://www.example.com/old-page
Step 2: GET https://www.example.com/old-page
→ 301 → https://example.com/old-page
Step 3: GET https://example.com/old-page
→ 301 → https://example.com/new-page
Step 4: GET https://example.com/new-page
→ 200 OK
→ ⚠ 3 redirects — consolidate to 1 for better performance
/* Redirect loop (error) */
Step 1: GET https://example.com/a → 302 → /b
Step 2: GET https://example.com/b → 302 → /a
Step 3: GET https://example.com/a → 302 → /b
→ ✗ Redirect loop detected — browser will show ERR_TOO_MANY_REDIRECTS
SEO Implications of Status Codes
Different status codes have different effects on search engine indexing and link equity:
/* 301 vs 302 — critical SEO difference */
301 Permanent Redirect:
URL: /old-page → /new-page
Effect: Link equity (PageRank) passes to /new-page
Indexing: Search engines update their index to /new-page
Use when: Page has permanently moved
302 Temporary Redirect:
URL: /sale → /products?discount=true
Effect: Link equity stays on /sale
Indexing: Search engines keep /sale in index
Use when: Redirect is genuinely temporary
/* 404 vs 410 — removal signals */
404 Not Found:
Effect: Search engines continue crawling periodically
Removal: Slow — may take weeks/months to deindex
Use when: Page might come back
410 Gone:
Effect: Search engines stop crawling immediately
Removal: Fast — deindexed quickly
Use when: Page is permanently removed
/* Soft 404 — common problem */
Status: 200 OK
Content: "Page not found" or "No results"
Problem: Search engines index the error page as real content
Fix: Return 404 or 301 redirect to relevant page
Batch URL Status Check Results
The checker can test multiple URLs at once. Here is a sample batch check output for a site migration:
/* Batch check results — post-migration audit */
URL Status Redirect Target Time
------------------------------------- ------ --------------------------------- -----
https://example.com/ 200 - 245ms
https://example.com/about 200 - 198ms
https://example.com/old-blog 301 https://example.com/blog 89ms
https://example.com/products/widget-1 200 - 312ms
https://example.com/products/widget-2 404 - 156ms ⚠
https://example.com/contact 200 - 201ms
https://example.com/old-contact 302 https://example.com/contact 78ms ⚠
https://example.com/sitemap.xml 200 - 134ms
https://example.com/admin 401 - 167ms
Issues found:
⚠ /products/widget-2 returns 404 — check if redirect needed
⚠ /old-contact uses 302 (temporary) — should be 301 (permanent)
API Status Code Best Practices
RESTful APIs should return semantically correct status codes for each scenario:
/* GET /users/123 */
200 OK → User found, returned in body
404 Not Found → User 123 does not exist
401 Unauthorized → No auth token provided
403 Forbidden → Token valid but no permission to view this user
/* POST /users */
201 Created → User created, Location header points to new resource
400 Bad Request → Missing required fields or invalid format
409 Conflict → Email address already registered
422 Unprocessable → Validation failed (email format invalid, etc.)
/* DELETE /users/123 */
204 No Content → Deleted successfully
404 Not Found → User 123 does not exist
403 Forbidden → Cannot delete this user (e.g., last admin)
/* Common mistakes */
❌ Returning 200 for all responses including errors
❌ Using 404 for "no results" in a list endpoint (use 200 with empty array)
❌ Using 403 when 401 is correct (not authenticated vs not authorized)
❌ Using 500 for validation errors (use 400 or 422)
/* Response time benchmarks */
< 100ms → Excellent
100-300ms → Good
300-1000ms → Acceptable
> 1000ms → Needs optimization (check database queries, caching)