Understanding HTTP Redirect Status Codes (RFC 9110)
Hypertext Transfer Protocol (HTTP) redirects inform user agents, web browsers, and search engine crawlers that the requested resource has relocated. How you implement redirects directly affects crawl budget, indexation velocity, and Core Web Vitals Time to First Byte (TTFB).
| STATUS CODE | RFC DEFINITION | SEARCH ENGINE HANDLING | LINK EQUITY (PAGERANK) |
|---|---|---|---|
| 301 | Moved Permanently | Updates search index to target URL; caches aggressively. | Passes ~100% Equity |
| 302 | Found (Temporary) | Retains original URL in index; re-crawls origin periodically. | Equity Delayed / Held |
| 307 | Temporary Redirect | Preserves HTTP POST body method intact during redirection. | Temporary (No Equity) |
| 308 | Permanent Redirect | Permanent migration preserving HTTP request method (e.g. POST). | Passes ~100% Equity |
Why Multi-Hop Redirect Chains Damage Site Performance
A redirect chain happens when URL A redirects to URL B, which in turn redirects to URL C. In modern web environments, this frequently occurs due to misaligned server configurations:
- Protocol & Subdomain Stacking:
http://example.com→http://www.example.com→https://www.example.com→https://example.com/(3 avoidable hops). - Trailing Slash Conflicts: CMS routing engine adds or strips trailing slashes after the initial redirect.
- Affiliate & Shortener Wrappers: Ad networks routing clicks through multiple measurement redirects before reaching the merchant.
Each intermediate hop requires a complete TCP handshake, TLS negotiation, and DNS lookup if switching domains. On mobile cellular connections (4G/5G), this introduces an average penalty of 180ms to 350ms per hop, drastically elevating your Largest Contentful Paint (LCP) and harming your Core Web Vitals pass rate.
Recommended Server Configurations (1-Hop Fixes)
Ensure your web server configuration (Nginx or Apache) resolves protocol and canonical host simultaneously in a single directive:
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.example.com;
return 301 https://example.com$request_uri;
}