ВЮ Баланс
ГлавнаяКейсыБилетный агрегатор на весь мир: 48 сайтов на 9 языках, импорт от партнёров и нейросеть, которая раскладывает события по полкам
Сложный сервисСайтПроектированиеSEOАвтоматизацияАналитика
48
сайтов стран на одной платформе: 9 языков, 19 валют
2019–2020

Билетный агрегатор на весь мир: 48 сайтов на 9 языках, импорт от партнёров и нейросеть, которая раскладывает события по полкам

Билетный агрегатор Ticketeria · 48 стран Европы, Азии и Америки
Сложные сервисыСоздание сайтаПроектированиеSEO‑продвижениеАвтоматизацияНастройка аналитики
48
сайтов стран на одной платформе: 9 языков, 19 валют
×4
переходов из Google за месяц, январь → февраль 2020
59
источников событий в системе импорта без ручной работы

Задача

Ticketeria задумывалась как международная витрина билетов: концерты, спектакли, футбол, фестивали, музеи и экскурсии во всех странах, где есть что посмотреть. Своих билетов у агрегатора нет: события мы брали у партнёров, с которыми заключали официальные договоры. Каждый отдавал данные по-своему: одни через API, другие выгрузками, третьи присылали таблицы на почту. Из этого потока нужно было собрать аккуратную витрину: отдельный сайт для каждой страны, на языке и в валюте посетителя, с поиском событий по всему миру. Главным каналом трафика должен был стать поиск, а не реклама.

Масштаб

Это один из самых больших проектов, которые мы делали. Мы прошли весь путь: от прототипов и дизайна до серверного кластера. Сделали интерфейс всего сайта и его AMP-версию, админку с системой импорта данных от партнёров, механизм карт сайта для Google, сквозную аналитику продаж и сводную отчётность по поиску сразу по всем странам. Над кодом работало больше десятка разработчиков, в GitLab проекта больше сорока репозиториев.

48
сайтов для разных стран на одной платформе
9
языков интерфейса, описаний и адресов страниц
19
валют, в которых посетитель видит цены
59
источников событий в системе импорта к осени 2020
≈5 млн
адресов в картах сайта для Google
8
серверов в кластере с внутренней сетью

Сначала прототип, потом дизайн

Каждый экран сначала собирали прототипом: серые блоки и оранжевые пометки для разработчика. Что происходит по клику, откуда берутся данные, какие у блока состояния, что делать, если данных нет. Отдельными документами шли требования по SEO и схема адресов страниц. Только когда логика была согласована, экран уходил в дизайн. В итоге 13 разделов, и каждый экран нарисован в семи ширинах: от 320 пикселей телефона до 1800 большого монитора.

Главная
В прототипе у каждого блока пометка для разработчика: календарь работает как фильтр по датам, «Недавно просмотренные» появляются только после первых просмотров, фильтр по разделам меняет выдачу без перезагрузки. В дизайне открыт переключатель страны, валюты и языка
Карточка события
Расписание по датам и сценам, типы билетов и пакеты, кнопка «Найти в другом городе», если событие идёт в нескольких. В дизайне у каждой строки своя цена, «Купить» и «В корзину»
Выбор мест в зале
Схема зала с ценовыми зонами. Пока места не выбраны вручную, справа подбираются ряды, где нужное количество мест стоит рядом. Большой зал открывается целиком, а при выборе зоны появляется миникарта
События на карте
Список и карта рядом, «искать при перемещении карты». В дизайне вокруг каждого выбранного города виден радиус поиска, его можно менять и удалять прямо на карте
Несколько городов сразу
Можно выбрать несколько городов и радиус до 250 км вокруг них, система подсказывает города поблизости: турист, который едет в Петербург, увидит и события в финской Лаппеенранте
Мобильная версия
Отдельный прототип под каждую ширину: что сворачивается, что уходит в меню, как ведёт себя шапка при прокрутке
Даже у события без картинки есть обложка: для каждой категории нарисована своя заглушка в стиле бренда. Витрина не выглядит пустой, какие бы данные ни прислал партнёр
Даже у события без картинки есть обложка: для каждой категории нарисована своя заглушка в стиле бренда. Витрина не выглядит пустой, какие бы данные ни прислал партнёр

