# General Translation Knowledge Base: Comment traduire les titres SEO et les méta-descriptions ?
URL: https://generaltranslation.com/fr/kb/translate-seo-metadata.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Rédigez le titre et la méta-description de chaque version linguistique dans la langue concernée, avec les termes réellement recherchés sur ce marché, qui diffèrent souvent d’une traduction littérale. Localisez ensuite les balises associées, notamment Open Graph, canonique, hreflang, html lang et les données structurées. Avec gt-next de General Translation, les titres et les descriptions sont traduits dans generateMetadata grâce à getGT.
Category: Référencement multilingue
Last updated: 2026-10-28
Authors: General Translation Team
Published: 2026-10-28

Donnez à chaque version linguistique d’une page un titre et une méta-description qui lui sont propres, rédigés dans la langue de la page avec les termes que recherchent les internautes de ce marché. Veillez ensuite à la cohérence des balises associées : une URL canonique qui pointe vers la page elle-même, des variantes localisées hreflang, l’attribut `lang`, le paramètre régional Open Graph et des données structurées traduites. C’est à partir de ces éléments que les moteurs de recherche génèrent le titre et l’extrait de chaque résultat, et Google peut remplacer un titre dont la langue ou le système d’écriture ne correspond pas à celui de la page.

## Ce qu’il faut localiser sur chaque page

La plupart de ces éléments se trouvent dans le `<head>` ou dans des attributs : ils n’apparaissent donc pas lorsqu’on relit la page affichée.

