# General Translation Knowledge Base: ¿Cómo traduzco los títulos SEO y las metadescripciones?
URL: https://generaltranslation.com/es/kb/translate-seo-metadata.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Escribe el título y la metadescripción de cada versión lingüística en su propio idioma, con las palabras que busca ese mercado, que a menudo difieren de una traducción literal. Después, localiza las etiquetas que los acompañan, como Open Graph, la URL canónica, hreflang, html lang y los datos estructurados. gt-next de General Translation traduce títulos y descripciones dentro de generateMetadata con getGT.
Category: SEO multilingüe
Last updated: 2026-10-28
Authors: General Translation Team
Published: 2026-10-28

Dale a cada versión lingüística de una página su propio título y su propia metadescripción, redactados en el idioma de esa página y con los términos que la gente de ese mercado usa al buscar. Después, asegúrate de que las etiquetas que los acompañan sean coherentes: una URL canónica que apunte a la propia página, versiones alternativas con hreflang, el atributo `lang`, la configuración regional de Open Graph y los datos estructurados traducidos. Los buscadores generan el título y el fragmento de cada resultado a partir de estos elementos, y Google puede sustituir un título si su idioma o sistema de escritura no coincide con el de la página.

## Qué localizar en cada página

La mayoría de estos elementos se encuentran en el `<head>` o en atributos, por lo que no se ven cuando alguien revisa la página renderizada.