48 стран — одна платформа

Все 48 сайтов работают на одном коде. По домену сайт определяет страну, язык и валюту по умолчанию, а посетитель может переключить любое из трёх, не теряя фильтров. Витрина каждой страны показывает свои события, но поиск находит события других стран и городов. Выдача никогда не бывает пустой: сначала события в радиусе от выбранных городов, потом по стране, потом по всему миру.

Два бренда под разные рынки: Ticketeria для Испании, Франции, Великобритании, Мексики, Кореи и двадцати с лишним стран Европы и Азии на поддоменах вида finland.ticketeria.eu, и Entradaria для Германии, Италии, России, Канады, Австралии, Японии, Бразилии и ещё нескольких стран. Цены пересчитываются в 19 валют по курсам, которые обновляются каждый день.

Описания событий партнёры присылают на своём языке, а языковых версий девять. Сайт сам определяет язык описания и переводит его на остальные восемь. Одинаковые тексты переводятся один раз на все события, а система каждый день считает, сколько текста осталось и хватит ли квоты сервиса перевода.

Откуда берутся события: система импорта

Своих билетов у агрегатора нет: события мы брали у партнёров, с которыми заключали официальные договоры. Это билетные операторы и партнёрские сети, через которые подключаются десятки продавцов. Каждый отдавал данные по-своему: одни через API, другие выгрузками, третьи присылали таблицы на почту. Поля, категории, форматы дат, часовые пояса и валюты у всех разные.

TicketmasterStubHubFnacTiqetsSee TicketsEl Corte InglésDigitickTicketNetworkTickPickVegas.comEventfulWegowMusic & OperaWowTickets
Часть источников: билетные операторы напрямую и продавцы, подключённые через партнёрские сети Awin, Tradedoubler и Impact. Ticketmaster — отдельными источниками по 12 странам

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

  1. Шлюз

    Откуда и как забирать данные: адрес, формат, авторизация, постраничная выдача. Настраивается в админке, без программиста

  2. Склад

    Сырые данные партнёра лежат на своей «полке». Их можно переобработать новыми правилами без повторной выгрузки

  3. Поток

    Сопоставление полей, чистка, правила категорий, проверка и предпросмотр по всей выгрузке до запуска

  4. Обогащение

    Нейросеть ставит категории, сервис геокодинга уточняет адрес, описание переводится на 9 языков, картинки нарезаются под все экраны

  5. Витрина

    Событие появляется на сайтах нужных стран и в картах сайта, прошедшие уходят с витрины сами

Путь каждого события: от ответа партнёра до карточки на сайте нужной страны. Каждую ночь весь цикл проходит заново
Прототип настроек шлюза: формат данных, метод и адрес API, откуда брать страну, город, площадку, язык и валюту, способ авторизации и кнопка проверки подключения. Жёлтые стикеры — пометки для разработчика
Прототип настроек шлюза: формат данных, метод и адрес API, откуда брать страну, город, площадку, язык и валюту, способ авторизации и кнопка проверки подключения. Жёлтые стикеры — пометки для разработчика
Группировка: категории партнёра слева, наши справа. По клику на категорию снизу открывается предпросмотр её событий
Группировка: категории партнёра слева, наши справа. По клику на категорию снизу открывается предпросмотр её событий
Правило раскладки: наборы условий «хотя бы одно / все / ни одного» по названию и другим полям события
Правило раскладки: наборы условий «хотя бы одно / все / ни одного» по названию и другим полям события
Одно и то же шоу часто продают несколько партнёров, и каждый называет его чуть по-своему. Система находит такие дубли нечётким сравнением названий плюс совпадением даты, времени и площадки и склеивает их. Если билеты на сеанс есть у нескольких продавцов, их цены видны рядом. Если событие пропало у одного партнёра, ссылка переключается на другого, а у площадок без точного адреса координаты уточняет сервис геокодинга.

Нейросеть раскладывает события по полкам

