Reference guide · http-status · Published 2026-08-15 · 3 min read
HTTP 300 Multiple Choices explained
Understand HTTP 300 Multiple Choices, its Location header role, and why modern servers prefer explicit redirects like 301 or 302.
- ·What it means
- ·Why it is rare
- ·Choosing a real redirect
What 300 Multiple Choices means
300 Multiple Choices is an HTTP status that tells the client a resource is available in more than one representation, so the client should choose. The server may offer a list of options in the response body or point to a preferred one with a Location header.
In practice this historically served one of two niche uses: letting a user-agent pick which language or format of a resource it wanted, and machine-readable content negotiation, where a server that cannot decide for the client lists the alternatives. Both are almost always solved better with an explicit redirect now.
Why it is rare
Few servers ever return 300. Real content negotiation on the web is handled by the Vary header (as covered in the caching guide) or by a library on the client, not by asking the client to choose a 300 option manually. Browsers historically displayed a selection list, but for a normal website you want a URL that leads directly to the right content, not a menu mid-request.
Any search engine or user that hits a 300 has to interpret an ambiguity that a modern 301, 302, or 303 would resolve in one step. Because the meaning depends on the client, it is unpredictable and therefore rarely the right call for SEO or user experience.
Where it does appear
You may still see 300 Multiple Choices from older HTTP libraries or specialised link-negotiation services, and some servers return it when several document representations exist and none is an obvious default. It is not wrong to implement; it is just uncommon because every mainstream case now has a sharper tool.
Choosing a real redirect
When you want the browser or a search engine to land on one specific URL:
| Need | Status |
|---|---|
| Resource moved permanently | 301 |
| Temporary move | 302 or 307 |
| Keep the result for a "see also" style resource | 303 |
Use a single explicit redirect for each case instead of a 300 list, which the 301 guide and 302 guide cover in detail. The status-family reference in the full status list sets 300 alongside its redirect neighbours, so you can compare them at a glance.
If you ever inherit a system that responds 300, the robust fix is to choose a default variant and send a 301 (permanent) or 302/307 (temporary) to it, giving clients an unambiguous target instead of a choice screen.