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.