web-dev-qa-db-fra.com

Code de statut approprié pour la redirection de langue (301, 302,… 307)?

J'ai construit un site Web avec plusieurs langues. Les URL ressemblent à:

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

Si l'utilisateur accède au domaine principal http://www.example.com/, le serveur Web détecte la langue de l'utilisateur (en-tête Accept-Language) et le redirige vers l'une des URL ci-dessus.

Jusqu'à présent, nous avons utilisé une redirection temporaire (302), car l'utilisateur peut revenir avec d'autres paramètres de langue et doit ensuite être redirigé vers l'autre.

Sur un autre question , qui conseille d'utiliser 307:

307 redirection temporaire

Dans ce cas, la requête doit être répétée avec un autre URI. Cependant, les futures demandes doivent toujours utiliser l'URI d'origine. Contrairement à la manière dont l'historique 302 a été implémenté, la méthode de requête ne peut pas être modifiée lors de la réémission de la requête d'origine. Par exemple, une demande POST doit être répétée à l'aide d'une autre demande POST.

La question qui se pose est la suivante: quel est le code de statut approprié pour la redirection de langue?

7
ar099968

Le problème de la redirection automatique basée sur la langue de l'utilisateur est le suivant pourrait empêcher les utilisateurs et les moteurs de recherche d'afficher toutes les versions de votre site.

La meilleure approche consiste à créer des liens croisés avec chaque version linguistique d'une page, afin que l'utilisateur puisse atteindre facilement la langue souhaitée avec un sélecteur de langue, et que les moteurs de recherche ne soient pas déroutés (en plus des nombreuses explorations tenant compte des paramètres régionaux, elles sont toujours recommandées). .

Par exemple, si vous avez des pages en espagnol (es) et en anglais (en), vous pouvez alors spécifier leurs propres URL avec rel="alternate" hreflang="x" - lien tag pour lui-même en plus des liens vers les versions espagnole et anglaise

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

Pour les utilisateurs, une redirection 302 ou 307 convient parfaitement. La seule différence pratique entre ceux-ci et une redirection 301 est la mise en cache. Les navigateurs mettent en cache une redirection 301. Si l'utilisateur modifie les paramètres de langue de son navigateur, il serait préférable qu'il puisse visiter la page racine et rediriger les messages différemment. Il est donc approprié d’utiliser une redirection non cachable 302 ou 307.

Les robots des moteurs de recherche n'envoient généralement pas d'en-tête Accept-Language. Plutôt que d'émettre une redirection en l'absence d'en-tête Accept-Language, vous devez afficher une page contenant des liens vers tous les choix. Cela permettra aux liens vers votre page racine de passer du PageRank à toutes vos langues. Si vous redirigez plutôt, tout votre PageRank sera transmis à votre langue par défaut. Vos autres langues vont manquer.

1