Правила хорошо работают, пока партнёр присылает аккуратные категории. Но у каждого категории свои, у части их нет совсем, а событий десятки тысяч. Поэтому раскладку по категориям меню мы доверили нейросети.

Театры и концертыТеатрыКонцертыМюзиклыЦиркФутболСпортФестивалиАктивный отдыхПарки развлеченийМузеиДостопримечательностиЭкскурсииС детьмиНочная жизньДругое

Модели было две. Первая построена на BERT, той же технологии, на которой Google понимает поисковые запросы: она читает название, описание и площадку и называет главную категорию и ещё две подходящие. Вторая, лёгкая и быстрая, работала в ежедневном потоке вместе со словарём категорий партнёров. В админке у каждого события видны теги трёх цветов: от партнёра, из словаря и от нейросети. Спорные случаи вынесены в отдельный список, а переобучение запускается одной кнопкой.

Третья модель разбирает хаотичные названия. Из строки вроде «Concierto de X en Madrid» или «A vs B — Stadium, 11/11» она достаёт исполнителя, город, площадку и дату. Учили её на 318 тысячах реальных названий событий, и больше 200 тысяч из них разметили автоматически, правилами, без ручного труда. По выделенному названию шоу события из разных городов и дат собираются в одну страницу «все даты и города».

SEO, заложенное в архитектуру

Основной канал трафика — поиск, поэтому требования SEO легли в техническое задание раньше первой строчки кода: какие у страниц адреса, как устроены заголовки, пагинация, фильтры, что закрыто от индексации. Дальше это стало частью платформы, а не ручной работой над каждой из 48 версий сайта.

Адреса на языке страны
Категории переведены не только в меню, но и в адресах: концерты на испанском сайте лежат по адресу /entradas/concierto, на русском — /bilety/kontsert, на китайском — /menpiao/yinyue-hui. Старые адреса переводятся на новые постоянным редиректом, вес страниц не теряется
Связь 48 сайтов между собой
У каждой страницы пары hreflang «язык — страна» на все 9 языков, у события одна каноническая страница. Google понимает, какую версию показать испанцу, а какую немцу, и не считает их дублями
Шаблоны заголовков
Title, description, H1 и SEO-текст собираются по шаблонам с подстановкой города, месяца, года, площадки и даты. Четыре уровня: главная, листинг, категория, событие. Уникальные заголовки у миллионов страниц без ручной работы
Расширенные сниппеты
Микроразметка Schema.org: событие с площадкой, адресом, датой и ценой в валюте посетителя, хлебные крошки, поиск по сайту прямо из выдачи
AMP-версия
Облегчённые страницы событий по стандарту Google AMP собираются автоматически из основных и мгновенно открываются из мобильной выдачи
Скорость
Страницы рендерятся на сервере, ответы API кешируются, картинки нарезаются в пяти размерах, в том числе в WebP, с умным кропом и понятными поисковику именами файлов и раздаются с CDN
Схема адресов: страна, город, раздел, категория, карточка. Несколько городов и фильтры — тоже в адресе, чтобы такие страницы можно было индексировать
Схема адресов: страна, город, раздел, категория, карточка. Несколько городов и фильтры — тоже в адресе, чтобы такие страницы можно было индексировать
Фрагмент ТЗ по SEO: title, description, заголовки, обязательные страницы, дубли, вёрстка, пагинация, AMP
Фрагмент ТЗ по SEO: title, description, заголовки, обязательные страницы, дубли, вёрстка, пагинация, AMP

Карты сайта на 5 миллионов адресов

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

  1. 1В 02:00 сервис по очереди обходит все 48 доменов
  2. 2Берёт новые события страны и обновлённые группы «все даты и города»
  3. 3Режет их на файлы по 3 300 событий: каждое событие даёт 9 адресов на разных языках с полным набором hreflang, файл остаётся ниже лимита Google в 50 000 адресов
  4. 4Дописывает новые файлы в индекс с датой изменения, старые не пересобирает
  5. 5Отдельно собирает карту страниц категорий на 9 языках и robots.txt домена со ссылкой на индекс
