Я локализовал свой сайт, чтобы он был полезнее людям, говорящим на разных языках, а поисковым системам и ИИ было проще его находить и понимать. Цель — лучшая обнаруживаемость благодаря 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 помогает в обнаружении, но не заменяет хороший контент.