Статья

Как и зачем я локализовал свой сайт

Зачем я локализовал сайт для SEO и GEO и как страницы на разных языках, метаданные и маршрутизация помогают поисковым системам и ИИ находить контент.

Как и зачем я локализовал свой сайт

Я локализовал свой сайт, чтобы он был полезнее людям, говорящим на разных языках, а поисковым системам и ИИ было проще его находить и понимать. Цель — лучшая обнаруживаемость благодаря SEO и GEO, а не обещание более высоких позиций или цитирований.

Зачем я это сделал

Люди ищут информацию и задают вопросы на родном языке. Понятные и актуальные страницы на этих языках дают поисковым системам больше полезного контента, а генеративным ИИ-системам — лучший контекст для ответов. Локализация помогает нужной аудитории находить мою работу, а не ограничивает её англоязычным поиском.

Как я это сделал

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

1. Предсказуемый URL для каждого языка

Английский — язык по умолчанию, и его страницы остаются в корне сайта. У остальных языков есть префикс, поэтому у одной и той же страницы в каждой локали стабильный URL. Список поддерживаемых локалей хранится в одном месте и служит общим источником данных для маршрутизации и ссылок на языки.

export const locales = ['en', 'de', 'es', 'fr', 'ja', 'pt'] as const;
export type Locale = (typeof locales)[number];
export const defaultLocale: Locale = 'en';

export function localizedPath(locale: Locale, pathname = '') {
  const path = pathname === '/' ? '' : pathname;
  return locale === defaultLocale ? path || '/' : `/${locale}${path}`;
}

2. Переводы хранятся в словарях

У каждой локали свой словарь для заголовков страниц, описаний, навигации и текстов статей. Компоненты берут текст из активного словаря, а не содержат его внутри себя, поэтому переведённые страницы сохраняют ту же вёрстку.

// src/locales/de.ts
pageTitles: {
  'blog/how-and-why-i-localized-my-website':
    'Warum und wie ich meine Website lokalisiert habe',
}

// In the page component
const title = t.pageTitles[articleKey];

3. Подсказываем поисковым роботам, какая версия какая

Для каждой локализованной страницы я задаю собственный canonical URL и перечисляю адреса на других языках через альтернативы hreflang. Эти маршруты также добавлены в sitemap. Так связи между переводами становятся явными, но это не гарантирует позиции в выдаче или цитирование ИИ.

const pathname = `/${articleKey}`;
const url = localizedUrl(locale, pathname);

return {
  alternates: {
    canonical: url,
    languages: getLanguageAlternates(pathname),
  },
};

Тот же подход работает не только для статей блога: локализованная навигация и тексты страниц делают сайт полезным для посетителей, а единообразные URL и метаданные помогают лучше определять каждую версию. Переводы всё равно должны оставаться точными и полезными: техническое SEO помогает в обнаружении, но не заменяет хороший контент.