На январь 2020 года в картах сайта было около 5 миллионов адресов. Больше всего у США, Великобритании, Германии и Испании. Мониторинг постоянно проверял, что карта каждого домена не пустая: сломанная карта сайта — это тихая потеря индексации, которую без проверки замечают через недели.

Сквозная аналитика и сводный отчёт по всем странам

Аналитика видела весь путь посетителя: какие карточки ему показали, что он открыл, на какой билет кликнул, дошёл ли до оформления. Но продажа происходит на сайте партнёра, и обычная аналитика её не видит. Мы замкнули цепочку: вместе с переходом партнёрская сеть получает метку визита, а когда билет продан, присылает статус продажи. Сервер передаёт её в Google Analytics с суммой и привязкой к исходному визиту, а при возврате билета так же отменяет покупку. В отчётах видно, какой источник трафика и какая страница приносят реальные продажи, а не только клики.

У 48 сайтов 48 отдельных ресурсов в Google Search Console, и смотреть их по одному невозможно. Отдельный механизм собирал данные со всех консолей и складывал их в единый отчёт в Google Data Studio: в одном окне видно, как весь проект растёт в поиске.

Каждое утро команде в Telegram приходила сводка: сколько событий на каждом из 48 сайтов, сколько из них активных, сколько новых за сутки. А мониторинг сам писал в тот же чат, если сайт отвечал ошибкой, API работал дольше пяти секунд или у домена истекал сертификат.

Кластер из восьми серверов

Сорок восемь сайтов, поиск по всему миру, импорт и нейросети не помещаются на один сервер. Проект работал на кластере из восьми машин с внутренней сетью. Сайт и API запущены в двух копиях на разных серверах, плюс горячий резерв: если один сервер падает, посетитель этого не замечает. База данных реплицирована, поисковый движок работает на двух узлах.

Sun

Вход в кластер, балансировщик, реестр образов, логи, метрики, сборки

Neptune

Боевой сайт, AMP, личный кабинет, API — первая копия

Saturn

Боевой сайт, AMP, личный кабинет, API — вторая копия

Uran

Тестовая среда и горячий резерв сайта и API

Star

Основная база данных и поисковый движок

Moon

Копия базы, импорт, переводы, картинки, нейросети, ночные задачи

Jupiter

Второй узел поиска, кеш, генерация карт сайта

Mars

Арбитр базы данных и защищённый вход для администраторов

Восемь серверов во внутренней сети, названы в честь небесных тел. Картинки раздаёт отдельное хранилище с CDN

Новая версия выкатывается из GitLab автоматически, без простоя, а если обновление не поднялось, система сама возвращает предыдущую. Для проверок есть отдельные тестовая и предрелизная среды. Логи всех серверов и метрики нагрузки собираются в одном месте, копии базы регулярно уходят в отдельное облачное хранилище.

Задел на собственную билетную платформу

Следующим шагом агрегатор должен был стать ещё и площадкой, где организатор продаёт билеты сам. Мы спроектировали кабинет организатора: мастер создания события, площадки со схемой зала, расписание по городам и часовым поясам, типы билетов с сервисным сбором, список участников, продажи и выплаты. Для покупателя — своя корзина с бронью мест на пять минут и оплата картой. Часть этого успели собрать в коде.

Прототип панели организатора: продано билетов, выручка, визиты и продажи по типам билетов и сеансам
Прототип панели организатора: продано билетов, выручка, визиты и продажи по типам билетов и сеансам
Прототип схемы зала: организатор выбирает тип билета и отмечает места, одно место может входить в несколько типов
Прототип схемы зала: организатор выбирает тип билета и отмечает места, одно место может входить в несколько типов

Взлёт и ковид

Первые полгода ушли на платформу: импорт, 48 доменов, переводы, индексацию. В декабре 2019 года поисковый трафик начал расти, а в январе-феврале 2020 пошёл вверх почти вертикально. Пик пришёлся на середину февраля.

