web-dev-qa-db-fra.com

Lorsque la langue de la page peut être déterminée par les paramètres du navigateur, quelles URL doivent être insérées dans les sitemaps?

À ce moment, notre site Web utilise à la fois le langage utilisé dans l'URL comme "en" et localise l'URL elle-même ("books" en anglais et "boeken" en néerlandais). En raison de l'historique de la multilinguisme de notre site Web, nous avons un système qui prend la langue du navigateur pour la localisation si l'URL ne contient pas une langue comme "en".

Ça signifie:

  • www.test.com/books = langue du navigateur
  • www.test.com/en/books = langue anglaise
  • www.test.com/boeken = langue du navigateur
  • www.test.com/nl/boeken = langue néerlandaise

Maintenant, pour le plan du site, cela me gêne un peu, car quel hreflang est utilisé pour quelle url?

1) La première chose à laquelle j'ai pensé a été d'utiliser x-default pour toutes les urls qui utilisent la langue du navigateur.

<url>
    <loc>http://www.test.com/books</loc>
    <xhtml:link rel="alternate" hreflang="x-default" href="http://www.test.com/books" />
    <xhtml:link rel="alternate" hreflang="x-default" href="http://www.test.com/boeken" />
    <xhtml:link rel="alternate" hreflang="en" href="http://www.test.com/en/books" />
    <xhtml:link rel="alternate" hreflang="nl" href="http://www.test.com/nl/boeken" />
</url>  

Mais comme vous pouvez le constater, nous avons maintenant 2 fois x-default.

2) Une autre solution à laquelle je pensais était simplement d'utiliser la localisation de l'URL pour déterminer la langue comme:

<url>
    <loc>http://www.test.com/books</loc>
    <xhtml:link rel="alternate" hreflang="en" href="http://www.test.com/books" />
    <xhtml:link rel="alternate" hreflang="nl" href="http://www.test.com/boeken" />
    <xhtml:link rel="alternate" hreflang="en" href="http://www.test.com/en/books" />
    <xhtml:link rel="alternate" hreflang="nl" href="http://www.test.com/nl/boeken" />
</url>  

Mais maintenant nous avons 2 de chaque langue pour la même page.

) La dernière solution à laquelle j'ai pensé était de supprimer les liens sans langue dans l'URL (à l'exception de la page d'accueil, qui aura toujours un x-default) comme:

<url>
    <loc>http://www.test.com/en/books</loc>
    <xhtml:link rel="alternate" hreflang="en" href="http://www.test.com/en/books" />
    <xhtml:link rel="alternate" hreflang="nl" href="http://www.test.com/nl/boeken" />
</url>  

Mais pour cette solution, je dois mettre 301 à des pages qui sont "supprimées" et aussi changer le système en 301 à la bonne page. Bien que le dernier point ne pose pas vraiment de problème, je suis un peu inquiet de perdre certains "points de référencement" avec un 301. (Lorsque nous avons changé de domaine par le passé, nous avons eu une mauvaise expérience avec les 301 de nos ancien domaine)

Selon vous, quelle serait la meilleure solution pour le référencement? Ou avez-vous d'autres suggestions ou solutions auxquelles je n'ai pas pensé?.

2
Julian

Je pense que ce que vous voudrez faire, c'est changer le fonctionnement de votre système. Si aucune langue n'est spécifiée dans l'URL, mais que vous la détectez via les paramètres du navigateur, votre site doit alors redirection l'utilisateur vers une URL contenant cette langue dans le chemin. C'est pour deux raisons:

1) Dupliquer le contenu. Les araignées/bots viendront sur les URL test.com/books, test.com/booken et test.com/en/books, et verront le même contenu dans les 3 URL si l'en-tête de l'araignée Accept-Language est anglais. Par exemple, Googlebot arrive et explore test.com/books, test.com/booken et test.com/nl/booken avec l'en-tête Accept-Language du néerlandais, Google affichera exactement le même contenu pour les 3 URL. Hreflang x-default ne vous aidera pas, car dans votre cas, la "valeur par défaut" n’est pas en fait une langue par défaut, mais détecte la langue à afficher.

2) Cela résout votre problème de ne pas savoir quelle URL correspond à quelle langue et rend la hiérarchie linguistique de votre site beaucoup plus facile à comprendre pour les bots (et les humains). Ainsi, il sera beaucoup plus probable que les utilisateurs accèdent à la page qu'ils souhaitent réellement, sans aucune redirection.

Vous pouvez vous y prendre de deux manières. Ce que je fais avec un de mes clients, c’est que test.com/books est la variante anglaise (et la valeur par défaut), mais si l’utilisateur vient à cette URL avec un Accept-Language qui n’est pas anglais, et 302 que nous prenons en charge, nous les redirigeons vers test.com/nl/booken. S'ils sont anglais, nous les laissons sur test.com/books (nous ne spécifions pas l'anglais dans l'URL. Ce n'était pas mon choix, mais mes chefs qui ne voulaient tout simplement pas le faire "correctement" ses propres raisons).

Alternativement, dans votre cas, vous pouvez également rediriger les locuteurs anglais vers test.com/fr/books, ce qui le rendrait encore plus explicite pour Spiders, quelle URL correspond à quelle langue, puis laissez l'URL non linguistique comme seul moyen de langue détection. Ainsi, Google saurait que les anglophones vont sur test.com/fr/books, les néerlandophones sur test.com/nl/booken. Si le chercheur ne travaille dans aucune de ces langues, il accède à test.com/books. (vous devriez vraiment essayer de n'avoir qu'une seule URL "par défaut") et Google vous permet de trier la langue de votre site Web.

Ensuite, pour nettoyer vos anciennes URL néerlandaises et en conserver le moindre lien, vous voudrez probablement 301 rediriger test.com/booken vers test.com/nl/booken.

3
nathangiesbrecht

Je veux ajouter que les redirections devraient être 301 et non 302 car 302 signifie "trouvé", mais 301 effectuent une redirection permanente et affichent l'URL correcte dans la barre d'adresse pour que les utilisateurs puissent marquer la page dans la langue appropriée.

De plus, avec l'en-tête accept, vous devez choisir la langue avec la préférence la plus élevée dans la liste des langues.

Consultez cette RFC 2616 - Section 14 - Définitions de champ d’en-tête
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Il indique ce qui suit:

Le champ en-tête de demande Accept-Language est similaire à Accept, mais limite l'ensemble des langues naturelles préférées pour répondre à la demande. Les étiquettes de langue sont définies à la section 3.10.

...

Chaque plage de langue PEUT se voir attribuer une valeur de qualité associée qui représente une estimation de la préférence de l'utilisateur pour les langues spécifiées par cette plage. La valeur de qualité par défaut est "q = 1". Par exemple,

Accept-Language: da, en-gb;q=0.8, en;q=0.7

signifierait: "Je préfère le danois, mais accepterai l'anglais britannique et d'autres types d'anglais."

Il est donc préférable d’écrire un code côté serveur prenant la valeur de l’en-tête accept-language comme bande d’entrée, le nom préféré de l’entrée, puis émettez une redirection 301 vers la page appropriée en fonction du code.

0
Mike