# General Translation Knowledge Base: Как перевести SEO-заголовки и метаописания?
URL: https://generaltranslation.com/ru/kb/translate-seo-metadata.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Пишите заголовок и метаописание каждой языковой версии на её языке, используя слова, которые ищут пользователи на этом рынке, — они часто отличаются от дословного перевода. Затем локализуйте связанные с ними теги, включая Open Graph, canonical, hreflang, html lang и структурированные данные. Библиотека gt-next от General Translation переводит заголовки и описания внутри generateMetadata с помощью getGT.
Category: Многоязычное SEO
Last updated: 2026-10-28
Authors: General Translation Team
Published: 2026-10-28

У каждой языковой версии страницы должны быть собственные заголовок и метаописание — на языке этой страницы и с теми словами, которые используют в поиске люди на этом рынке. Затем приведите в соответствие связанные с ними теги: канонический URL, указывающий на саму страницу, альтернативные версии hreflang, атрибут `lang`, локаль Open Graph и переведённые структурированные данные. По ним поисковые системы формируют заголовок и сниппет каждого результата, а Google может заменить заголовок, если его язык или письменность не совпадают с языком страницы.

## Что локализовать на каждой странице

Большинство этих элементов находятся в `<head>` или в атрибутах, поэтому при проверке отрендеренной страницы их не видно.

