506 Variant Also Negotiates
HTTP response status code 506 Variant Also Negotiates is a server error occurring during Transparent Content Negotiation. The server has an internal configuration error where a chosen variant is itself configured to engage in content negotiation, creating a circular reference.
Usage
The 506 Variant Also Negotiates status code occurs during Transparent Content Negotiation, where the protocol selects the best variant of the target resource for the client when multiple variants are available.
Variants are different versions of the subject resource. For example, a resource available in several languages has a variant for each one. Transparent Content Negotiation automatically selects the best variant when a GET or HEAD request is made.
The 506 error means the selected variant is itself configured to negotiate, resulting in a loop the server terminates.
Note
This protocol was described as experimental in 1998 and has not been officially adopted as a standard.
SEO impact
Search engines treat 506 the same as other 5xx server errors. Persistent failures reduce crawl rate and eventually remove affected URLs from the index.
Example
A client sends a GET request with an
Accept header. The server attempts content
negotiation but discovers the chosen variant
also references negotiation, resulting in a
circular configuration error.
Request
GET /docs HTTP/1.1
Host: www.example.re
Accept: text/html, application/xhtml+xml
Response
HTTP/1.1 506 Variant Also Negotiates
Content-Type: text/html; charset=UTF-8
Content-Length: 191
<html>
<head>
<title>Variant Also Negotiates</title>
</head>
<body>
<p>Content negotiation for the requested
resource resulted in a circular reference.</p>
</body>
</html>
How to fix
The server's content negotiation setup has a circular reference: a selected variant is itself configured to negotiate further. Break the loop by ensuring every variant points to a concrete representation.
Apache-specific fixes:
- Type maps. In a
.vartype map file, each variant entry must reference a final resource file, not another type map or negotiable URI. Open the type map and confirm everyURI:line resolves to a static file. - MultiViews. When
Options MultiViewsis enabled, Apache auto-negotiates based on file extensions. A file namedpage.html.ensitting next to apage.varfile creates ambiguity. DisableMultiViewsfor the directory (Options -MultiViews) and use explicit type maps or content negotiation headers instead. - Conflicting negotiation layers. If an API gateway negotiates content types and the backend also negotiates, the two layers loop. Handle negotiation at one layer only, typically the application, and pass a fixed Content-Type from the proxy.
General fixes:
- Audit the resource mapping. Trace the negotiation path from the initial request through each variant selection until reaching the response. The variant creating the loop is the one whose URI re-enters the negotiation chain.
- Temporarily disable content negotiation for the affected resource to restore service, then fix the configuration offline.
This status code is experimental and rarely seen in production. Most modern applications handle content negotiation at the application layer, avoiding the server-level transparent negotiation mechanism entirely.
Code references
.NET
HttpStatusCode.VariantAlsoNegotiates
Rust
http::StatusCode::VARIANT_ALSO_NEGOTIATES
Rails
:variant_also_negotiates
Go
http.StatusVariantAlsoNegotiates
Symfony
Response::HTTP_VARIANT_ALSO_NEGOTIATES_EXPERIMENTAL
Python3.5+
http.HTTPStatus.VARIANT_ALSO_NEGOTIATES
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_VARIANT_ALSO_NEGOTIATES
Angular
@angular/common/http/HttpStatusCode.VariantAlsoNegotiates
Takeaway
The 506 Variant Also Negotiates status code is a server error occurring during Transparent Content Negotiation when a selected variant is itself configured to negotiate, creating a circular reference.
See also
- RFC 2295: Transparent Content Negotiation in HTTP
- Google: HTTP status codes and network errors
- 500 Internal Server Error
- HTTP status codes