Etalon Translation — словацкое переводческое агентство, обслуживающее три языковых рынка — словацкий, чешский и английский. Когда обратились ко мне, их сайт был WordPress-сборкой 2019 года: шаред-хостинг, Elementor, WooCommerce-корзина для запросов на перевод (да, буквально). Работало — пока не перестало.
Это полная история 6-недельной пересборки, которая подняла конверсию на 34% и довела Lighthouse до 98.
Что было сломано
Три вещи, стоившие денег:
Скорость. Средняя загрузка страницы — 4.2 секунды. WordPress + Elementor + 14 плагинов на шаред-хостинге. Каждая страница грузила полный стек jQuery, библиотеку карусели, которой никто не пользовался, и три аналитических скрипта. На мобилке — хуже: 6+ секунд на 3G.
Управление контентом. Агентство хотело публиковать блог-посты на всех трёх языках. WordPress с WPML делал это возможным, но мучительным: каждый перевод — отдельный пост с ручной языковой привязкой. Команда могла писать на словацком, но публикация требовала разработчика для настройки hreflang-тегов, исправления слага и очистки кеша. Они перестали публиковать.
Конверсия. Контактная форма была WooCommerce-потоком «добавить в корзину», переделанным под запросы на расценки. Пользователи буквально добавляли «Услуга перевода» в корзину, заполняли детали на чекауте и отправляли. Воронка путала всех — 88% отвал между страницей услуги и отправленным запросом.
Ограничения
У агентства была рабочая айдентика бренда (цвета, типографика, логотип) и существующий контент на трёх языках. Мы не переделывали бренд — мы пересобирали средство доставки.
Бюджет фиксированный. Срок — 6 недель от старта до продакшена, с жёстким дедлайном: у агентства конференция в Братиславе, где они хотели раздавать визитки с ссылкой на новый сайт.
Что отгрузили
Решения по стеку
Next.js 15 с SSG. Каждая страница пререндерится на этапе сборки. SSR не нужен — контент меняется максимум раз в неделю. SSG даёт TTFB меньше секунды с edge-CDN Vercel, а сборка всего трёхлокального сайта занимает менее 30 секунд.
SCSS Modules вместо Tailwind. Брендбук агентства был детальным — конкретная шкала отступов, цветовые токены, типографические правила. SCSS Modules позволили воспроизвести бренд 1:1 через переменные с токенами дизайна, сохраняя стили рядом с компонентами. Tailwind бы сработал, но точность воспроизведения бренда была проще с кастомным SCSS.
next-intl для интернационализации. Три локали (sk, cs, en) с префиксами в маршрутах, автоматические hreflang-теги и переведённые слаги. Роутинг просто работает — etalon.sk/en/services, etalon.sk/cs/sluzby, etalon.sk/sk/sluzby. Каждая локаль получает свою запись в sitemap. Подробнее о граблях i18n — в отдельном посте.
MDX для блога. Команда пишет Markdown в простом редакторе, кидает файл в репозиторий, и сайт автоматически пересобирается по пушу. Никаких логинов в CMS, никаких баз данных, никакого сброса кеша. Каждый пост — файл .mdx с фронтматтером для заголовка, описания, даты и локали. Переводы — отдельные файлы с совпадающими слагами.
Поток контактной формы
Это был главный рычаг конверсии. Мы заменили WooCommerce-монстра на одностраничную контактную форму:
- Пользователь выбирает категорию услуги (перевод, устный перевод, локализация)
- Поля формы адаптируются — перевод показывает исходный/целевой язык и количество слов, устный — дату/место
- Отправка стреляет Telegram-уведомлением владельцу агентства и подтверждением на email пользователю
Без корзины. Без чекаута. Без «добавить в корзину». Три поля до отправленного запроса. Время от лендинга до отправки упало с 4+ минут до менее 40 секунд.
Работа над производительностью
Пост про Lighthouse 98 покрывает технические детали. Короткая версия:
- Шрифты: Самохостинг подмножества фирменного шрифта,
font-display: swap, предзагрузка в<head>. Устранил FOIT, добавлявший 800ms к воспринимаемой загрузке. - Изображения: Все фото продуктов/команды конвертированы в WebP через
next/image. Hero на главной уменьшился с 1.2MB JPEG до 90KB WebP. - JavaScript: Аудит каждой клиентской зависимости. Убрали jQuery (не нужен с React), библиотеку карусели (заменили CSS scroll-snap) и два из трёх аналитических скриптов (оставили только Plausible — приватный, 1KB скрипт).
- Интернационализация на этапе сборки: Все переводы разрешаются при сборке, не в рантайме. Никаких клиентских бандлов переводов для неиспользуемых локалей.
Результат: 0.8s средняя загрузка по всем страницам. Lighthouse 98 на мобилке.
Цифры
Шесть недель после запуска, сравнение за тот же период трафика:
| Метрика | До | После | Изменение |
|---|---|---|---|
| Средняя загрузка | 4.2s | 0.8s | -81% |
| Lighthouse (мобилка) | 42 | 98 | +56 пт |
| Заполнение формы | 12% | 46% | +34 пт |
| Постов в блоге | 0/мес | 4/мес | ∞ |
| Стоимость хостинга | €45/мес | €0 | -100% |
Стоимость хостинга заслуживает сноски: бесплатный тариф Vercel справляется с этим сайтом без проблем. Агентство платило €45/месяц за шаред-хостинг, который активно тормозил их сайт.
+34% конверсии — это заголовочная цифра, но скорость публикации блога важнее в долгосрочной перспективе. Команда перешла от нуля публикаций (потому что нужен был разработчик) к 4 постам в месяц на трёх языках. Это компаундирующаяся SEO-ценность, которой раньше не существовало.
Что удивило
У старого сайта не было аналитики. Метрики «до» выше восстановлены из данных Google Search Console и серверных логов доступа. Google Analytics был установлен, но неправильно настроен — отслеживал просмотры на панели администратора, а не на публичном сайте. Обнаружили только при миграции. Урок: проверяйте аналитику до старта — вам нужны цифры «до», чтобы доказать «после».
Миграция контента — самая длинная отдельная задача. Копирование текста между системами звучит тривиально. Заняло 8 рабочих дней из 6-недельного таймлайна. На каждой странице были инлайн-стили от Elementor, битые HTML-сущности и непоследовательное форматирование между языками. Я написал Node-скрипт для извлечения чистого текста из WordPress-экспорта, но чешские и английские переводы всё равно потребовали ручной проверки на точность.
Агентству не нужна была CMS. Моё первоначальное предложение включало Sanity как headless CMS. Во время дискавери я понял, что реальный рабочий процесс команды был: написать в Google Docs → отправить разработчику → разработчик публикует. MDX сохранил этот поток минус бутылочное горлышко с разработчиком. Они пишут в Docs, экспортируют в Markdown, коммитят в репозиторий. Проще, дешевле и на один сервис меньше для обслуживания.
Что бы сделал иначе
Пропустил бы кастомную SCSS-систему. Это было правильным решением для точности бренда, но добавило ~10 часов настройки и постоянного обслуживания по сравнению с Tailwind с правильным конфигом. Для следующей корпоративной пересборки — начну с Tailwind и конфига дизайн-токенов. Точность бренда достижима, а DX лучше.
Добавил бы Sentry с первого дня, а не с четвёртой недели. Мы добавили Sentry в финальном спринте для мониторинга продакшена. Поймал бы два CSS-бага рендеринга на стейджинге, которые нашли вручную. Стоимость раннего добавления — близка к нулю.
Настаивал бы на конвертации WebP при миграции. Мы конвертировали hero-изображения, но оставили часть фото внутренних страниц как оптимизированные JPEG. Они нормальные — но «нормально» не значит «98 на каждой странице». Вернуться и конвертировать их сейчас — тривиально, но ощущается как уборка, которую стоило сделать сразу.
Бизнес-результат
Сайт Etalon теперь грузится меньше чем за секунду, публикует контент без участия разработчика и конвертирует посетителей в запросы на расценки в 3.8× эффективнее старого. Конференция агентства состоялась через 6 недель после запуска — они раздавали визитки, люди заходили на сайт, и форма запроса работала.
Шесть месяцев спустя сайт всё ещё работает на бесплатном тарифе. Ни одного инцидента обслуживания. Ни одного экстренного звонка. Агентство публикует еженедельно, и их органический поисковый трафик вырос в 2.1× от базовой линии до пересборки.
Для 6-недельного проекта с фиксированным объёмом работ — это результат, к которому я стремлюсь: сайт, который работает, быстрый и не мешает клиенту.
Если у вас WordPress-сайт, который тормозит, тяжело обновляется и теряет конверсии — математика пересборки обычно сходится. Запишитесь на 20-минутный звонок, и я честно скажу, подходит ли ваш случай для пересборки или хватит более лёгкого решения.