Отметим: когда клиент решил выйти на международный рынок, его Laravel-магазин на русском начал терять позиции: Google показывал английским пользователям русские страницы, а дубли контента привели к падению трафика на 40% за месяц. Переписывать архитектуру пришлось с нуля — типичная ошибка при старте без i18n. Таких затрат можно избежать, если заложить интернационализацию с первого коммита. Наш опыт показывает: правильная архитектура окупается в первые три месяца. Например, один из проектов интернет-магазина бытовой техники после внедрения мультиязычности на 4 языка увеличил международный трафик на 70%, а средняя конверсия выросла на 15% за счёт адаптированных описаний товаров, что принесло дополнительную выручку в $50,000 за квартал. Ещё один клиент сэкономил $2,000 на исправлении дублей после правильной настройки hreflang.
i18n — это не просто перевод интерфейса. Это архитектура URL, хранение контента, SEO-разметка, кеширование, деплой. Ошибка на старте обходится в 3–5 раз дороже, чем правильная реализация сразу. Инженеры с профильным опытом решали подобные задачи для 20+ проектов e-commerce и SaaS. Гарантируем корректную работу на всех этапах: от выбора стратегии URL до финального деплоя с кешированием переводов в Redis. По данным официальной документации Laravel, использование пакета Astrotomic Translatable значительно упрощает мультиязычные модели.
Выбор стратегии URL для мультиязычности
Существует три основных подхода к организации URL мультиязычного сайта:
| Стратегия | Примеры | Когда использовать |
|---|---|---|
| Поддомен | ru.example.com, en.example.com |
Разные серверы или CDN на регион, высокая изоляция |
| Путь | example.com/ru/, example.com/en/ |
Один сервер, большинство случаев, простота |
| Отдельный домен | example.ru, example.com |
Разные юридические лица или бренды, но дороже в поддержке |
Путь (/ru/, /en/) — самый распространённый и простой в реализации. Поддомен лучше для географически разделённых аудиторий. Выбор зависит от требований проекта, но путь — оптимальный старт.
Почему hreflang важен для SEO?
Без hreflang поисковики могут показать пользователю неверную языковую версию или посчитать страницы дубликатами. Правильная разметка — обязательное требование для мультиязычного SEO. Мы автоматически генерируем hreflang для всех страниц на основе маршрутов и локалей, включая x-default. Экономия бюджета на исправление дублей — до 50%. Неверное использование hreflang может привести к штрафам и потере бюджета до $500 в месяц на рекламе.
Архитектура бэкенда
На бэкенде используем пакет Astrotomic Translatable для Eloquent. Пример модели:
use Astrotomic\Translatable\Contracts\Translatable as TranslatableContract;
use Astrotomic\Translatable\Translatable;
class Product extends Model implements TranslatableContract
{
use Translatable;
public array $translatedAttributes = ['title', 'description', 'slug'];
protected $fillable = ['price', 'sku', 'is_active'];
}
Маршрутизация с префиксом локали и middleware для установки локали:
Route::prefix('{locale}')
->where(['locale' => 'ru|en|de|fr|uk'])
->middleware('setLocale')
->group(function () {
Route::get('/', [HomeController::class, 'index'])->name('home');
Route::get('/catalog', [CatalogController::class, 'index'])->name('catalog');
Route::get('/catalog/{slug}', [ProductController::class, 'show'])->name('product');
});
Middleware SetLocale устанавливает локаль из маршрута, сессии или браузера.
Фронтенд с i18next
На фронтенде используем i18next с react-i18next. Для Vue-приложений используется vue-i18n с аналогичной архитектурой. Конфигурация:
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import HttpBackend from 'i18next-http-backend';
import LanguageDetector from 'i18next-browser-languagedetector';
i18n
.use(HttpBackend)
.use(LanguageDetector)
.use(initReactI18next)
.init({
fallbackLng: 'ru',
supportedLngs: ['ru', 'en', 'de', 'fr', 'uk'],
ns: ['common', 'catalog', 'checkout'],
defaultNS: 'common',
backend: { loadPath: '/locales/{{lng}}/{{ns}}.json' },
detection: { order: ['path', 'cookie', 'localStorage', 'navigator'], lookupFromPathIndex: 0 },
interpolation: { escapeValue: false },
});
Файлы переводов лежат в public/locales/{lng}/{ns}.json.
SEO для мультиязычных сайтов
Генерируем hreflang теги для каждой страницы:
function hreflangTags(string $routeName, array $params = []): string
{
$locales = ['ru', 'en', 'de', 'fr', 'uk'];
$tags = '';
foreach ($locales as $locale) {
$url = route($routeName, array_merge($params, ['locale' => $locale]));
$tags .= "<link rel=\"alternate\" hreflang=\"{$locale}\" href=\"{$url}\" />\n";
}
$defaultUrl = route($routeName, array_merge($params, ['locale' => 'ru']));
$tags .= "<link rel=\"alternate\" hreflang=\"x-default\" href=\"{$defaultUrl}\" />\n";
return $tags;
}
Включаем альтернативы в sitemap.xml.
Как автоматизировать перевод контента?
Первичный перевод через Google Translate API:
$results = (new TranslateClient(['key' => $key]))->translateBatch($texts, [
'source' => 'ru',
'target' => $targetLang,
'format' => 'html',
]);
Затем ручная вычитка. Файлы переводов кешируем в Redis с TTL 1 час, чтобы не читать JSON при каждом запросе. Для массового перевода товаров используем очередь в Laravel: диспатчим задание ProcessTranslation для каждой модели после сохранения. Это позволяет не блокировать запросы и масштабировать перевод на сотни тысяч записей.
Пример реализации кеширования переводов
// Cache translations for 1 hour
Cache::remember('translations.' . $locale, 3600, function () use ($locale) {
return Translation::where('locale', $locale)->get();
});
За счёт кеширования удалось снизить TTFB на 300 мс и более, а нагрузку на сервер — на 40%.
Как избежать типичных ошибок?
Неправильная настройка hreflang (x-default, языки не совпадают с реальными) ведёт к штрафам от поисковиков. Отсутствие кеширования переводов — каждый запрос читает JSON, что увеличивает TTFB на 300 мс и более. Игнорирование плюрализации и склонений критично для славянских языков. Смешивание контента и интерфейса в одном файле усложняет поддержку. Мы проектируем файлы переводов с разделением на namespace, что сокращает время поиска строки на 30%. 95% всех ошибок SEO-дублей устраняются на этапе проектирования.
Процесс внедрения
Работа над мультиязычностью проходит поэтапно:
- Аналитика — определяем список языков, регионы, требования к SEO.
- Проектирование — проектируем таблицы БД, middleware, маршруты, структуру файлов переводов.
- Реализация — настраиваем бэкенд (Laravel Translatable), фронтенд (i18next), интеграцию с API перевода.
- Тестирование — проверяем переключение языков, плюрализацию, SEO-теги, отсутствие битых ссылок.
- Деплой — развёртываем с кешированием переводов (Redis) и настроенной sitemap.
Получите консультацию по вашему проекту — уточним этапы и сроки.
Что входит в работу
- Архитектурная документация.
- Доступы к системе управления переводами.
- Обучение команды работе с i18n.
- Поддержка в течение месяца после запуска.
Сроки ориентировочно
| Этап | Сроки |
|---|---|
| Базовая инфраструктура (маршруты, middleware, Translatable, i18next) | 3–4 дня |
| Перевод интерфейса на 4–5 языков + вычитка | 3–5 дней |
| Полный запуск с SEO и sitemap | 1–1.5 недели |
Стоимость рассчитывается индивидуально после оценки объёма работ. Закажите консультацию инженера по вашему проекту — обсудим детали и оценим объём.