| Элемент                        | Где находится                                                        | Что делать                                                                                                                    |
| ------------------------------ | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Заголовок                      | `<title>`                                                            | Переписать под поисковые запросы целевого рынка — на языке и в письменности страницы                                          |
| Метаописание                   | `<meta name="description">`                                          | Перевести для каждой страницы; Google может показывать его в качестве сниппета                                                |
| Превью для соцсетей            | `og:title`, `og:description`, `twitter:title`, `twitter:description` | Перевести вместе с заголовком и описанием                                                                                     |
| Локаль Open Graph              | `og:locale`, `og:locale:alternate`                                   | Указать локаль страницы в формате `language_TERRITORY`, например `pt_BR`, и перечислить остальные версии                      |
| Изображение для публикаций     | `og:image`, `og:image:alt`                                           | Перевести альтернативный текст; если на изображении есть текст, использовать локализованную версию                            |
| Канонический URL               | `<link rel="canonical">`                                             | Каждая версия должна ссылаться на саму себя                                                                                   |
| Альтернативные версии hreflang | `<link rel="alternate" hreflang>`                                    | Перечислить все версии, включая саму страницу (см. [что такое hreflang](/kb/what-is-hreflang))                                |
| Язык документа                 | `<html lang>`                                                        | Указать код локали страницы; его используют браузеры и программы чтения с экрана                                              |
| Структурированные данные       | JSON-LD                                                              | Перевести названия и описания и задать `inLanguage`                                                                           |
| Изображения                    | `<img alt>`, имена файлов                                            | Перевести альтернативный текст и имена файлов локализованных изображений                                                      |
| Слаг URL                       | Путь                                                                 | Необязательно: `/de/preise` вместо `/de/pricing` (см. [локализованные слаги](/kb/multilingual-url-structure#localized-slugs)) |

[Протокол Open Graph](https://ogp.me/) задаёт для `og:locale` формат `language_TERRITORY` со значением по умолчанию `en_US` и указывает, что страница с `og:image` должна также содержать `og:image:alt`. Для JSON-LD свойство schema.org [`inLanguage`](https://schema.org/inLanguage) принимает код BCP 47, а [рекомендации Google по структурированным данным](https://developers.google.com/search/docs/appearance/structured-data/sd-policies) требуют, чтобы разметка описывала видимый на странице контент. Поэтому в разметке немецкой страницы должны быть немецкие название и описание. Согласно [рекомендациям Google по изображениям](https://developers.google.com/search/docs/appearance/google-images), поисковик использует альтернативный текст, чтобы понять содержание изображения, а имена файлов локализованных изображений тоже рекомендуется переводить.

## Как поисковые системы используют переведённые метаданные

Заголовок и сниппет в результатах поиска берутся из ваших метаданных, но не только из них:

* **Заголовки.** [Руководство Google по ссылкам-заголовкам](https://developers.google.com/search/docs/appearance/title-link) требует, чтобы `<title>` был на том же языке и в той же письменности, что и основной контент страницы. Если они не совпадают (например, у страницы на хинди заголовок на английском или в транслитерации), Google может сгенерировать ссылку-заголовок на основе самой страницы.
* **Описания.** Google [формирует сниппеты прежде всего из контента страницы](https://developers.google.com/search/docs/appearance/snippet), а метаописание использует, если оно точнее описывает страницу. Google рекомендует задавать для каждой страницы уникальное описание, а на многоязычном сайте это значит: отдельное описание для каждой страницы на каждом языке.
* **Главное — сама страница.** Google считает локализованные версии дубликатами, только если [основной контент остался непереведённым](https://developers.google.com/search/docs/specialty/international/localized-versions), а при определении языка страницы игнорирует `lang` и hreflang. Переведённые метаданные не заменят переведённую страницу.

## Распространённые ошибки

### Дословный перевод ключевых слов

На каждом рынке люди ищут своими словами. Британские покупатели ищут trainers, а американские — sneakers; мобильный телефон в Бразилии называют «celular», в Португалии — «telemóvel», а в Германии — «Handy». Дословный перевод английского заголовка может не совпасть с тем, что люди на этом рынке на самом деле вводят в поиск. Подберите целевой термин для каждой локали (отчёт «Эффективность» в Search Console с фильтром по стране показывает запросы, по которым вас уже находят) и используйте его во всех заголовках и описаниях.

### Перенос ограничений длины, рассчитанных на английский язык

Google не ограничивает число символов в заголовках и описаниях: он [обрезает их по ширине экрана устройства](https://developers.google.com/search/docs/appearance/title-link). Лимит символов, рассчитанный на английский язык, не подходит для других языков. В статье W3C о [размере текста при переводе](https://www.w3.org/International/articles/article-text-size) приводятся рекомендации IBM, согласно которым английский текст длиной от 31 до 50 символов (типичный заголовок) после перевода в среднем занимает 140–160 % исходной длины. Там же отмечается, что китайский иероглиф или корейский слог по ширине примерно равен двум латинским символам. Ставьте основной термин в начало: тогда при усечении обрежется конец заголовка, а ключевое слово останется.

### Канонические URL всех страниц указывают на язык-источник

Если канонический URL переведённой страницы указывает на английскую версию, Google считает перевод дубликатом. В [рекомендациях Google по дублирующимся URL](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) при использовании hreflang советуется указывать канонический URL на том же языке. (См. [самоссылающиеся канонические URL](/kb/what-is-hreflang#should-hreflang-pages-use-self-referencing-canonicals).)

### Забытые теги, которых никто не видит

Теги Open Graph, JSON-LD и альтернативный текст изображений не видны на отрендеренной странице, поэтому проверяющий, который просматривает немецкую версию в браузере, не заметит, что они остались на английском. Перед запуском проверьте исходный код страницы или превью для соцсетей в каждой локали.

## Способы получить переведённые метаданные

| Подход                                           | Термины для конкретного рынка                                                                 | Когда меняется исходный текст                                                                        | Длина                             | Проверка                               |
| ------------------------------------------------ | --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | --------------------------------- | -------------------------------------- |
| Писать вручную для каждого рынка                 | Подбираются по результатам исследования ключевых слов                                         | Кто-то обновляет все языковые версии                                                                 | Контролирует автор                | Встроена в процесс                     |
| Машинный перевод (Google Translate, DeepL)       | Переводятся исходные формулировки; глоссарии DeepL позволяют закрепить термины                | Вставка вручную или автоматизация через их API                                                       | Не контролируется                 | Отдельный этап                         |
| Прямые запросы к AI API (OpenAI API, Claude API) | Модель следует инструкциям — например, какой термин использовать для каждого рынка            | Повторный запуск вашего скрипта                                                                      | Можно задать ограничение          | Отдельный этап                         |
| General Translation                              | Термины Glossary для каждой локали, пользовательские промпты и `$context` для отдельных строк | [`npx gt translate`](/docs/cli/reference/commands/translate) или Locadex переводит изменённые строки | `$maxChars` задаёт верхний предел | Редактор переводов в панели управления |

Пишите метаданные вручную для тех немногих страниц, которые приносят основную часть поискового трафика на каждом приоритетном рынке: здесь тщательно подобранный заголовок стоит потраченного времени. Машинный перевод подойдёт для черновика, который затем кто-то отредактирует. General Translation стоит использовать, если заголовки и описания хранятся в коде или CMS и должны переводиться заново при каждом изменении источника; самые важные страницы затем можно доработать вручную в панели управления.

## Как это реализовать

### В приложении Next.js

В App Router метаданные формируются в `generateMetadata`, поэтому переводить нужно строки, которые возвращает эта функция. В примере на этой странице используется функция [`getGT`](/docs/react/nextjs/reference/functions/get-gt) из General Translation, которая возвращает функцию перевода для локали текущего запроса. Предполагается, что маршруты содержат префикс локали, например `/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`;

// Преобразует BCP 47 (pt-BR) в формат Open Graph language_TERRITORY (pt_BR).
// maximize() подставляет наиболее вероятный регион, если код его не содержит: de превращается в 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 объясняет переводчику, что это за строка.
  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) }, // сюда же добавьте альтернативные версии 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`, // отдельное изображение для каждой локали, если на нём есть текст
          alt: gt('Plan comparison table', { $context: 'Alt text of the share image' }),
        },
      ],
    },
    twitter: { card: 'summary_large_image', title, description },
  };
}
```

В приложении на Next.js 16.4.3 и `gt-next` 11.4.16 страница `/de/pricing` при рендеринге сгенерировала следующие теги, зависящие от локали, а также теги title, description и 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"/>
```

Атрибут `lang` задаётся в компоновке `[locale]`. Маршрутизация по локалям, альтернативные версии hreflang и карта сайта описаны в статье [Как настроить SEO для многоязычного приложения Next.js?](/kb/multilingual-nextjs-seo), где `alternates.languages` формируется из Record опубликованных локалей.

### На статическом сайте

Генераторы статических сайтов обычно берут заголовок и описание страницы из её front matter, поэтому у каждого переведённого файла они свои. Например, в Docusaurus [поле `description` во front matter](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-docs) используется сразу и как `<meta name="description">`, и как `og:description`, а переведённая документация хранится в `i18n/[locale]/docusaurus-plugin-content-docs/current/`. Переводите front matter заодно с основным текстом страницы.

### В CMS или конструкторе сайтов

Храните SEO-поля отдельно для каждой локали — так же, как содержимое страницы, — чтобы у каждой языковой версии были свои заголовок и описание. Если сайт работает на WordPress или Shopify и вы не разрабатываете его в коде, прокси-сервис вроде Weglot [переводит заголовки, метаописания и структурированные данные](https://support.weglot.com/article/293-how-does-weglot-manage-the-seo) вместе со страницей. (См. [Сравнение General Translation и Weglot](/kb/general-translation-vs-weglot).)

## Как General Translation переводит SEO-метаданные

В Next.js App Router пакет `gt-next` от General Translation переводит строки, которые вы передаёте в [`getGT`](/docs/react/nextjs/reference/functions/get-gt) внутри `generateMetadata`. Передавайте строковые литералы, чтобы CLI мог их найти, и запускайте [`npx gt translate`](/docs/cli/reference/commands/translate) перед `next build`: если вы измените английский заголовок, при следующей сборке новый текст будет переведён на все локали. На странице выше [`npx gt generate`](/docs/cli/reference/commands/generate) — офлайн-команда CLI для создания шаблонов — выводит заголовок, описание и альтернативный текст как исходные строки.

Для метаданных пригодятся два [параметра перевода](/docs/react/reference/types/inline-translation-options). `$context` поясняет, что представляет собой строка, например «SEO-заголовок страницы с ценами». `$maxChars` запрашивает перевод, укладывающийся в заданное число символов; если перевод всё же оказывается длиннее, `gt-next` при рендеринге обрезает его по лимиту и добавляет многоточие. Поэтому считайте этот параметр верхней границей, а не точным ограничением в пикселях. Он необязателен: у Google нет фиксированного лимита длины, а ограничение может обрезать хороший перевод, поэтому задавайте его только там, где в вашей компоновке есть жёсткий лимит, например в карточке для соцсетей или поле CMS.

Чтобы учесть ключевые слова для конкретного рынка, добавьте термин в [контекстную группу](/docs/platform/dashboard/guides/defining-context-for-translations): запись Glossary хранит его перевод для каждой локали, а Custom Prompt можно применить к отдельной локали. General Translation учитывает и то и другое во всех новых переводах — будь то заголовки, описания или основной текст. Перед публикацией проверьте результат в [Редакторе переводов в панели управления](/docs/platform/dashboard/guides/reviewing-translations).

В нашем тесте на новом проекте без Glossary (`gt` 2.26.11 и `gt-next` 11.4.16) страница категории беговых кроссовок, написанная на `en-US`, была переведена с использованием терминов, принятых на каждом рынке. Заголовок и описание передавались через [`getGT`](/docs/react/nextjs/reference/functions/get-gt), каждый — с `$context`, описывающим страницу как категорию беговых кроссовок в интернет-магазине обуви. Собранные страницы выглядели так:

```html title="Rendered metadata"
<!-- /en-US/running (исходный текст) -->
<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."/>
```

На британской странице используется слово trainers, а в немецком заголовке — Laufschuhe, немецкое название беговой обуви ([Duden](https://www.duden.de/rechtschreibung/Laufschuh)), а не дословное «Lauf-Sneaker». Тот же заголовок без `$context` получился идентичным, так что для настолько однозначной строки целевой локали оказалось достаточно. Кроме того, немецкий заголовок короче английского — 33 символа против 35, поэтому проверяйте длину для каждой локали, а не исходите из того, что перевод всегда длиннее оригинала. Две вещи всё же требуют участия человека. Во-первых, немецкое описание обращается к читателю на «ты» (*Entdecke*), поэтому добавьте Custom Prompt для немецкого языка, если ваш бренд использует вежливое *Sie*. Во-вторых, выбор термина моделью — это лишь предположение о том, как люди ищут, поэтому сверьте его с запросами, которые Search Console показывает для этой страны, и при необходимости закрепите в Glossary.

За пределами кода приложения:

* **Payload CMS:** при использовании `gt-payload` для полей, рендеринг которых выполняет SEO-плагин Payload, действуют [рекомендуемые длины](/docs/integrations/payload/reference/supported-content#character-limits): 60 символов для meta title и 150 для meta description. Если перевод длиннее, запрашивается более короткий вариант; обрезается же он — по границе слова и с многоточием, принятым в локали, — только если в поле также задан `maxLength`.
* **Mintlify:** Locadex [переводит frontmatter](/docs/integrations/mintlify/reference/supported-content), например заголовки и описания страниц, так что SEO-метаданные сайта документации доступны на всех языках.

Ramp с помощью General Translation локализует свою панель управления, лендинг и iOS-приложение более чем на 11 локалей. (См. [развёртывания в рабочей среде](https://generaltranslation.com/enterprise).)

## Ключевые выводы

* Переводите каждый title и метаописание на язык страницы с учётом её письменности: Google может заменить title, который не соответствует странице.
* Подбирайте ключевые слова отдельно для каждого рынка — например, trainers для `en-GB` и sneakers для `en-US`, — а не переводите английский термин.
* Не переносите ограничения на длину из английской версии: Google обрезает текст по ширине экрана устройства, а длина перевода зависит от языка и конкретной строки, поэтому проверяйте каждую локаль.
* Локализуйте и теги вокруг title: канонический URL, указывающий на саму страницу, hreflang, `lang`, `og:locale`, альтернативный текст и JSON-LD.
* В Next.js функция [`getGT`](/docs/react/nextjs/reference/functions/get-gt) от General Translation переводит метаданные в `generateMetadata`: `$context` описывает назначение текста, а необязательный параметр `$maxChars` задаёт верхний предел длины для компоновок со строгим ограничением.

## Related questions

- [Как настроить SEO для многоязычного приложения Next.js?](https://generaltranslation.com/ru/kb/multilingual-nextjs-seo.mdx): Выделите каждому языку собственный URL с префиксом, например /en/about и /es/about, а затем укажите для каждого опубликованного языка html lang, канонический URL, ссылающийся на саму страницу, альтернативные версии hreflang с x-default, переведённые заголовок и описание, а также запись в карте сайта. Неопубликованные версии пометьте noindex. gt-next от General Translation направляет каждый язык на собственный URL и переводит заголовки с помощью getGT.
- [Что такое hreflang и как его настроить?](https://generaltranslation.com/ru/kb/what-is-hreflang.mdx): Hreflang сообщает Google, какие URL являются языковыми или региональными версиями одной и той же страницы, чтобы в результатах поиска показывалась нужная. Добавьте его с помощью HTML-тегов link, HTTP-заголовков Link или карты сайта, сделайте все ссылки взаимными и используйте корректные коды, например en-GB, а не en-UK.
- [Как создать карту сайта для многоязычного веб-сайта?](https://generaltranslation.com/ru/kb/multilingual-sitemap.mdx): Указывайте каждую языковую версию страницы как отдельную запись url. Если карта сайта содержит разметку hreflang, добавьте в каждую запись альтернативные версии xhtml:link для всех версий страницы, включая её саму, а также необязательный x-default. Разбивайте карту на несколько файлов, если она превышает 50 000 URL или 50 МБ. gt-next от General Translation назначает каждой локали собственный URL, который можно указать в карте сайта.
- [Подкаталог, поддомен или ccTLD для многоязычного SEO](https://generaltranslation.com/ru/kb/multilingual-url-structure.mdx): Используйте подкаталоги вида example.com/de/, если один продукт работает на общем сайте с единым процессом релизов. На страну указывает только ccTLD, поддомены позволяют размещать версии на отдельном хостинге, параметры ?lang= Google не рекомендует, а «имиджевые» домены вроде .io и .ai считает общими.
- [Как сделать сайт многоязычным?](https://generaltranslation.com/ru/kb/make-website-multilingual.mdx): Выберите, где будут храниться переводы — в прокси, плагине CMS, конструкторе сайтов или в вашем собственном коде, — а затем выделите каждому языку собственный URL, как рекомендует Google. Переводите страницы целиком, включая заголовки и метаописания, связывайте языковые версии с помощью hreflang и предлагайте переключатель языка вместо автоматического перенаправления посетителей.

## Previous and next questions

- Previous question: [Как обеспечить единообразие терминологии при ИИ-переводе?](https://generaltranslation.com/ru/kb/ai-translation-glossary.mdx)
- Next question: [Как перевести анимации Lottie?](https://generaltranslation.com/ru/kb/translate-lottie-animations.mdx)

## Sitemap

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