Insights / Технические материалы

Как вести многоязычный блог с Sveltia CMS

Практический процесс: редактировать японский исходный материал в Sveltia CMS, создавать PR с переводами через GitHub Actions и GitHub Copilot и публиковать локализованные статические страницы, которые понятнее поисковым системам, чем перевод только в интерфейсе.

  • Технологии
  • GitHub Copilot
  • i18n
  • CMS
  • SEO
Как вести многоязычный блог с Sveltia CMS
Содержание
  1. Структура
  2. Когда достаточно UI-перевода
  3. SEO-преимущества статических переводов
  4. 1. Каждый язык можно crawлить напрямую
  5. 2. Метаданные локализуются
  6. 3. hreflang связывает версии
  7. 4. RSS и sitemap становятся многоязычными
  8. Роль Sveltia CMS
  9. Правила для Copilot
  10. Уроки из PR
  11. Ссылки
  12. Итог

Acecore редактирует контент в основном на японском, но публикует блог на 9 языках. Важно различать перевод текста в интерфейсе и публикацию локализованных страниц.

Перевод браузера помогает пользователю прочитать текущую страницу. Но он не создает /ru/blog/.../, локализованные метаданные, RSS, sitemap или hreflang.

Если многоязычность нужна не только для чтения, но и для поиска, перевод должен быть частью процесса публикации.

Структура

  • Японский источник: src/content/blog/{slug}.md
  • Переводы: src/content/blog/{locale}/{slug}.md
  • URL: /blog/{slug}/, /en/blog/{slug}/, /ru/blog/{slug}/
  • Редактирование: Sveltia CMS
  • Перевод: PR от GitHub Copilot
  • Публикация: build и review

Sveltia CMS отвечает за редактирование японского source. Переводы идут через pull requests, чтобы сохранить историю, review и CI.

Когда достаточно UI-перевода

Он подходит для внутреннего чтения, разового просмотра, админских страниц и страниц без SEO-цели.

Это легко поддерживать, потому что нет переведенных файлов. Но также нет языковых страниц для индексации.

SEO-преимущества статических переводов

Поисковые системы, social previews и RSS-читалки работают с URL и HTML.

Если существует только японская страница, браузер может показать перевод пользователю, но title, description, structured data, RSS и sitemap останутся японскими.

Со статическими переводами каждый язык получает свой URL.

/blog/copilot-translation-pipeline/
/en/blog/copilot-translation-pipeline/
/ru/blog/copilot-translation-pipeline/
/de/blog/copilot-translation-pipeline/

1. Каждый язык можно crawлить напрямую

Google умеет обрабатывать JavaScript, но в документации также описывает ограничения и рекомендует static rendering или server-side rendering как более стабильные варианты. Другие crawlers и RSS-сервисы могут быть менее способны.

2. Метаданные локализуются

Frontmatter можно переводить по языкам:

title: "Как вести многоязычный блог с Sveltia CMS"
description: "Workflow для переводческих PR с Sveltia CMS и GitHub Copilot."

Это влияет на search snippets, OGP, связанные карточки и RSS.

3. hreflang связывает версии

Google рекомендует hreflang, когда разные URL обслуживают разные языки или регионы. При переводе только в UI отдельного URL нет.

4. RSS и sitemap становятся многоязычными

Файлы переводов позволяют генерировать /ru/rss.xml и локализованные URL в sitemap.

Роль Sveltia CMS

Sveltia CMS не переводит. В этом процессе он упрощает редактирование японского источника:

  • японские статьи
  • авторы
  • теги
  • японские source JSON
  • изображения
  • frontmatter: date, FAQ, linkCards

Настройка CMS описана в руководстве по внедрению Sveltia CMS.

Правила для Copilot

В переводческом PR нужно явно указать, что сохранять, а что локализовать.

Keep:

- slug
- image path
- author id
- tag ids
- external URLs
- code blocks

Localize:

- title
- description
- FAQ
- body text
- internal blog URLs when locale-specific URLs exist

Уроки из PR

  • Старые статьи продолжали упоминать Pages CMS после перехода на Sveltia CMS.
  • Если date старый, переписанная статья не появится наверху блога.
  • Slug должен оставаться одинаковым между языками.
  • Внутренние ссылки должны вести в locale читателя.
  • AI ускоряет перевод, но review остается обязательным.

Ссылки

Итог

Перевод интерфейса помогает читать страницу. Локализованные статические страницы превращают каждый язык в настоящий контент сайта.

Sveltia CMS редактирует японский source, GitHub Copilot создает PR с переводами, а Astro build проверяет результат перед публикацией.

Translation Workflow

Поток от Sveltia CMS до PR с переводом

Японский остаётся source of truth, а перевод выносится в PR-процесс на стороне GitHub.

  1. Редактировать только японский

    Обновлять `src/content/blog/{slug}.md` через Sveltia CMS или Markdown.

  2. Обнаружить CMS commit

    Сделать prefix `cms:` и изменённый path контрактом на стороне GitHub Actions.

  3. Создать PR с переводом

    Передать Copilot source path, locale и правила перевода для генерации переведённых файлов.

  4. Применить после build

    Включать в main только PR, прошедшие Astro build, Pagefind и проверку ссылок.

Разница между переводом интерфейса и генерацией отдельных страниц для каждого языка

Перевод интерфейса

  • Браузер или переводческий widget пользователя переводит страницу при отображении
  • URL, title, description и OGP часто остаются на исходном языке
  • Трудно выводить языковые страницы отдельно в sitemap, RSS и hreflang
  • Текст в общих URL и результатах поиска склоняется к исходному языку

Статические многоязычные страницы

  • Можно публиковать языковые URL вида `/{locale}/blog/{slug}/`
  • title, description, текст, FAQ и структурированные данные могут быть отдельными для каждого языка
  • hreflang сообщает поисковым системам о соответствии языковых версий
  • RSS, sitemap, внутренние ссылки и Search Console можно проверять по языкам

Что решить при внедрении

  • Считать японскую статью источником перевода
  • Согласовать slug переведённых файлов со slug японской статьи
  • Зафиксировать условия запуска workflow, например commits с `cms:`
  • Не повреждать при переводе URL, path изображений, блоки кода и ID тегов
  • Проверять в build вывод hreflang, canonical, RSS и sitemap

FAQ

Достаточно ли перевода интерфейса?

Для чтения он полезен. Но для SEO, RSS, sitemap и внутренних ссылок по языкам нужны настоящие локализованные страницы.

Вредит ли AI-перевод SEO?

Проблема не в AI, а в массовой публикации страниц без ценности. Термины, факты, ссылки и естественность нужно проверять.

Являются ли переводы дублями?

Google указывает, что локализованные страницы считаются дубликатами только если основной контент не переведен. Варианты следует связывать через hreflang.