«Ресторанный гид с картой: от журнала внутри чужого Laravel-монолита — до полной пересборки на Next.js и Strapi, миграции контента и SEO-фундамента.»
«Вкусономика» — авторский ресторанный гид: карта проверенных мест, оценки, подборки и журнал; сегодня он известен как The Taste (thetaste.io). Мы пришли в проект дописывать журнал внутри чужого Laravel-монолита, а закончили полным переписыванием: спроектировали и собрали новую платформу на Next.js и Strapi, перенесли контент, довели SEO до системного уровня и передали проект с гидом по Москве, Петербургу, Тбилиси, Дубаю, Сочи и Нижнему Новгороду. Визуальный дизайн при этом оставался на стороне клиента — макеты рисовал его дизайнер, а наша зона была инженерной: архитектура, код, миграции и SEO.
Старый сайт — Laravel-монолит с Vue-вставками, написанный сторонним разработчиком: одинаковые метатеги на всех страницах, дубли URL, легаси-карта, где новый код ломал старый. Полгода мы чинили и достраивали его изнутри, пока не упёрлись в потолок стека. Тогда за полтора месяца параллельно собрали новую платформу с нуля — фронт и бэк в отдельных репозиториях, с парсером для переноса контента — и переключили боевой домен, не останавливая живой гид. Фронт и бэк разделили осознанно — это задел под будущее мобильное приложение.
Гид живёт на поисковом трафике, поэтому SEO здесь — инженерная работа: schema.org-разметка мест с рейтингами, canonical, редактируемые H1, title и description прямо из админки, Last-Modified и ответы 304, Cache-Control, RSS-ленты по городам. Самое сложное — переезд с поддоменов городов на папки с постраничными 301-редиректами через middleware и полностью переписанный двухуровневый динамический sitemap. Работу принимал внешний SEO-подрядчик клиента — по его чек-листам «всё чётко».
Вместо точечных фиксов переписали механику городов: новый город публикуется автономно, без участия разработчиков — проверили на Сочи, Красной Поляне и тестовой Казани. Пересобрали sitemap целиком, докрутили поиск под кириллицу и латиницу, перегенерировали фирменный шрифт со знаком рубля. Закрыли весь пул задач, выпустили финальный релиз — и аккуратно передали проект новой команде клиента: репозитории, доступы, README.
Гид сегодня: фильтры по кухням и форматам, лента мест и Яндекс.Карта с кластерами — 306 мест Москвы
Расскажите о задаче — предложим архитектуру решения. Без шаблонных КП и абстрактных смет: конкретика на старте.
Большое мобильное обновление: свой поисковик, шторка со свайпами, ловушки фокуса для iOS, новые фильтры. В админке появились редактируемые H1, title и description для каждой страницы, добавились отели как категория, а пайплайн изображений перестроили так, чтобы миниатюры жались автоматически, не трогая исходники.
Мобильный макет: лента мест с оценками и фильтрами
Самая деликатная миграция года: города переехали с поддоменов в папки основного домена — каждая страница получила свой 301-редирект. Появились дробные оценки и статус «Пока не входит в гид», подборки-посадочные вроде «Завтраков» и «Веранд», RSS-ленты и корректная работа браузерных «Назад/Вперёд».
Посадочная подборки «Завтраки» — отдельные SEO-страницы фильтров
Спринт по редизайну главной — по макетам дизайнера клиента: хедер, поисковик, фильтры первого уровня, скелетоны — и четыре десятка багфиксов следом. Ввели релизный процесс с фиксированным днём выкладки на прод, вывели schema.org-разметку рейтингов, которую принял SEO-специалист клиента.
25 января новая версия вышла на боевой домен: карта, каталог мест и Strapi-админка с автогеокодингом адресов, автогенерацией URL и полями часов работы. Следом переехал журнал — со статьями, TinyMCE-редактором и счётчиками, — а геокодинг свели к единому сервису. За один день настроили Docker-сборку, docker-compose и CI/CD с уведомлениями в Telegram; подключили аналитику с ручными хитами под клиентскую навигацию.
Карточка места: фото, оценка, часы работы, адрес с картой — данные из Strapi-админки
Макет карточки места: фото, оценки по форматам, бронирование, маршрут и такси
Клиент доверил студии выбор стека. За декабрь в двух новых репозиториях выросла платформа: Яндекс.Карты с кластеризацией и фильтрацией по видимой области, определение города по IP, мультигород, поиск, раздел журнала, Docker. К концу месяца первая версия уехала на dev-стенд — «полтора месяца почти все силы направили сюда и пересобрали на новом стеке».
Макет гида: тёмный список мест с прогресс-барами оценок и карта с фирменными метками
Клиент передал студии не только журнал, но и карту, и инфраструктуру. Подняли собственный контур разработки: dev-стенд как копия боевого, отдельный домен, автопродлеваемые сертификаты. Аудит вскрыл SEO-долги старого сайта — метатеги, не менявшиеся от страницы к странице, и задвоенные адреса — и главное: легаси-код карты, в котором новые правки ломали старое. Стало ясно, что чинить дальше дороже, чем переписать.
Начали прагматично: журнал встроили в существующий Laravel-сайт — отдельный стек на тот момент был бы дороже и ненадёжнее. Сделали админку статей, вёрстку, категории, блок «Ещё почитать», и уже в июле редакция залила первые материалы на боевой. Попутно собрали клиенту антиспам-бота для его Telegram-каналов.
Журнал: обзоры, новости, подборки и персоны — раздел, с которого начался проект
Макет журнала: страница персоны и меню с городами, картой и рубриками