×4
переходов из Google за месяц: январь → февраль 2020
×6
показов в Google за тот же месяц
−94 %
переходов к июню 2020: мир закрылся на карантин
Сводный отчёт Data Studio по всем Search Console проекта, июнь 2019 — июнь 2020: показы и клики. Абсолютные значения скрыты
Сводный отчёт Data Studio по всем Search Console проекта, июнь 2019 — июнь 2020: показы и клики. Абсолютные значения скрыты
В марте 2020 года концерты, спектакли и матчи по всему миру отменили. Показы и клики обвалились вслед за самими событиями: людям стало некуда покупать билеты. Проект, который только что вышел на взлёт, остановила пандемия, а не рынок и не продукт.

Что мы сделали

  • Спроектировали интерфейс всего сайта: прототипы каждого экрана с пометками для разработчика, требования по SEO и схему адресов страниц до начала вёрстки
  • Нарисовали дизайн по прототипам: 13 разделов, каждый экран в семи ширинах от 320 до 1800 пикселей, заглушки-обложки для событий без картинок
  • Сделали AMP-версию страниц событий для мгновенного открытия из мобильной выдачи Google
  • Запустили 48 сайтов стран на одном коде: домен задаёт страну, язык и валюту, посетитель переключает любое из трёх; 9 языков, 19 валют с ежедневными курсами, автоматический перевод описаний
  • Сделали поиск по всему миру: несколько городов сразу с радиусом до 250 км, затем страна, затем мир; события на карте
  • Спроектировали и запустили систему импорта: источник подключается настройкой в админке, без программиста; к осени 2020 года работало 59 источников
  • Научили систему находить одно шоу у разных партнёров, склеивать дубли и показывать цены продавцов рядом; адреса площадок уточняет геокодинг
  • Обучили нейросети раскладывать события по категориям меню и доставать из хаотичного названия исполнителя, город, площадку и дату
  • Заложили SEO в архитектуру: адреса на языке страны, hreflang между 48 сайтами, шаблоны заголовков, микроразметка событий с ценой
  • Сделали сервис карт сайта: каждую ночь для каждого домена, около 5 млн адресов с языковыми парами и под лимиты Google
  • Настроили сквозную аналитику: продажа на сайте партнёра возвращается в Google Analytics с суммой и привязкой к визиту; данные всех Search Console собрали в единый отчёт в Data Studio
  • Развернули кластер из восьми серверов: две копии сайта и API, горячий резерв, реплицированная база, автоматическая выкладка с откатом, мониторинг с уведомлениями в Telegram
  • Спроектировали кабинет организатора и собственную кассу как следующий шаг: события, схемы залов, типы билетов, бронь мест и выплаты

Дизайн: главные экраны

Страница площадки: афиша, описание, схемы залов и адрес. У каждой площадки своя страница, чтобы её находили по запросам вроде «афиша театра»
Страница площадки: афиша, описание, схемы залов и адрес. У каждой площадки своя страница, чтобы её находили по запросам вроде «афиша театра»
Страница категории «Ночная жизнь»: свой баннер, несколько городов сразу, фильтры по жанру, дате, цене и месту
Страница категории «Ночная жизнь»: свой баннер, несколько городов сразу, фильтры по жанру, дате, цене и месту
Раздел «Футбол»: лиги по конфедерациям с поиском. Под популярные категории сделаны отдельные посадочные страницы
Раздел «Футбол»: лиги по конфедерациям с поиском. Под популярные категории сделаны отдельные посадочные страницы
Корзина: билеты зарезервированы на пять минут, таймер виден всё время оформления
Корзина: билеты зарезервированы на пять минут, таймер виден всё время оформления
Мобильная версия: карточка �события и меню со страной, языком и 19 валютами
Мобильная версия: карточка события и меню со страной, языком и 19 валютами

Результат

Платформа заработала на 48 доменах, на 9 языках и в 19 валютах. События 59 источников каждую ночь проходили импорт, склейку, перевод и раскладку по категориям без ручной работы, а карты сайта на 5 миллионов адресов обновлялись сами. После полугода подготовки проект пошёл вверх в поиске: с января по февраль 2020 года переходы из Google выросли примерно в 4 раза, показы в 6 раз. В марте 2020 года по всему миру отменили концерты, спектакли и матчи, и трафик рухнул вслед за самими событиями: к июню переходов стало на 94 % меньше, чем в феврале. Проект остановила пандемия, а не продукт. Опыт этого проекта — импорт данных, многоязычное SEO на десятки стран, сквозная аналитика — мы применяем в проектах клиентов.

