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 .var type map file, each variant entry must reference a final resource file, not another type map or negotiable URI. Open the type map and confirm every URI: line resolves to a static file.
  • MultiViews. When Options MultiViews is enabled, Apache auto-negotiates based on file extensions. A file named page.html.en sitting next to a page.var file creates ambiguity. Disable MultiViews for 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

Last updated: March 11, 2026