406 Not Acceptable は、Accept、Accept-Language、Accept-Encoding などクライアントのネゴシエーション用ヘッダーに合う表現が対象リソースになく、サーバーがデフォルトの表現を送るつもりもないことを示します。ボディには、ユーザーやクライアントが選べるよう、利用可能な表現を列挙する必要があります。
実際には、ほとんどのサーバーは満たせない希望を無視してデフォルトの表現を送ります。これは RFC 9110 でも明示的に認められています。そのため 406 が現れるのは主に、特定のメディアタイプしか提供しない API です。たとえば、Accept: application/xml を受け取った JSON API などです。
ホスティング事業者の中には、ブロックしたリクエストに 406 を返すよう、ModSecurity などのセキュリティモジュールを設定しているところもあります。そのため 406 は、ネゴシエーションの問題ではなく、ファイアウォールの判断である場合もあります。
レスポンス例
HTTP/1.1 406 Not Acceptable
Date: Fri, 06 Nov 2026 10:15:32 GMT
Vary: Accept
Content-Type: application/json
Content-Length: 57
{"error":"Available formats: application/json, text/csv"} SEO とリダイレクトチェック
クローラーは幅広い Accept ヘッダーを送るため、406 を受け取ることはないはずです。もし受け取った場合、その URL は 4xx エラーとして扱われ、インデックスされません。ブラウザーではページが表示されるのにリダイレクトチェックで 406 が返る場合は、自分で追加したカスタムの Accept ヘッダーや、ユーザーエージェントや URL に一致するセキュリティルールを確認してください。
よくある原因と主な用途
- API が JSON にしか対応していないのに、クライアントが XML などの形式を要求した場合。
Accept-Languageを厳密に扱う設定で、一致する翻訳もフォールバックもない場合。- 共用サーバーの ModSecurity や WAF のルールが、リクエストを 406 でブロックしている場合。