| Élément                         | Emplacement                                                          | Que faire                                                                                                                   |
| ------------------------------- | -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| Titre                           | `<title>`                                                            | Le réécrire en fonction des termes de recherche du marché, dans la langue et le système d’écriture de la page               |
| Méta-description                | `<meta name="description">`                                          | La traduire pour chaque page ; Google peut l’afficher comme extrait                                                         |
| Aperçus sur les réseaux sociaux | `og:title`, `og:description`, `twitter:title`, `twitter:description` | Les traduire en même temps que le titre et la description                                                                   |
| Paramètre régional Open Graph   | `og:locale`, `og:locale:alternate`                                   | Définir le paramètre régional de la page au format `language_TERRITORY`, par exemple `pt_BR`, et lister les autres versions |
| Image de partage                | `og:image`, `og:image:alt`                                           | Traduire le texte alternatif ; utiliser une image localisée si l’image contient du texte                                    |
| URL canonique                   | `<link rel="canonical">`                                             | Faire pointer chaque version vers elle-même                                                                                 |
| Variantes localisées hreflang   | `<link rel="alternate" hreflang>`                                    | Lister toutes les versions, y compris la page elle-même (voir [qu’est-ce que hreflang](/kb/what-is-hreflang))               |
| Langue du document              | `<html lang>`                                                        | Définir le code de langue de la page ; les navigateurs et les lecteurs d’écran s’en servent                                 |
| Données structurées             | JSON-LD                                                              | Traduire les noms et descriptions, et définir `inLanguage`                                                                  |
| Images                          | `<img alt>`, noms de fichiers                                        | Traduire le texte alternatif, ainsi que les noms de fichiers des images localisées                                          |
| Slug d’URL                      | Le chemin                                                            | Facultatif : `/de/preise` au lieu de `/de/pricing` (voir [slugs localisés](/kb/multilingual-url-structure#localized-slugs)) |

Le [protocole Open Graph](https://ogp.me/) définit `og:locale` au format `language_TERRITORY`, avec `en_US` par défaut, et précise qu’une page qui définit `og:image` doit également définir `og:image:alt`. Pour le JSON-LD, la propriété [`inLanguage`](https://schema.org/inLanguage) de schema.org accepte un code BCP 47, et les [consignes relatives aux données structurées](https://developers.google.com/search/docs/appearance/structured-data/sd-policies) de Google indiquent que le balisage doit décrire du contenu visible sur la page : le balisage d’une page allemande contient donc le nom et la description en allemand. D’après ses [recommandations sur les images](https://developers.google.com/search/docs/appearance/google-images), Google s’appuie sur le texte alternatif pour comprendre une image et conseille de traduire également les noms de fichiers des images localisées.

## Comment les moteurs de recherche utilisent les métadonnées traduites

Le titre et l’extrait d’un résultat de recherche proviennent de vos métadonnées, mais pas seulement :

* **Titres.** Le [guide de Google sur les liens de titre](https://developers.google.com/search/docs/appearance/title-link) recommande une balise `<title>` rédigée dans la même langue et le même système d’écriture que le contenu principal de la page. En cas de décalage, par exemple une page en hindi avec un titre en anglais ou translittéré, Google peut générer lui-même un lien de titre à partir de la page.
* **Descriptions.** Google [génère les extraits principalement à partir du contenu de la page](https://developers.google.com/search/docs/appearance/snippet) et n’utilise la méta-description que lorsqu’elle décrit mieux la page. Il recommande une description unique pour chaque page, soit, sur un site multilingue, une description par page et par langue.
* **La page elle-même prime.** Google ne considère les versions localisées comme des doublons que si le [contenu principal n’est pas traduit](https://developers.google.com/search/docs/specialty/international/localized-versions), et il ne tient pas compte de `lang` ni de hreflang pour détecter la langue d’une page. Des métadonnées traduites ne sauraient remplacer une page traduite.

## Erreurs courantes

### Traduire les mots-clés mot à mot

Sur chaque marché, les internautes cherchent avec leurs propres mots. Les acheteurs britanniques cherchent des « trainers » là où les Américains cherchent des « sneakers », et un téléphone portable se dit « celular » au Brésil, « telemóvel » au Portugal et « Handy » en Allemagne. La traduction littérale d’un titre anglais risque de passer à côté du terme que les internautes de ce marché saisissent réellement. Choisissez le terme cible pour chaque paramètre régional (le rapport Performances de la Search Console, filtré par pays, affiche les requêtes qui vous apportent déjà du trafic), puis utilisez-le dans chaque titre et chaque description.

### Réutiliser les limites de longueur prévues pour l’anglais

Google n’impose aucune limite de caractères aux titres ni aux descriptions ; il [les tronque en fonction de la largeur de l’écran](https://developers.google.com/search/docs/appearance/title-link). Un budget de caractères pensé pour l’anglais ne s’applique pas tel quel aux autres langues. L’article du W3C sur la [taille du texte en traduction](https://www.w3.org/International/articles/article-text-size) cite des recommandations d’IBM selon lesquelles un texte anglais de 31 à 50 caractères, soit la longueur d’un titre classique, atteint en moyenne 140 à 160 % de sa longueur une fois traduit. Il précise aussi que chaque caractère chinois ou coréen occupe à peu près la largeur de deux caractères latins. Placez le terme principal en tête : la troncature coupera alors la fin du titre et le mot-clé restera visible.

### Faire pointer toutes les URL canoniques vers la langue source

Une page traduite dont l&#39;URL canonique pointe vers la page anglaise signale à Google que la traduction est un doublon. Les [recommandations de Google sur les URL en double](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) préconisent une URL canonique dans la même langue lorsque vous utilisez hreflang. (Voir [URL canoniques autoréférentes](/kb/what-is-hreflang#should-hreflang-pages-use-self-referencing-canonicals).)

### Oublier les balises que personne ne voit

Les balises Open Graph, le JSON-LD et le texte alternatif des images n&#39;apparaissent pas sur la page affichée : un relecteur qui parcourt la version allemande dans un navigateur ne remarquera donc pas qu&#39;ils sont restés en anglais. Avant le lancement, vérifiez le code source de la page, ou un aperçu sur les réseaux sociaux, pour chaque paramètre régional.

## Méthodes pour produire des métadonnées traduites

| Approche                                         | Termes propres à chaque marché                                                                                 | Quand le texte source change                                                                          | Longueur                    | Relecture                                |
| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | --------------------------- | ---------------------------------------- |
| Rédaction manuelle pour chaque marché            | Choisis à partir d’une recherche de mots-clés                                                                  | Quelqu’un met à jour chaque langue                                                                    | Vérifiée par le rédacteur   | Intégrée                                 |
| Traduction automatique (Google Translate, DeepL) | Traduit la formulation source ; les glossaires DeepL permettent d’imposer des termes                           | Copier-coller manuel, ou automatisation via leurs API                                                 | Aucun contrôle              | Étape distincte                          |
| API d’IA brute (OpenAI API, Claude API)          | Suit des instructions, par exemple un terme à utiliser pour chaque marché                                      | Relancer votre script                                                                                 | Limite possible sur demande | Étape distincte                          |
| General Translation                              | Termes de glossaire par paramètre régional, instructions personnalisées et `$context` par chaîne de caractères | [`npx gt translate`](/docs/cli/reference/commands/translate) ou Locadex traduit les chaînes modifiées | `$maxChars` fixe un plafond | Éditeur de Traduction du tableau de bord |

Rédigez les métadonnées à la main pour les quelques pages qui génèrent l’essentiel de votre trafic de recherche sur chaque marché prioritaire, là où un titre soigneusement étudié justifie l’effort. Utilisez la traduction automatique pour obtenir un premier jet qui sera ensuite retravaillé. Utilisez General Translation lorsque les titres et descriptions se trouvent dans votre code ou votre CMS et doivent être retraduits à chaque modification de la source, puis retouchez manuellement les pages les plus importantes dans le tableau de bord.

## Comment l&#39;implémenter

### Dans une application Next.js

Avec l&#39;App Router, les métadonnées proviennent de `generateMetadata` : il faut donc traduire les chaînes qu&#39;elle renvoie. Cette page utilise la fonction [`getGT`](/docs/react/nextjs/reference/functions/get-gt) de General Translation, qui renvoie une fonction de traduction pour le paramètre régional de la requête, et part du principe que les routes sont préfixées par le paramètre régional, comme `/de/pricing` :

```tsx title="app/[locale]/pricing/page.tsx"
import type { Metadata } from 'next';
import { getGT, getLocale } from 'gt-next/server';

const LOCALES = ['en', 'de', 'fr', 'pt-BR'];
const pageUrl = (locale: string) => `https://example.com/${locale}/pricing`;

// Conversion BCP 47 (pt-BR) vers le format language_TERRITORY d’Open Graph (pt_BR).
// maximize() ajoute la région probable à un code nu : de devient de-Latn-DE.
function ogLocale(locale: string) {
  const { language, region } = new Intl.Locale(locale).maximize();
  return `${language}_${region}`;
}

export async function generateMetadata(): Promise<Metadata> {
  const gt = await getGT();
  const locale = await getLocale();

  // $context indique au traducteur ce que représente la chaîne de caractères.
  const title = gt('Pricing for teams of every size', {
    $context: 'SEO title of the pricing page',
  });
  const description = gt(
    'Compare plans, see what each one includes, and start for free.',
    { $context: 'Meta description of the pricing page' },
  );

  return {
    title,
    description,
    alternates: { canonical: pageUrl(locale) }, // ajoutez également ici les variantes localisées hreflang
    openGraph: {
      title,
      description,
      url: pageUrl(locale),
      locale: ogLocale(locale),
      alternateLocale: LOCALES.filter((l) => l !== locale).map(ogLocale),
      images: [
        {
          url: `https://example.com/og/pricing-${locale}.png`, // une image par paramètre régional si elle contient du texte
          alt: gt('Plan comparison table', { $context: 'Alt text of the share image' }),
        },
      ],
    },
    twitter: { card: 'summary_large_image', title, description },
  };
}
```

Compilée avec Next.js 16.4.3 et `gt-next` 11.4.16, la page `/de/pricing` a affiché ces balises locale-specific, en plus des balises title, description et Twitter :

```html title="/de/pricing"
<html lang="de">
<link rel="canonical" href="https://example.com/de/pricing"/>
<meta property="og:url" content="https://example.com/de/pricing"/>
<meta property="og:locale" content="de_DE"/>
<meta property="og:image" content="https://example.com/og/pricing-de.png"/>
<meta property="og:locale:alternate" content="en_US"/>
<meta property="og:locale:alternate" content="fr_FR"/>
<meta property="og:locale:alternate" content="pt_BR"/>
```

L&#39;attribut `lang` provient du layout `[locale]`. Le routage selon les paramètres régionaux, les variantes localisées hreflang et le plan de site sont abordés dans [Comment configurer le SEO d&#39;une application Next.js multilingue ?](/kb/multilingual-nextjs-seo), qui construit `alternates.languages` à partir d&#39;un Record des paramètres régionaux publiés.

### Sur un site statique

Les générateurs de sites statiques tirent généralement le titre et la description d’une page de son front matter : chaque fichier traduit possède donc les siens. Dans Docusaurus, par exemple, le [champ `description` du front matter](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-docs) alimente à la fois `<meta name="description">` et `og:description`, et la documentation traduite se trouve dans `i18n/[locale]/docusaurus-plugin-content-docs/current/`. Traduisez le front matter en même temps que le corps du document.

### Dans un CMS ou un outil de création de sites

Stockez les champs SEO par paramètre régional, comme le contenu de la page, afin que chaque langue dispose de son propre titre et de sa propre description. Pour un site sous WordPress ou Shopify que vous ne développez pas vous-même, un proxy tel que Weglot [traduit les titres, les méta-descriptions et les données structurées](https://support.weglot.com/article/293-how-does-weglot-manage-the-seo) en même temps que la page. (Voir [General Translation vs. Weglot](/kb/general-translation-vs-weglot).)

## Comment General Translation traduit les métadonnées SEO

Dans l’App Router de Next.js, `gt-next` de General Translation traduit les chaînes de caractères que vous passez à [`getGT`](/docs/react/nextjs/reference/functions/get-gt) dans `generateMetadata`. Passez des littéraux de chaîne de caractères pour que la CLI puisse les détecter, et exécutez [`npx gt translate`](/docs/cli/reference/commands/translate) avant `next build`. Lorsque vous modifiez le titre en anglais, la compilation suivante traduit le nouveau texte dans chaque paramètre régional. Sur la page ci-dessus, [`npx gt generate`](/docs/cli/reference/commands/generate), la commande de la CLI qui génère les modèles hors ligne, répertorie le titre, la description et le texte alternatif comme chaînes de caractères sources.

Deux [options de traduction](/docs/react/reference/types/inline-translation-options) sont utiles pour les métadonnées. `$context` indique à quoi correspond la chaîne de caractères, par exemple « titre SEO de la page de tarifs ». `$maxChars` demande une traduction qui respecte un nombre maximal de caractères ; si une traduction dépasse malgré tout cette limite, `gt-next` la tronque lors de l’affichage et ajoute des points de suspension. Considérez donc cette valeur comme un plafond, et non comme une limite précise au pixel près. Cette option est facultative : Google n’impose aucune longueur fixe, et un plafond risque de tronquer une bonne traduction. Ne l’utilisez que si votre propre mise en page, comme une carte de partage ou un champ de CMS, impose une limite stricte.

Pour les mots-clés propres à un marché, ajoutez le terme à un [groupe de contexte](/docs/platform/dashboard/guides/defining-context-for-translations) : une entrée de glossaire contient sa traduction pour chaque paramètre régional, et une instruction personnalisée peut cibler un seul paramètre régional. General Translation applique les deux aux nouvelles traductions, qu’il s’agisse de titres, de descriptions ou du corps du texte. Vérifiez le résultat dans l’[Éditeur de Traduction du tableau de bord](/docs/platform/dashboard/guides/reviewing-translations) avant la publication.

Lors de notre test sur un nouveau projet sans glossaire (`gt` 2.26.11 et `gt-next` 11.4.16), une page de catégorie de chaussures de running rédigée en `en-US` a été traduite avec le terme propre à chaque marché. Le titre et la description passaient par [`getGT`](/docs/react/nextjs/reference/functions/get-gt), chacun avec un `$context` décrivant la page (la catégorie chaussures de running d’une boutique de chaussures en ligne), et les pages compilées affichaient :

```html title="Rendered metadata"
<!-- /en-US/running (source) -->
<title>Running Sneakers for Trail and Road</title>
<meta name="description" content="Shop lightweight running sneakers with cushioned soles for long runs on trails and city streets."/>

<!-- /en-GB/running -->
<title>Running Trainers for Trail and Road</title>
<meta name="description" content="Shop lightweight running trainers with cushioned soles for long runs on trails and city streets."/>

<!-- /de/running -->
<title>Laufschuhe für Gelände und Straße</title>
<meta name="description" content="Entdecke leichte Laufschuhe mit gut dämpfenden Sohlen für lange Läufe auf Trails und Straßen."/>
```

La page britannique utilise « trainers », et le titre allemand emploie Laufschuhe, le mot allemand pour « chaussures de course » ([Duden](https://www.duden.de/rechtschreibung/Laufschuh)), plutôt qu’un calque mot à mot comme « Lauf-Sneaker ». Sans `$context`, le même titre est revenu à l’identique : pour une chaîne de caractères aussi claire, la locale cible suffisait. Le titre allemand est par ailleurs plus court que l’anglais (33 caractères contre 35) : mesurez donc chaque paramètre régional au lieu de supposer qu’une traduction sera toujours plus longue. Deux points nécessitent encore une intervention humaine. D’abord, la description allemande tutoie le lecteur (*Entdecke*) : ajoutez une instruction personnalisée pour l’allemand si votre marque vouvoie (*Sie*). Ensuite, le terme retenu par un modèle repose sur une estimation du comportement de recherche : comparez-le aux requêtes que Search Console affiche pour ce pays, et fixez-le dans un glossaire s’il est important.

En dehors du code de l’application :

* **Payload CMS :** avec `gt-payload`, les champs affichés par le plugin SEO de Payload reçoivent des [longueurs recommandées](/docs/integrations/payload/reference/supported-content#character-limits) de 60 caractères pour le meta title et de 150 pour la méta-description. Si une traduction dépasse cette longueur, une version plus courte est demandée ; elle n’est tronquée, à la fin d’un mot et avec les points de suspension propres au paramètre régional, que si le champ définit également `maxLength`.
* **Mintlify :** Locadex [traduit le frontmatter](/docs/integrations/mintlify/reference/supported-content), notamment les titres et descriptions de pages, afin que les métadonnées SEO d’un site de documentation soient disponibles dans toutes les langues.

Ramp localise son tableau de bord, sa page d’accueil et son application iOS dans plus de 11 locales avec General Translation. (Voir les [déploiements en production](https://generaltranslation.com/enterprise).)

## Points clés

* Traduisez chaque titre et chaque méta-description dans la langue et le système d’écriture propres à la page ; Google peut remplacer un titre qui ne correspond pas à la page.
* Choisissez les mots-clés marché par marché, par exemple trainers en `en-GB` et sneakers en `en-US`, plutôt que de traduire le terme anglais.
* Ne reprenez pas les limites de caractères de l’anglais : Google tronque en fonction de la largeur de l’écran, et la longueur des traductions varie selon la langue et la chaîne de caractères. Mesurez donc chaque paramètre régional.
* Localisez aussi les balises associées au titre : une URL canonique autoréférente, hreflang, `lang`, `og:locale`, le texte alternatif et le JSON-LD.
* Dans Next.js, la fonction [`getGT`](/docs/react/nextjs/reference/functions/get-gt) de General Translation traduit les métadonnées dans `generateMetadata`, avec `$context` pour préciser l’intention et un plafond `$maxChars` facultatif pour les mises en page soumises à une limite stricte.

## Related questions

- [Comment configurer le SEO d’une application Next.js multilingue ?](https://generaltranslation.com/fr/kb/multilingual-nextjs-seo.mdx): Attribuez à chaque langue sa propre URL préfixée, comme /en/about et /es/about, puis publiez html lang, une URL canonique autoréférente, des variantes localisées hreflang avec x-default, un titre et une description traduits, ainsi qu’une entrée de plan de site pour chaque langue publiée. Marquez les versions non publiées en noindex. Le package gt-next de General Translation associe chaque langue à sa propre URL et traduit les titres avec getGT.
- [Qu’est-ce que hreflang et comment le configurer ?](https://generaltranslation.com/fr/kb/what-is-hreflang.mdx): Hreflang indique à Google quelles URL correspondent aux versions linguistiques ou régionales d’une même page, afin qu’il affiche la bonne dans les résultats de recherche. Ajoutez-le à l’aide de balises link HTML, d’en-têtes HTTP Link ou d’un plan de site, veillez à ce que chaque lien soit réciproque et utilisez des codes valides comme en-GB, et non en-UK.
- [Comment créer un plan de site pour un site web multilingue ?](https://generaltranslation.com/fr/kb/multilingual-sitemap.mdx): Répertoriez chaque version linguistique de chaque page dans sa propre entrée url. Si le plan de site porte vos annotations hreflang, attribuez à chaque entrée des variantes localisées xhtml:link pour toutes les versions, y compris elle-même, ainsi qu’un x-default facultatif, et scindez les fichiers au-delà de 50 000 URL ou 50 Mo. gt-next de General Translation attribue à chaque paramètre régional sa propre URL, que le plan de site peut ensuite répertorier.
- [Sous-répertoire, sous-domaine ou ccTLD pour le SEO multilingue](https://generaltranslation.com/fr/kb/multilingual-url-structure.mdx): Utilisez des sous-répertoires comme example.com/de/ lorsqu’un même produit partage un site et un processus de livraison. Seul un ccTLD signale un pays, les sous-domaines permettent un hébergement distinct, Google déconseille les paramètres ?lang= et considère les domaines « de complaisance » comme .io et .ai comme génériques.
- [Comment rendre un site web multilingue ?](https://generaltranslation.com/fr/kb/make-website-multilingual.mdx): Choisissez où stocker les traductions (dans un proxy, un plugin de CMS, un constructeur de sites ou votre propre code), puis attribuez à chaque langue sa propre URL, comme le recommande Google. Traduisez les pages entières ainsi que les titres et les méta-descriptions, reliez les versions avec hreflang et proposez un sélecteur de langue plutôt que de rediriger automatiquement les visiteurs.

## Previous and next questions

- Previous question: [Comment traduire les fichiers .resx dans une application .NET ?](https://generaltranslation.com/fr/kb/translate-resx-files.mdx)
- Next question: [Comment traduire une application Flask ou FastAPI ?](https://generaltranslation.com/fr/kb/translate-python-app.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/fr/kb/sitemap.md) for every article.
