Pages CMS: переводы страниц (RU → EN/KK)

2 мин чтения
Обновлено 12 мая 2026

Tracker.ru поддерживает три локали: ru (основная), en (английский), kk (казахский). Любая страница (blog, compare, features, docs) может иметь до трёх версий — связанных через parent_locale_id.

Логика связи

  • Оригинал (обычно RU) — у него parent_locale_id = NULL.
  • Перевод — у него parent_locale_id = id оригинала (RU-записи).
  • Все переводы одной статьи ссылаются на один и тот же оригинал.
RU-оригинал (id=42, parent_locale_id=NULL)
  ├─ EN-перевод (id=43, parent_locale_id=42)
  └─ KK-перевод (id=44, parent_locale_id=42)

hreflang выставляется автоматически

Если страницы связаны через parent_locale_id — Tracker.ru сам генерирует <link rel="alternate" hreflang="..."> в <head>. Ничего вручную править не надо.

Шаги создания перевода

1. Создать оригинал на RU

Шаги — см. Создание blog-страницы. Сохранить, получить id.

2. Создать перевод

/admin/pages → «Создать страницу» → тот же тип, тот же slug (можно слегка адаптировать), новая локаль (en или kk).

3. Заполнить вкладку Locale

Открыть вкладку Locale. В поле parent_locale_id указать ID RU-оригинала. После сохранения hreflang заработает автоматически.

Slug в переводе — менять или нет

  • Часто оставляют тот же slug (URL вида /blog/webhook-deeplink-updates?lang=en).
  • Иногда переводят и slug (/blog/webhook-deeplink-updates-en или /en/blog/webhook-deeplink-updates).
  • Tracker.ru поддерживает оба варианта — ориентируйтесь на SEO-цели.

previous_slugs: ренейм без потери ссылок

Если сменили slug у уже опубликованной страницы — старый slug автоматически добавляется в previous_slugs (JSON-поле). При обращении на старый URL — 301-редирект на новый. Не теряются внешние ссылки и SEO-вес.

Можно вручную добавить URL в previous_slugs через /admin/pages → SEO-вкладка (если поле выведено) или через тех-команду.

status='unlisted' для machine-baseline переводов

Для машинных переводов (KK-baseline до native-review) ставится status='unlisted':

  • Страница доступна по прямой ссылке.
  • Не попадает в sitemap.
  • Не показывается в листингах.
  • Можно править и тестировать в проде, не светя поисковикам.

После native-review — переводим в status='published'.

Что НЕ делать

  • Не создавать перевод как отдельный оригинал (без parent_locale_id) — hreflang не сработает, контент-блок будет дублем.
  • Не менять parent_locale_id на разные значения для разных переводов одной статьи. Все переводы ссылаются на один оригинал.
  • Не использовать previous_slugs для перенаправления одного перевода в другой — это для смены slug в рамках одной локали, не для cross-locale.

Что дальше