| Elemento                             | Dónde se encuentra                                                   | Qué hacer                                                                                                                                |
| ------------------------------------ | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Título                               | `<title>`                                                            | Reescríbelo según los términos de búsqueda del mercado, en el idioma y el sistema de escritura de la página                              |
| Meta descripción                     | `<meta name="description">`                                          | Tradúcela en cada página; Google puede mostrarla como fragmento                                                                          |
| Vistas previas en redes sociales     | `og:title`, `og:description`, `twitter:title`, `twitter:description` | Tradúcelas junto con el título y la descripción                                                                                          |
| Configuración regional de Open Graph | `og:locale`, `og:locale:alternate`                                   | Establece la configuración regional de la página con el formato `language_TERRITORY`, por ejemplo `pt_BR`, y enumera las demás versiones |
| Imagen para compartir                | `og:image`, `og:image:alt`                                           | Traduce el texto alt; usa una imagen localizada si la imagen contiene texto                                                              |
| URL canónica                         | `<link rel="canonical">`                                             | Haz que cada versión apunte a sí misma                                                                                                   |
| Versiones alternativas con hreflang  | `<link rel="alternate" hreflang>`                                    | Enumera todas las versiones, incluida la propia página (consulta [qué es hreflang](/kb/what-is-hreflang))                                |
| Idioma del documento                 | `<html lang>`                                                        | Indica el código de configuración regional de la página; lo utilizan los navegadores y los lectores de pantalla                          |
| Datos estructurados                  | JSON-LD                                                              | Traduce los nombres y las descripciones, y establece `inLanguage`                                                                        |
| Imágenes                             | `<img alt>`, nombres de archivo                                      | Traduce el texto alt y los nombres de archivo de las imágenes localizadas                                                                |
| Slug de la URL                       | La ruta                                                              | Opcional: `/de/preise` en lugar de `/de/pricing` (consulta [slugs localizados](/kb/multilingual-url-structure#localized-slugs))          |

El [protocolo Open Graph](https://ogp.me/) define `og:locale` con el formato `language_TERRITORY`, con `en_US` como valor predeterminado, e indica que una página que establezca `og:image` también debe establecer `og:image:alt`. En JSON-LD, la propiedad [`inLanguage`](https://schema.org/inLanguage) de schema.org acepta un código BCP 47, y las [directrices sobre datos estructurados](https://developers.google.com/search/docs/appearance/structured-data/sd-policies) de Google establecen que el marcado debe describir contenido visible en la página, por lo que el marcado de una página en alemán debe incluir el nombre y la descripción en alemán. Según su [guía sobre imágenes](https://developers.google.com/search/docs/appearance/google-images), Google utiliza el texto alt para entender una imagen, y recomienda traducir también los nombres de archivo de las imágenes localizadas.

## Cómo usan los motores de búsqueda los metadatos traducidos

El título y el fragmento de un resultado de búsqueda provienen de tus metadatos, aunque no exclusivamente:

* **Títulos.** La [guía de enlaces de título](https://developers.google.com/search/docs/appearance/title-link) de Google pide un `<title>` en el mismo idioma y sistema de escritura que el contenido principal de la página. Si no coinciden (por ejemplo, una página en hindi con un título en inglés o transliterado), Google puede generar el enlace de título a partir de la propia página.
* **Descripciones.** Google [crea los fragmentos principalmente a partir del contenido de la página](https://developers.google.com/search/docs/appearance/snippet) y recurre a la metadescripción cuando esta describe mejor la página. Recomienda una descripción única para cada página, lo que en un sitio multilingüe significa una por página y por idioma.
* **La página es lo primero.** Google solo considera duplicadas las versiones localizadas cuando el [contenido principal sigue sin traducir](https://developers.google.com/search/docs/specialty/international/localized-versions), e ignora `lang` y hreflang al detectar el idioma de una página. Los metadatos traducidos no pueden sustituir a una página traducida.

## Errores comunes

### Traducir palabras clave al pie de la letra

En cada mercado, la gente busca con sus propias palabras. Los compradores británicos buscan &quot;trainers&quot;, mientras que los estadounidenses buscan &quot;sneakers&quot;, y un teléfono móvil es un &quot;celular&quot; en Brasil, un &quot;telemóvel&quot; en Portugal y un &quot;Handy&quot; en Alemania. Si traduces literalmente un título en inglés, puede que no incluya el término que realmente escribe la gente de ese mercado. Elige el término de destino para cada configuración regional (el informe de rendimiento de Search Console, filtrado por país, muestra las consultas con las que ya te encuentran) y luego asegúrate de que todos los títulos y descripciones lo usen.

### Reutilizar los límites de longitud del inglés

Google no establece ningún límite de caracteres para los títulos ni las descripciones, sino que los [trunca para que se ajusten al ancho del dispositivo](https://developers.google.com/search/docs/appearance/title-link). Un límite de caracteres pensado para el inglés no sirve para otros idiomas. El artículo del W3C sobre el [tamaño del texto en la traducción](https://www.w3.org/International/articles/article-text-size) cita unas directrices de IBM según las cuales un texto en inglés de 31 a 50 caracteres (lo habitual en un título) ocupa de media entre un 140 y un 160 por ciento de su longitud original una vez traducido, y señala que cada carácter chino o coreano ocupa aproximadamente el ancho de dos caracteres latinos. Coloca el término principal al principio: así, el truncamiento cortará el final del título y la palabra clave se mantendrá visible.

### Hacer que todas las URL canónicas apunten al idioma de origen

Si la URL canónica de una página traducida apunta a la página en inglés, le indica a Google que la traducción es un duplicado. La [guía sobre URL duplicadas](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) de Google recomienda usar una URL canónica en el mismo idioma cuando se utiliza hreflang. (Consulta [URL canónicas autorreferenciales](/kb/what-is-hreflang#should-hreflang-pages-use-self-referencing-canonicals)).

### Olvidar las etiquetas que nadie ve

Las etiquetas de Open Graph, el JSON-LD y el texto alt de las imágenes no aparecen en la página renderizada, así que un revisor que consulte la versión en alemán desde el navegador no se dará cuenta de que siguen en inglés. Antes del lanzamiento, revisa el código fuente de la página (o una vista previa para redes sociales) en cada configuración regional.

## Formas de generar metadatos traducidos

| Enfoque                                         | Términos específicos del mercado                                                                | Cuando cambia el texto de origen                                                                       | Longitud                        | Revisión                                    |
| ----------------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------- | ------------------------------------------- |
| Redactarlos a mano para cada mercado            | Elegidos mediante investigación de palabras clave                                               | Alguien actualiza cada idioma                                                                          | La controla quien redacta       | Integrada                                   |
| Traducción automática (Google Translate, DeepL) | Traduce la redacción de origen; los glosarios de DeepL permiten fijar términos                  | Se pega a mano o se automatiza con sus API                                                             | Sin control                     | Un paso aparte                              |
| Una API de IA directa (OpenAI API, Claude API)  | Sigue instrucciones, como qué término usar en cada mercado                                      | Vuelves a ejecutar tu script                                                                           | Se le puede pedir un límite     | Un paso aparte                              |
| General Translation                             | Términos de glosario por configuración regional, prompts personalizados y `$context` por cadena | [`npx gt translate`](/docs/cli/reference/commands/translate) o Locadex traduce las cadenas modificadas | `$maxChars` establece un máximo | Editor de Traducciones del panel de control |

Redacta los metadatos a mano para las pocas páginas que generan la mayor parte de tu tráfico de búsqueda en cada mercado prioritario, donde merece la pena dedicar tiempo a un título bien investigado. Usa la traducción automática para un primer borrador que luego alguien editará. Usa General Translation cuando los títulos y las descripciones estén en tu código o CMS y deban volver a traducirse cada vez que cambie el origen; después, edita a mano en el panel de control las páginas más importantes.

## Cómo implementarlo

### En una aplicación de Next.js

En el App Router, los metadatos provienen de `generateMetadata`, así que traduce las cadenas que devuelve. Esta página usa [`getGT`](/docs/react/nextjs/reference/functions/get-gt) de General Translation, que devuelve una función de traducción para la configuración regional de la solicitud, y da por hecho que las rutas llevan el prefijo de la configuración regional, como `/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`;

// De BCP 47 (pt-BR) al formato language_TERRITORY de Open Graph (pt_BR).
// maximize() completa la región probable de un código sin región: de se convierte en 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 indica al traductor qué representa la cadena.
  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) }, // agrega aquí también las versiones alternativas con 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`, // una imagen por configuración regional si contiene texto
          alt: gt('Plan comparison table', { $context: 'Alt text of the share image' }),
        },
      ],
    },
    twitter: { card: 'summary_large_image', title, description },
  };
}
```

Compilada con Next.js 16.4.3 y `gt-next` 11.4.16, la página `/de/pricing` renderizó estas etiquetas específicas de la configuración regional, además de las etiquetas de título, descripción y 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"/>
```

El atributo `lang` proviene del layout `[locale]`. El enrutamiento por configuración regional, las versiones alternativas de hreflang y el mapa del sitio se explican en [¿Cómo configuro el SEO para una aplicación de Next.js multilingüe?](/kb/multilingual-nextjs-seo), donde se genera `alternates.languages` a partir de un registro de las configuraciones regionales publicadas.

### En un sitio estático

Los generadores de sitios estáticos suelen obtener el título y la descripción de una página a partir de su front matter, así que cada archivo traducido incluye los suyos propios. En Docusaurus, por ejemplo, el [campo `description` del front matter](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-docs) se usa tanto para `<meta name="description">` como para `og:description`, y la documentación traducida se encuentra en `i18n/[locale]/docusaurus-plugin-content-docs/current/`. Traduce el front matter a la vez que el cuerpo del contenido.

### En un CMS o creador de sitios

Guarda los campos de SEO por configuración regional, igual que el cuerpo de la página, para que cada idioma tenga su propio título y su propia descripción. Si tu sitio está en WordPress o Shopify y no lo desarrollas con código, un proxy como Weglot [traduce los títulos, las metadescripciones y los datos estructurados](https://support.weglot.com/article/293-how-does-weglot-manage-the-seo) junto con la página. (Consulta [General Translation vs. Weglot](/kb/general-translation-vs-weglot)).

## Cómo traduce General Translation los metadatos SEO

En el App Router de Next.js, `gt-next` de General Translation traduce las cadenas que pasas a [`getGT`](/docs/react/nextjs/reference/functions/get-gt) dentro de `generateMetadata`. Pasa literales de cadena para que la CLI pueda encontrarlos y ejecuta [`npx gt translate`](/docs/cli/reference/commands/translate) antes de `next build`; cuando cambias el título en inglés, la siguiente compilación traduce el nuevo texto a todas las configuraciones regionales. En la página anterior, [`npx gt generate`](/docs/cli/reference/commands/generate), el comando de la CLI que genera plantillas sin conexión, muestra el título, la descripción y el texto alt como cadenas de origen.

Hay dos [opciones de traducción](/docs/react/reference/types/inline-translation-options) que resultan útiles para los metadatos. `$context` indica a la traducción qué es la cadena; por ejemplo, &quot;Título SEO de la página de precios&quot;. `$maxChars` solicita una traducción que no supere un número de caracteres y, si aun así la traducción lo excede, `gt-next` la recorta en el límite con puntos suspensivos al renderizar, así que considéralo un tope y no un límite exacto en píxeles. Es opcional: Google no fija una longitud concreta y un tope puede dejar incompleta una buena traducción, así que añádelo solo donde tu propio layout, como una tarjeta para compartir o un campo de un CMS, tenga un límite estricto.

Para palabras clave específicas de cada mercado, añade el término a un [Context Group](/docs/platform/dashboard/guides/defining-context-for-translations): una entrada del glosario almacena su traducción para cada configuración regional y un prompt personalizado puede aplicarse a una sola configuración regional. General Translation aplica ambos a las traducciones nuevas, ya sean títulos, descripciones o texto del cuerpo. Revisa el resultado en el [Editor de Traducciones del panel de control](/docs/platform/dashboard/guides/reviewing-translations) antes de publicar.

En nuestra prueba con un proyecto nuevo sin glosario (`gt` 2.26.11 y `gt-next` 11.4.16), una página de categoría de zapatillas para correr escrita en `en-US` se tradujo con el término propio de cada mercado. El título y la descripción pasaron por [`getGT`](/docs/react/nextjs/reference/functions/get-gt), cada uno con un `$context` que describía la página (la categoría de zapatillas para correr de una tienda de calzado en línea), y las páginas compiladas renderizaron lo siguiente:

```html title="Rendered metadata"
<!-- /en-US/running (origen) -->
<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 página británica dice trainers, y el título en alemán usa Laufschuhe, la palabra alemana para zapatillas de correr ([Duden](https://www.duden.de/rechtschreibung/Laufschuh)), en lugar de un calco literal como «Lauf-Sneaker». El mismo título sin `$context` salió idéntico, así que, para una cadena tan clara, bastó con la configuración regional de destino. El título en alemán también es más corto que el inglés (33 caracteres frente a 35), así que mide cada configuración regional en lugar de dar por hecho que todas las traducciones serán más largas. Hay dos cosas que aún requieren revisión humana: la descripción en alemán trata al lector de tú (*Entdecke*), así que añade un prompt personalizado para alemán si tu marca usa el *Sie* formal; y el término que elige un modelo es una apuesta sobre el comportamiento de búsqueda, así que contrástalo con las consultas que muestra Search Console para ese país y fíjalo en un glosario cuando sea relevante.

Fuera del código de la aplicación:

* **Payload CMS:** con `gt-payload`, los campos renderizados por el plugin de SEO de Payload reciben [longitudes recomendadas](/docs/integrations/payload/reference/supported-content#character-limits) de 60 caracteres para el meta title y 150 para la metadescripción. Si una traducción supera ese límite, se solicita una versión más corta; solo se recorta (en un límite de palabra y con los puntos suspensivos propios de la configuración regional) cuando el campo también define `maxLength`.
* **Mintlify:** Locadex [traduce el frontmatter](/docs/integrations/mintlify/reference/supported-content), como los títulos y las descripciones de las páginas, para que los metadatos SEO de un sitio de documentación estén disponibles en todos los idiomas.

Ramp localiza su panel de control, su página de inicio y su aplicación de iOS a más de 11 configuraciones regionales con General Translation. (Consulta los [despliegues en producción](https://generaltranslation.com/enterprise)).

## Conclusiones clave

* Traduce cada título y metadescripción al idioma y sistema de escritura propios de la página; Google puede reemplazar un título que no coincida con la página.
* Elige palabras clave para cada mercado, como trainers en `en-GB` y sneakers en `en-US`, en lugar de traducir el término en inglés.
* No reutilices los límites de caracteres del inglés: Google trunca según el ancho del dispositivo, y la longitud de la traducción varía según el idioma y la cadena, así que mide cada configuración regional.
* Localiza también las etiquetas que acompañan al título: una URL canónica autorreferencial, hreflang, `lang`, `og:locale`, texto alt y JSON-LD.
* En Next.js, la función [`getGT`](/docs/react/nextjs/reference/functions/get-gt) de General Translation traduce los metadatos en `generateMetadata`, con `$context` para indicar la intención y un límite opcional `$maxChars` para layouts con un tope estricto.

## Related questions

- [¿Cómo configuro el SEO de una aplicación de Next.js multilingüe?](https://generaltranslation.com/es/kb/multilingual-nextjs-seo.mdx): Asigna a cada idioma su propia URL con prefijo, como /en/about y /es/about, y luego publica html lang, una URL canónica autorreferente, versiones alternativas hreflang con x-default, un título y una descripción traducidos, y una entrada en el mapa del sitio para cada idioma publicado. Marca con noindex las versiones no publicadas. gt-next de General Translation dirige cada idioma a su propia URL y traduce los títulos con getGT.
- [¿Qué es hreflang y cómo se configura?](https://generaltranslation.com/es/kb/what-is-hreflang.mdx): Hreflang le indica a Google qué URL son versiones de la misma página en otros idiomas o regiones, para que pueda mostrar la adecuada en los resultados de búsqueda. Agrégalo con etiquetas link de HTML, cabeceras HTTP Link o un mapa del sitio, asegúrate de que todos los enlaces sean recíprocos y usa códigos válidos como en-GB, no en-UK.
- [¿Cómo creo un mapa del sitio para un sitio web multilingüe?](https://generaltranslation.com/es/kb/multilingual-sitemap.mdx): Incluye cada versión de idioma de cada página como una entrada url propia. Si el mapa del sitio contiene tu hreflang, añade a cada entrada versiones alternativas xhtml:link para todas las versiones, incluida ella misma, además de un x-default opcional, y divide los archivos al llegar a 50.000 URL o 50 MB. gt-next de General Translation asigna a cada configuración regional su propia URL para que el mapa del sitio la incluya.
- [Subdirectorio vs. subdominio vs. ccTLD para SEO multilingüe](https://generaltranslation.com/es/kb/multilingual-url-structure.mdx): Usa subdirectorios como example.com/de/ cuando un mismo producto comparte sitio y proceso de lanzamiento. Solo un ccTLD indica un país, los subdominios permiten un alojamiento independiente, Google desaconseja los parámetros ?lang= y trata los dominios personalizados como .io y .ai como genéricos.
- [¿Cómo hago que un sitio web sea multilingüe?](https://generaltranslation.com/es/kb/make-website-multilingual.mdx): Elige dónde se alojarán las traducciones (en un proxy, un plugin de CMS, un creador de sitios web o tu propio código) y después asigna a cada idioma su propia URL, tal como recomienda Google. Traduce las páginas completas, además de los títulos y las metadescripciones, vincula las versiones con hreflang y ofrece un selector de idioma en lugar de redirigir automáticamente a los visitantes.

## Previous and next questions

- Previous question: [¿Cómo traduzco contenido en Payload CMS?](https://generaltranslation.com/es/kb/translate-payload-content.mdx)
- Next question: [¿Cómo traduzco una aplicación de Flask o FastAPI?](https://generaltranslation.com/es/kb/translate-python-app.mdx)

## Sitemap

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