Sélectionner la langue

Détection de Langue Basée sur le Edge avec l’En‑tête Accept-Language pour la Cohérence SEO

Les sites Web qui ciblent des publics dans plusieurs langues font face à une tension constante entre livrer la version linguistique correcte aux visiteurs humains et fournir une structure prévisible pour les robots d’indexation. La négociation de langue côté serveur traditionnelle peut introduire de la latence, ajouter de la complexité aux couches de mise en cache et parfois produire des URL incohérentes qui déconcertent les bots de recherche.

Déployer la détection de langue au edge – là où la requête rencontre d’abord le réseau de diffusion de contenu (CDN) – offre une alternative légère et à faible latence. En lisant l’en‑tête Accept‑Language (AL), une fonction edge peut décider quelle variante localisée servir, réécrire l’URL de la requête ou diriger vers une ressource pré‑générée spécifique à la langue. Lorsqu’elle est correctement implémentée, cette approche produit une URL canonique unique par langue, des annotations hreflang cohérentes et des réponses cachables qui respectent les politiques TTL du CDN.

Ci‑dessous, nous parcourons les composants essentiels d’une pipeline de détection linguistique côté edge, discutons de la conception de la clé de cache, explorons les mécanismes de secours et présentons les étapes d’implémentation compatibles SEO.

Pourquoi traiter la langue au Edge

Le traitement de la langue au edge procure trois avantages majeurs pour le SEO multilingue :

  1. Réduction du temps de trajet (RTT) – Les points de présence du edge sont géographiquement plus proches des utilisateurs finaux, réduisant la latence de l’étape de négociation initiale.
  2. Efficacité du cache – En intégrant la décision de langue dans la clé de cache, le même contenu peut être stocké une fois par variante linguistique, évitant que l’en‑tête « Vary: Accept‑Language » ne contourne la mise en cache du CDN.
  3. URL prévisibles – Les réécritures au edge peuvent mapper une requête générique (example.com) vers un chemin spécifique à la langue (example.com/en/), préservant la structure d’URL statique appréciée par les moteurs de recherche.

Ces bénéfices se traduisent directement par de meilleurs Core Web Vitals, des taux de rebond plus faibles et un signal de crawl plus clair pour les moteurs de recherche.

Anatomie d’un flux de requête au Edge

Le diagramme Mermaid suivant illustre un flux typique du navigateur client vers la fonction edge, à travers la détection de langue, puis jusqu’au serveur d’origine ou la réponse mise en cache.

  flowchart TD
    A["Client Browser"] --> B["Edge Node (CDN)"]
    B --> C["Read Accept-Language Header"]
    C --> D{"Supported Language?"}
    D -- Yes --> E["Map to Language Path"]
    D -- No --> F["Apply Fallback Logic"]
    E --> G["Construct Cache Key (URL + Lang)"]
    F --> G
    G --> H{"Cache Hit?"}
    H -- Hit --> I["Serve Cached Variant"]
    H -- Miss --> J["Fetch From Origin"]
    J --> K["Store Variant in Cache"]
    K --> I
    I --> L["Response to Client"]

Le diagramme met en évidence deux points de décision : vérifier que la langue demandée est prise en charge, et gérer les hits vs. miss du cache. Chaque branche conduit à une URL déterministe que les moteurs de recherche peuvent indexer.

Conception de la clé de cache

Une clé de cache bien conçue est le pivot d’une solution côté edge. La clé doit contenir :

  • Le chemin de requête normalisé (ex. /products/123/).
  • Le code langue résolu (ex. en, fr, es).

Un format typique de clé de cache ressemble à /<langue>/<chemin>. Par exemple, une requête pour /products/123/ avec un en‑tête AL indiquant le français (fr) générerait la clé /fr/products/123/.

Évitez d’utiliser l’en‑tête Vary pour la langue car de nombreux CDN traitent Vary: Accept-Language comme un contournement du cache, désactivant effectivement la mise en cache au edge. En intégrant la langue directement dans la clé de cache, vous conservez la capacité du CDN à servir des copies cachées pour chaque variante linguistique.

Implémentation de la fonction Edge

Ci‑dessous, un exemple de pseudocode pour un runtime edge générique (ex. Cloudflare Workers, Fastly Compute@Edge ou AWS Lambda@Edge). La logique est délibérément indépendante du langage et peut être adaptée à n’importe quel environnement JavaScript‑compatible.

export async function handle(event) {
  const request = event.request
  const url = new URL(request.url)

  // 1. Extract Accept-Language header
  const acceptLang = request.headers.get('Accept-Language') || ''
  
  // 2. Parse header into ordered list of language tags
  const languages = parseAcceptLanguage(acceptLang)

  // 3. Determine the first supported language
  const supported = ['en', 'es', 'fr', 'de', 'zh']
  let chosenLang = supported[0] // default fallback
  for (const lang of languages) {
    const base = lang.split('-')[0] // ignore region subtags
    if (supported.includes(base)) {
      chosenLang = base
      break
    }
  }

  // 4. Rewrite URL to include language segment
  if (!url.pathname.startsWith(`/${chosenLang}/`)) {
    url.pathname = `/${chosenLang}${url.pathname}`
  }

  // 5. Create a new request with the rewritten URL
  const newRequest = new Request(url, request
haut de page
© Scoutize Pty Ltd 2025. All Rights Reserved.