Другие кейсы

Все кейсы
GEOSEOСайтПроектирование
№1
в ответе ChatGPT на вопрос об офисе для команды
Сентябрь 2026

Аренда офисов на Пхукете: страница под SEO и нейросети — через пять недель её рекомендуют ChatGPT, Perplexity и Алиса

Коворкинг, аренда офисов · Пхукет, Таиланд

Задача. У коворкинга на юге Пхукета пять этажей, и кроме рабочих мест он сдаёт отдельные офисы: меблированные кабинеты на 5–6 человек, площади под целый этаж и виртуальный офис с юридическим адресом. Но отдельной страницы про офисы на сайте не было: реклама офисов вела на Google Карты, а по запросам вроде «office for rent phuket» поисковик показывал порталы с объявлениями. Нужна была страница, которую находит и Google, и нейросети, у которых экспаты и релоканты всё чаще спрашивают, где снять офис на острове. Причём встроенная в существующий сайт на Tilda, без переезда, и на двух языках: английском и русском.

№1
в ответе ChatGPT на вопрос об офисе для команды
3 из 3
нейросетей рекомендуют: ChatGPT, Perplexity, Алиса
99 %
запросов кластера покрыто текстом страницы
Подробнее о кейсе
СайтSEOПроектирование
×3
показов в Google за лето, июнь к сентябрю
Сентябрь 2026

Сайт лодочных туров на Пхукете: два языка, статика за CDN — и переходы из Google по целевым запросам в первый же сезон

Приватные лодочные туры · Пхукет, Таиланд

Задача. Небольшая компания на Пхукете с двумя новыми лодками 2025 года постройки: приватные морские прогулки на день для семей и пар, с крышей от солнца, мягкими сиденьями, душем и снаряжением на борту. В интернете у неё были только прежний сайт на домене из названия компании и аккаунт в Instagram. Нужен был сайт, который сам приводит гостей из поиска: на английском для туристов со всего мира и на русском; быстрый на телефоне с мобильного интернета из любой точки планеты; продающий не «трансфер до острова», а комфорт и свободу маршрута, ведь именно за это клиент просит больше, чем стандартные лодки на пляже. И ещё одно требование: сайт должны правильно понимать не только Google, но и ИИ-ассистенты, у которых туристы всё чаще спрашивают, какую лодку взять на Пхукете.

×3
показов в Google за лето, июнь к сентябрю
4,3 %
CTR в Google: доля показов, закончившихся переходом
~60 мс
ответ сервера: страницы отдаются из кеша Cloudflare
Подробнее о кейсе
СкоростьSEO
+60%
переходов из поиска через месяц после правок
Август 2026

Главная в 2,5 раза быстрее без редизайна: 12 точечных правок — и через месяц +60 % переходов из поиска

Мастерская по ремонту и перетяжке мягкой мебели · сайт на MODX

Задача. Сайт мастерской по перетяжке мягкой мебели: живой трафик из поиска, заявки через формы, чат и звонки, CMS MODX, которой много лет. Жалоба владельца звучала обобщённо — «сайт медленный». Типовой ответ на такую жалобу — «сожмите картинки и включите кеш». Мы решили сначала измерить: где именно теряются секунды и что из этого чувствует посетитель. Ограничения — как всегда у работающего бизнеса: не сломать формы заявок, капчу и админку, не затевать редизайн и не останавливать сайт ни на минуту. Скорость здесь не только про удобство: показатели загрузки страницы входят в факторы ранжирования и у Яндекса, и у Google.

+60%
переходов из поиска через месяц после правок
−61%
время до показа главного контента (LCP)
12 задач
найдено и закрыто, каждая — с замером до и после
Подробнее о кейсе

Хотите похожий результат у себя?

Расскажите о задаче — предложим решение и оценим сроки.