web-dev-qa-db-ja.com

言語リダイレクトの適切なステータスコード(301、302、…307)?

複数の言語でウェブサイトを構築しました。 URLは次のようになります。

  • http://www.example.com/en/
  • http://www.example.com/de/

ユーザーがメインドメインhttp://www.example.com/にアクセスすると、Webサーバーはユーザーの言語(Accept-Languageヘッダー)を検出し、上記のURLのいずれかにリダイレクトします。

これまで、ユーザーは他の言語設定で戻ることができ、他の言語設定にリダイレクトする必要があるため、一時リダイレクト(302)を使用しました。

別の question では、307の使用が推奨されます。

307一時的なリダイレクト

この場合、別のURIを使用して要求を繰り返す必要があります。ただし、今後のリクエストでは元のURIを引き続き使用する必要があります。 302が歴史的にどのように実装されていたかとは対照的に、元のリクエストを再発行するときにリクエストメソッドを変更することはできません。たとえば、POSTリクエストは、別のPOSTリクエストを使用して繰り返す必要があります。

問題は、言語のリダイレクトに適切なステータスコードは何ですか?

7
ar099968

ユーザーの言語に基づいた自動リダイレクトの問題は、それがユーザーと検索エンジンがサイトのすべてのバージョンを表示できなくなる可能性があることです

最良のアプローチは、ページの各言語バージョンをクロスリンクすることです。これにより、ユーザーは言語セレクターで簡単に目的の言語に到達でき、検索エンジンが混乱することはありません(多くの場合、ロケールに対応したクロールが推奨されます) 。

たとえば、スペイン語(es)と英語(en)のページがある場合、rel="alternate" hreflang="x"-で適切なurlsを指定できますlinkスペイン語版と英語版へのリンクに加えて、自身のタグ

<link rel="alternate" href="http://example.com/es" hreflang="es" />
<link rel="alternate" href="http://example.com/en" hreflang="en" />
1
marcanuy

ユーザーの場合、302または307のリダイレクトが適切です。これらと301リダイレクトの唯一の実際的な違いは、キャッシュです。ブラウザは301リダイレクトをキャッシュします。ユーザーがブラウザの言語設定を変更する場合、ルートページにアクセスして別の方法でリダイレクトできるとよいでしょう。したがって、キャッシュ不可の302または307リダイレクトを使用するのが適切です。

通常、検索エンジンのクローラーはAccept-Languageヘッダーを送信しません。 Accept-Languageヘッダーが存在しないときにリダイレクトを発行するのではなく、すべての選択肢へのリンクがあるページを表示する必要があります。これにより、ルートページへのリンクがすべての言語にPageRankを渡すことができます。代わりにリダイレクトすると、すべてのPageRankがデフォルトの言語に渡されます。他の言語は失われます。

1