Туризм и отдых
Корпоративный сайт
Октябрь 2026
Создать новый русскоязычный сайт Ada Tours для выбора путешествий по Латинской Америке и Антарктиде. Объединить программы из Word, материалы прежних сайтов, фотографии, места и экскурсии в связанную систему; сделать её наглядной для туристов и понятной поисковикам и нейросетям. Предусмотреть мобильную версию, формы заявок, поиск, карты маршрутов, обновление каталога из Google Drive и дальнейшее развитие на английском и других языках.
В один из дней разработки точки нашего маршрута стояли в Южной Америке, а линия между ними почему-то рисовалась в Тихом океане. В другой момент выяснилось, что одна медиатека уже весит около 1,44 ГБ и не помещается в выбранную схему публикации. А когда дошла очередь до приёма заявок, "известные события" с дата-центрами Яндекса заставили срочно готовить резервный путь доставки новых обращений.
Так создавался AdaTours.ru — большой туристический сайт о Латинской Америке и Антарктиде. С красивыми фотографиями, подробными программами, связанными между собой местами и экскурсиями, картами маршрутов и тысячами полезных текстов. В разработке мы использовали ИИ-агентов, но главным вопросом было управление: откуда берутся факты, кто меняет общие данные, как не потерять работу и что считать действительно опубликованным.
Основной цикл на русском языке — от первого коммита 24 сентября до успешного выпуска последней большой партии редакционной переработки SEO/GEO-текстов 22 октября 2026 года — занял 29 календарных дней. Дальше сайт продолжил развиваться: мы распространили обрезку мобильных фотографий на весь каталог, доработали редакторский доступ и начали пилить английскую версию. Эти следующие этапы тоже вошли в кейс и отмечены отдельно.

Календарные дни от первого коммита до завершения массовой редакции — 29.
Коммиты, вошедшие в историю основной ветки к этому выпуску — 3 385.
Среднее число таких коммитов за календарный день — около 117.
HTML-страницы, созданные сборкой — 6 129.
Самостоятельные каталоги — 4 003.
Страны и территории — 24.
Опубликованные места — 1 018.
Активные туры — 358.
Активные экскурсии — 415.
Тематические интересы — 15.
Утверждённые SEO/GEO-материалы — 5 564.
Файлы, созданные или обработанные GPT Image — 3 940.
Связи туров с местами в их структурированных данных — 4 670.
У этих чисел разные единицы измерения. Страницы включают каталоги, пагинацию и служебные маршруты сборки. Из 5 564 утверждённых материалов часть в выпуске на тот момент сохранялись без действующей канонической страницы. В число ИИ-изображений не включены обычная конвертация и мобильные производные. Коммит — зафиксированное изменение, в том числе служебное.
Для оценки срока работы мы взяли стартовый рубеж: успешный выпуск GitHub Pages 22 октября. Подготовка и инвентаризация исходных материалов начались раньше первого коммита.
У Ada Tours уже были накопленные программы, фотографии, страницы старых сайтов и документы менеджеров. Перенести всё это в новый дизайн было только частью задачи. Требовалось превратить разрозненные материалы в понятную систему выбора путешествия.
Человек может прийти с разными намерениями. Один уже решил ехать в Бразилию. Другой мечтает о Мачу-Пикчу, но пока не знает, какой тур выбрать. Третий ищет кофейное путешествие. Четвёртый хочет совместить несколько стран. Для каждого нужен собственный вход и логичное продолжение.
Поэтому мы начали с инвентаризации, нормализации названий и сопоставления источников. В исторической исходной очереди было 712 редакционных единиц: страны, места, туры, экскурсии, темы и основные общие страницы. Это не нынешний объём сайта: во время работы каталог дополнялся, а из программ выделялись самостоятельные места и экскурсионные продукты.
У каждой сущности появился постоянный идентификатор, выбранный источник текста, точный путь файла, адрес страницы и набор связей. Идентификатор не зависел от того, как маркетолог завтра переименует заголовок. Это решение пригодилось и при перелинковке, и при ежедневном обновлении Word-программ, и при переводе на английский.
Отдельно разобрали дубли и архив. Похожее название ещё не доказывает, что перед нами одна поездка: могут отличаться длительность, направление движения, состав услуг, сезон или способ возвращения. И наоборот, два названия могут скрывать один продукт. Для архивных предложений сохранили историю, но исключили их из актуального выбора и поисковых рекомендаций.
Для этого проекта нам требовались тысячи содержательных страниц, общие правила оформления и возможность управлять данными программно. Мы выбрали Astro: тексты и структурированные данные превращаются в готовый HTML во время сборки, а интерактивность добавляется там, где она нужна посетителю.
Так поисковый робот получает содержимое страницы в документе. Турист видит программу, описание места и ссылки, а для меню, поиска, раскрытия текста, формы и карт работает отдельная клиентская логика. Изменение общего шаблона распространяется на все страницы соответствующего типа.
Astro и общие компоненты — Генерация HTML, единые шаблоны стран, мест, туров, экскурсий и каталогов.
Markdown и JSON — Тексты, коммерческие данные, связи, реестры и история источников.
GitHub и GitHub Actions — История изменений, проверки, сборка и подтверждение публикации.
GitHub Pages — Публикация готовой статической части сайта.
Pagefind — Поиск по заранее построенному индексу без отдельного поискового сервера.
Yandex Object Storage — Изображения и видео на собственном медиадомене.
Yandex Cloud Functions и Postbox — Серверная обработка заявки и почтовая доставка.
Яндекс Карты и адаптер Google Maps — Два варианта отображения одного набора географических данных.
У статической архитектуры свои условия: содержательные изменения требуют новой сборки, тяжёлые медиа нужно хранить отдельно, а редактору необходим безопасный путь к данным. Эти вопросы мы решали вместе с визуальной частью.
Подход Astro к статической генерации и модель Pagefind хорошо совпали с нашей задачей: большая содержательная база, быстрый доступ к ней и управляемая публикация.

Главная архитектурная работа происходила между страницами. Мы разделили географическое место и туристическую услугу. Рио-де-Жанейро — место. Экскурсия по Рио — продукт с собственной программой. Большой тур может включать Рио, несколько экскурсий и ещё десяток остановок.
На сайте это выразилось в нескольких основных сущностях:
Страна собирает географию, места, туры, экскурсии, интересы и практические материалы.
Место объясняет, зачем туда ехать, показывает изображения и помогает найти подходящую программу.
Тур хранит маршрут, дни, стоимость, включённые услуги и связи с посещаемыми местами.
Экскурсия существует самостоятельно и может использоваться в разных турах.
Интерес объединяет подходящие предложения по смыслу поездки.
Если одна и та же экскурсия входит в несколько туров, её не приходится копировать в каждую программу. Тур ссылается на общую запись. У неё собственные текст, фотография и страница. Для подтверждённых особенностей конкретного пакета предусмотрен вариант описания внутри тура: общая экскурсия от этого не меняется во всех остальных предложениях.
Связи работают в обе стороны. Из тура можно открыть место. На странице места — увидеть туры, которые его посещают. На странице экскурсии — найти поездки с этой программой. В основе лежат реальные идентификаторы, поэтому похожие названия не превращаются автоматически в ложные совпадения.
К дате сдачи в данных активных туров было 4 670 ссылок на места, 3 628 номерных дней программы и 769 самостоятельных вставок экскурсий между днями. Последнее число не включает другие допустимые способы вложения экскурсионного блока: это конкретная категория, которую можно воспроизвести по исходникам.



Например, в путешествии по Бразилии, Аргентине и Перу турист последовательно знакомится с географией маршрута, впечатлениями, программой и условиями. А страница Рио-де-Жанейро становится отдельной точкой входа в ту же систему.
Из связанного каталога можно получить полезные подборки: туры в страну, поездки с посещением места, экскурсии по интересу, сочетания стран, VIP-предложения. Мы не составляли каждую такую страницу вручную.
Сборка вычисляет непустые сочетания по активным программам. Так появились маршруты по нескольким странам, тематическая география и подборки на пересечении интереса и страны. Если подходящего продукта нет, механизм не должен создавать пустое обещание туристу.
Для сложных путешествий пришлось отдельно различать основные страны маршрута и дополнительные посещения. Иначе случайный факультативный выезд мог бы сделать поездку главным предложением совсем другой страны. Тот же принцип действует для интересов: музей внутри приключенческого тура остаётся культурной экскурсией, а краткое упоминание птиц ещё не превращает всю поездку в специализированное наблюдение за животными.
Счётчики и списки пересчитываются вместе с данными. Поездку сняли с продажи — она перестала участвовать в активных подборках. Сочетание временно опустело — его редакционная история сохраняется, но оно не продолжает обещать доступные туры.
В контрольной сборке получилось 4 003 каталога и 4 244 страницы каталогов с учётом пагинации. Это часть общего числа страниц. Для следующих страниц пагинации мы не создавали копии одной SEO-статьи: содержательный материал относится к основной странице подборки.

Первый визуальный ориентир строился вокруг крупных фотографий, выразительной типографики и больших пауз между блоками. Для туристического продукта это понятный язык: изображение должно успеть произвести впечатление.
Но на длинных страницах с программами и десятками мест обнаружилась другая сторона такого подхода. Человек слишком долго проходил пустые промежутки между содержательными блоками. «Дорогой воздух» начал мешать выбору.
Мы сохранили масштаб изображений и сократили расстояния. 20 октября общие вертикальные отступы были уменьшены: стык двух обычных секций стал занимать 48–96 пикселей вместо прежних 144–300. На мобильном экране это особенно заметно: один жест чаще приводит к следующему аргументу в пользу поездки.
Вместо большого количества однотипных рамок использовали полноширинные фотографии, текст поверх изображения и горизонтальные ленты мест. Фирменный бирюзовый акцент #22BFC8 объединил кнопки и интерактивные элементы. Сторону текста на фотографии можно задать у самой сущности: настройка сохраняется, когда её обложка появляется в другом разделе.

Длинные тексты получили несколько способов раскрытия. Описания дней сворачиваются знакомым знаком «+», а фотографии остаются видимыми. У большого SEO/GEO-материала видна вводная и постепенно бледнеющее продолжение под кнопкой раскрытия. Сам текст уже находится в HTML; кнопка управляет удобством чтения, а не подгружает пустую страницу вместо содержания.



Видеодемонстрация: как раскрываются дни программы, 12 секунд.
Так получился насыщенный сайт, в котором можно быстро смотреть фотографии и постепенно углубляться в детали. Желающий прочитать программу полностью получает её; посетитель, который пока выбирает направление, не обязан сразу разбирать несколько экранов текста.
Медиатека Ada Tours была ценным исходным материалом, но фотографии различались по размеру, резкости, освещению и пригодности для большого экрана. Простого переноса файлов не хватало: изображение, которое терпимо выглядело маленькой карточкой, могло развалиться на полноширинной обложке.
Мы использовали GPT Image для обработки и подготовки изображений, а результаты сохраняли в реестре. У записи есть связь с источником и новым файлом. Один готовый кадр можно использовать повторно там, где это соответствует месту и смыслу программы.
При этом мы различали восстановление существующей фотографии и создание художественной иллюстрации. Для тематических разделов допустим самостоятельный образ интереса. Его нельзя выдавать за документальный кадр из конкретной поездки. У изображения реального места другая задача: сохранить узнаваемый объект и не превратить улучшение качества в выдуманную географию.
Отдельной работой стало устранение повторов. Когда общая экскурсия появлялась внутри тура, её фотография иногда уже стояла у соседнего дня. Исправлять это заменой общей обложки во всех турах было бы слишком грубо. Мы сначала выясняли, дублируется ли продукт или только кадр, и меняли нужный слот.


К 22 октября было зарегистрировано 3 940 файлов GPT Image. Обычная техническая реставрация ещё 87 файлов считалась отдельно. Такой учёт оказался весьма полезным: конвертация в WebP сама по себе не доказывает, что изображение прошло содержательное ИИ-улучшение.
У насыщенного фотографиями сайта быстро появилась материальная сторона. В снимке медиатеки перед переносом было 2 981 изображение общим объёмом 1 439 555 866 байт — около 1,44 ГБ. Между тем у опубликованного GitHub Pages-сайта есть ограничение размера 1 ГБ.
Проблема была в размере публикуемого пакета и тяжёлой истории медиа. Формулировка «на GitHub закончилось место» передаёт ощущение, но технически не объясняет, что надо менять.
Мы разделили код и медиа. HTML, CSS, JavaScript и поисковый индекс остались в публикации Pages. Изображения и видео перенесли в Yandex Object Storage и стали отдавать через img.adatours.ru. Исходную историю Git сохранили; новые бинарные файлы запретили добавлять в репозиторий.
В текстах и данных остались понятные логические пути /media/.... Сборка переводит их в адрес медиадомена, в том числе для фоновых изображений, метаданных и структурированной разметки. Это позволило сохранить связи и не переписывать каждую страницу под детали хранилища.
Загрузка получила собственное подтверждение: файл должен существовать в Object Storage и совпадать по размеру и контрольной сумме. Новая версия получает новое имя, поэтому её можно долго кешировать без риска незаметно подменить старое изображение.
Позже нашли ещё один резерв. Даже после выноса медиа сборочная машина продолжала получать старые бинарные файлы из Git. В ноябре настроили выборочную загрузку рабочей копии: история осталась, но сборке больше не требовалось каждый раз скачивать примерно 1,44 ГБ старой медиатеки.
Полезный текст туристического сайта отвечает на вопросы выбора: чем отличаются маршруты, сколько времени нужно, что сочетается в одной поездке, какие впечатления действительно предусмотрены программой. Поэтому отдельные материалы получили страны, места, туры, экскурсии и содержательные каталоги.
Для SEO/GEO-производства мы создали очередь с постоянными адресами и отдельной историей публикации. Рой авторов получал ограниченные задания, работал с источниками и сдавал подготовленные материалы. Публикующий процесс проверял ссылки и структуру, собирал выпуск и только после успешного размещения менял статус результата.
Так можно было параллельно готовить тысячи текстов, не давая каждому исполнителю произвольно менять весь сайт. Сохранённый черновик, принятый материал и опубликованная страница стали разными состояниями. Это особенно важно при обрывах: повторный запуск должен продолжать работу, а не заново создавать уже готовое.
Но после первой волны проявилась редакционная ошибка. Часть продающих абзацев звучала так, будто автор обозревает чужой сайт: «в подборке представлены», «в программе указано», «стоимость заявлена». Фактура могла быть правильной, а подача текста — неподходящей для размещения на сайте туроператора.
Мы запустили второй проход. Его задача была узкой: вернуть тексту прямую речь Ada Tours и обращение к путешественнику. Например, вместо отстранённого описания подборки — предложение выбрать собственный маршрут компании. При этом нельзя было попутно менять цены, даты, таблицы, ссылки или превращать неподтверждённую услугу в обещание.
Хорошие фрагменты оставляли. Второй проход не означал обязательную замену каждого предложения. Автоматические проверки защищали структуру и числовые данные, а статус завершения появлялся после подтверждённой публикации точной версии файла.

Последняя крупная партия этого прохода — 377 материалов — успешно опубликована 22 октября. Именно этот рубеж мы выбрали для окончания основного русского цикла. Более поздние изменения отдельных программ продолжили требовать собственной проверки текста.
Для поиска в нейросетях мало многократно повторить название направления. Важно помочь системе понять, о каком объекте идёт речь, где он находится и с чем связан.
Мы собирали географические паспорта: подтверждённые варианты названий, координаты, страну, внешние идентификаторы и источники. Использовали Wikidata, Wikipedia, OpenStreetMap, GeoNames и профильные официальные ресурсы. Для каждого найденного соответствия сохраняли основание решения.
Это была работа с неоднозначностью. Город, провинция, остров и курорт с похожим именем не взаимозаменяемы. Бразильская и аргентинская стороны Игуасу не должны незаметно превращаться в одну сущность. Координата, представляющая большой остров, не обязана быть входом в парк или местом встречи туристов.
Далее общая система Schema.org связывала страницы, компанию, человека, поездку и места. Статья могла говорить об объекте, упоминать другой объект или ссылаться на публикацию о компании. Эти отношения не стоит сводить к одному sameAs: это свойство описывает идентичность, а не любую тематическую близость.
Для туров география бралась из самой программы и связанных мест. Для новых объектов мы предусмотрели адресное пополнение их паспортов, чтобы географические данные тоже пополнялись, одновременно с расширением текстового контента на сайте.

Географические данные пригодились сразу в двух задачах: в машинной разметке и в видимых посетителю картах. Это хороший пример того, как работа на продвижение в ответах ИИ может улучшать сам продукт, а не существовать скрытым приложением к странице.
Для русской версии сайта основным поставщиком карт выбрали Яндекс. Для других языков предусмотрели адаптер Google Maps. В обоих случаях используется один набор мест, порядок посещений, фотографии, подписи и ссылки. Логика маршрута не должна зависеть от того, чья карта нарисована под ней.
Сначала запустили пилот на нескольких страницах. Затем появились карты туров и экскурсий, а у мест — карта связанных направлений. Здесь есть смысловое различие: у маршрута можно соединить последовательные остановки, а рекомендации соседних мест нельзя представлять как собранную поездку по ним.
На пилоте возникла неожиданная ошибка. Номерные маркеры Яндекс Карт правильно стояли в Южной Америке, а векторная линия уходила в Тихий океан. Проверенные координаты были одинаковыми. Мы меняли настройки источника, делили геометрию на участки, уточняли стрелки — но сохраняли тот же отдельный механизм отрисовки линии, и проблема оставалась.
Окончательное решение изменило способ рисования. Для Яндекса соединения стали строиться отдельным прозрачным SVG-слоем по фактическому положению уже отрисованных маркеров на экране. При перемещении, увеличении и изменении размера карты линии пересчитываются. Google сохранил свой штатный географический способ рисования.
Доработали и первый вид: камера учитывает размеры карты и края маркеров, начальная и конечная точки не прячутся под соседними, карточки с фотографиями не перекрывают обязательные элементы поставщика карт.


Поставщики карт и тайлы загружаются отложенно. До загрузки интерактивной карты посетителю отображается список мест со ссылками. А для международной версии уже есть общий адаптер Google: его дальнейшая активация зависит от настроек соответствующей языковой публикации.
Когда на сайте больше тысячи мест, меню не решает все задачи. Мы добавили поиск по заранее построенному индексу Pagefind, с разделением стран, мест и туров.
Индекс использует названия, варианты написания и структурированные связи. Точное название должно быть сильнее случайного упоминания в длинном тексте. Иначе запрос по городу мог бы возвращать десятки программ, в которых он встретился лишь в примечании.
У поиска мест появилась карта результатов. Она обновляется вместе с запросом, удаляет устаревшие точки при изменении текста и показывает карточку выбранного места.
Рекомендации «Куда поехать дальше» тоже опираются на данные. Учитывается совместное присутствие мест в действующих турах. Поэтому пользователь получает продолжение, связанное с реальными маршрутами компании.

Подложка из видео на сайте кажется простой задачей, пока не появляются реальные исходники. В процессе нам присылали и горизонтальные фотографии внутри формально вертикального видео, и ролики длиннее минуты, и монтаж со сменой кадра чаще раза в секунду, и видео с текстом в центре.
Каждый из этих вариантов создавал свою проблему. Вертикальный контейнер не делает горизонтальную композицию удобной для телефона. Длинный ролик добавляет вес. Частая смена кадров отвлекает от чтения. Надпись внутри изображения спорит с заголовком и кнопкой сайта.
Мы постепенно сформулировали требования к фону: короткая визуальная история, спокойный ритм, подходящая композиция отдельно для широкого и узкого экрана, без встроенного текста в области интерфейса. Подготовка включала сжатие и облегчение файла; звук фоновому ролику не нужен.
Не все попытки оставались на сайте. История коммитов содержит включение роликов, возврат статичной фотографии и повторные попытки с новым материалом. Это была полноценная работа над поведением страницы, а не разовая вставка MP4.
В результате появился общий механизм для обложек. У сущности могут быть независимые горизонтальная и вертикальная версии. Если нужного варианта нет, не приходится автоматически подставлять заведомо неподходящий. Система поддерживает новые страны, туры и другие типы страниц через данные; отдельный сценарий для каждой новой обложки не требуется.

Видеодемонстрация: обложка главной, 10 секунд.
Видеодемонстрация: обложка Бразилии, 10 секунд.
До воспроизведения показывается первый кадр именно выбранного ролика. Это убирает скачок от посторонней фотографии к другому сюжету. На широком экране поведение учитывает наведение, на сенсорном — положение блока; скрытые области и вкладки не должны продолжать воспроизведение. У пользователя остаётся управление Play/Pause.
Большой сайт, у которого упор на визуал, не получится легко ускорить. Мы работали с фотографиями, фонами, видео, шрифтами, повторяющимся кодом и моментом подключения карт.
Главное изображение первого экрана получает высокий приоритет. Остальные фотографии загружаются по мере скроллинга и приближения к просмотру. Общий механизм lazy load учитывает и обычные изображения, и CSS-фоны, и горизонтальные ленты, и блоки, которые появляются после «Показать ещё». Телефон не должен скачивать все фотографии длинной программы, пока посетитель смотрит её начало.
Видеодемонстрация: быстрая прокрутка визуального каталога, 12 секунд.
Отдельно проверяли восстановление прокрутки при возврате назад, раскрытие скрытых блоков и изменение размеров после загрузки шрифта.
Повторяемые стили вынесли в общие файлы, HTML сжали, часть общего интерфейса сделали переиспользуемой. Здесь тоже была обратная итерация: форму заявки с сайта пришлось вернуть в исходный HTML, чтобы её обработчики и выбор кода страны не зависели от отложенной загрузки общего фрагмента.
Для изображений с версионированными именами настроили длительное кеширование. Видео получает preload="none" и сетевой адрес только при разрешённом воспроизведении. Карты подключаются отдельно от первого экрана.
Главная страница в версии без фонового видео — Mobile PSI: 85; Desktop PSI: 98.
Бразилия — Mobile PSI: 83; Desktop PSI: 98.
Рио-де-Жанейро — Mobile PSI: 84; Desktop PSI: 98.
Тур по трём экосистемам Бразилии — Mobile PSI: 86; Desktop PSI: 99.
Экскурсия по ночной Лапе — Mobile PSI: 82; Desktop PSI: 97.
Это медианы трёх повторов для каждой версии и устройства. Дальнейшее добавление видео меняло нагрузку: например, один из октябрьских экспериментов улучшил оценку главной на десктопах с 95 до 96, но мобильная снизилась с 78 до 69. Такие результаты мы сохраняли вместе с удачными.
Последний законченный сравнительный эксперимент в этой истории — 22 октября, с мобильными производными фотографий. На главной медиана Mobile выросла с 69 до 83, а время появления крупнейшего элемента LCP уменьшилось с 5,405 до 4,659 секунды. На всех 20 страницах с новыми мобильными производными LCP снизился; медиана попарного относительного изменения составила −17,72%. При этом общий балл вырос на 16 страницах, снизился на трёх и не изменился на одной.

Во время серии замеров 2 красивых результата по 100 баллов с не загрузившейся картинкой исключили и проверили заново. Корректная картинка и воспроизводимая методика нам важнее зелёного кружка.
У обычного object-fit: cover есть ограничение: он скрывает края изображения, но не уменьшает скачиваемый файл. Телефон может получить широкую фотографию целиком, хотя посетитель увидит только узкую часть.
Мы сделали отдельные мобильные производные. Сначала выбирается смысловой фокус: уже настроенная композиция, лица и головы людей или животных, главный объект сцены. Затем из исходного изображения вырезается подходящий фрагмент и сохраняется облегчённый WebP. ИИ помогает с выбором композиции; само вырезание не перерисовывает фотографию.
Здесь нельзя просто поставить центр для всех кадров. У ягуара голова может оказаться слева, у попугая — справа. У ребёнка с ламой иногда разумно сохранить части обеих фигур, а не любой ценой вписать всю картинку. После вырезания важно посмотреть, как полученный файл будет ещё раз кадрирован внутри реального блока сайта.


В пробном замере до массовой обрезки роем - суммарный вес 20 исходных изображений составлял 9,27 МБ. Сумма крупнейших портретных вариантов тех же источников — 2,29 МБ, на 75,34% меньше.
23 октября, уже после основного этапа создания сайта, подход распространили массово: обработали 2 053 исходника, провели 206 пакетов и 9 выпусков, добавили 5 580 привязок мобильных изображений к страницам и обложкам.
Механизм включён в постоянную работу. Для новой или изменённой обложки - через ИИ проверяется подходящий фокус для мобильного варианта изображения. Привязка учитывает страницу, источник и профиль блока: старую обрезку нельзя бездумно прикрепить к другой фотографии только потому, что у тура прежнее название.


Форма заявки должна помогать менеджеру продолжить разговор. Поэтому она передаёт не только контакт, но и контекст: страницу, тур, язык, источник перехода и рекламные параметры.
В интерфейсе есть имя, телефон с выбором страны, email, комментарий и удобный способ связи. Выбор канала зависит от заполненных контактов. Во время отправки повторный клик блокируется, ошибка показывается пользователю, а пустой или неработающий обработчик не изображает успешную доставку.
На странице существует один экземпляр формы. Основные кнопки открывают его в модальном окне, а без JavaScript переходят к расположенному на странице блоку. Так не приходится поддерживать несколько разных версий заявки для одного тура.
Серверную часть вынесли в Yandex Cloud Function на Python. Она проверяет входные поля, источник запроса и простые признаки автоматического спама, а затем отправляет письмо через Postbox. Получатели и секреты находятся на серверной стороне.

В октябре инфраструктура Яндекса пострадала от атак на дата-центры. Официальное сообщение компании и журнал Yandex Cloud фиксируют остановки и ограничения сервисов. Для нашего проекта это стало практической проблемой доставки заявок с сайта.
12 октября обработку формы переключили на резервный адрес forms-backup.adatours.ru. За ним работал отдельный приёмник на Coopertino с доставкой через Telegram-бота. Посетителю не пришлось изучать новый способ обращения: он по-прежнему заполнял форму, менялся маршрут обработки этой формы.
Возвращение к почтовой схеме тоже не свелось к нажатию одной кнопки. Потребовалось завершить DNS-настройки DKIM для Postbox.
22 октября подтверждённую почтовую доставку восстановили. Конфигурацию формы обновили так, чтобы посетитель не продолжал обращаться к прежнему обработчику из кеша.
Эта история показала ценность разделения ответственности. Статические страницы, медиатека и заявки не обязаны зависеть от одного компонента одинаковым образом. Резервная доставка позволила продолжить работу с обращениями, а восстановление основного пути стало отдельной решаемой задачей.
Мы не заявляем число «спасённых заявок»: таких измерений в этом кейсе нет. Здесь результат — созданный и реально переключённый резервный путь, подтверждённый историей конфигурации.
У компании уже существовали AdaTours.com, BrasilTours.ru и VIP Deluxe Travel. Для новой структуры требовалось понять, какая старая страница соответствует какому новому объекту.
Мы разобрали старые страницы и составили таблицы соответствий. Простое сходство названий не принимали за доказательство: сравнивали географию, программу и тип продукта. Отдельно отмечали точную пару, тематический аналог и отсутствие самостоятельного соответствия.
В подготовленном 22 октября наборе было 1 271 соответствие для vipdeluxetravel.ru, 351 для adatours.com и 674 для brasiltours.ru. Это строки сопоставления; в них могут быть разные старые адреса одного объекта, поэтому число строк не равно числу уникальных новых страниц.
На нашей стороне эти связи вошли в структурированные данные. Администратор старых сайтов настроил постраничный 301-редирект с VIP Deluxe Travel и постраничный sameAs с AdaTours.com и BrasilTours.ru.
Например, прежняя страница Бразилии на vipdeluxetravel.ru ведёт на новую Бразилию на adatours.ru. Страницы Бразилии на двух продолжающих работать сайтах сохраняют собственное содержимое и указывают соответствующий новый объект в разметке.
301 и sameAs решают разные задачи. Первый переводит посетителя и робота на новый адрес. Второй помогает описать идентичность объекта между ресурсами; он не заменяет перенаправление и сам по себе не доказывает прирост позиций или передачу ссылочного веса.
Параллельно настроили канонические адреса, sitemap, индексирование актуальных страниц и исключение архивов, разметку компании, автора, предложений и видимых вопросов. В разделе публикаций, материалах о компании и партнёрах собрали подтверждённые внешние связи. SEO/GEO здесь складывается из согласованной картины, а не из одного добавленного тега.
После запуска сайта менеджеры не перестают менять программы. Админки, в привычном ее понимании, у сайта нет. И если сайт обновляется только вручную по отдельной просьбе - через некоторое время описание, цена и исходный документ начинают расходиться.
Мы связали обслуживание каталога с папкой программ Ada Tours на Google Drive. Проверка обнаруживает новые и изменённые файлы, сопоставляет их с существующими продуктами и сохраняет состояние работы. В текущем режиме она запускается ежедневно в 04:00 по Москве.
Важен не только факт изменения файла. Документ могут переименовать, переложить или пересохранить без изменения программы. Поэтому используются постоянный ID файла, версия и содержательная проверка: маршрут, длительность, даты, услуги, таблицы цен, изображения.
Для подтверждённого обновления задали полный цикл: подготовка тура, нужных мест и экскурсий, тематических связей, изображений, мобильных обложек, содержательных SEO-текстов и географических данных. Завершение требует проверки сборки, публикации и синхронизации реестров. Сам факт ежедневного обхода папки не означает, что весь найденный объём уже опубликован: незакрытые стадии сохраняются до выполнения.
Когда исходник смешивает разные программы или содержит противоречивые тарифы - он остаётся в адресной очереди до разрешения вопроса. Следующая проверка продолжает незавершённый этап, а не забывает его после нового обхода Drive.

Ежедневную проверку настроили ещё в октябре; полный жизненный цикл уточнили 26 октября. Это уже развитие после основного 29-дневного этапа. Его смысл — сохранить качество накопленного каталога, когда новые предложения появляются регулярно.
Отдельным испытанием стало управление сайтом со стороны Анны, основательницы Ada Tours. Кажется, что достаточно подключить GitHub к чату — и можно поручать ему любые изменения. Но текст и новое изображение проходят разные пути.
Текстовый файл можно изменить через GitHub. Новое фото нельзя туда положить: после переноса медиатеки внутренние правила проекта запрещают новые бинарные файлы в репозитории. Его надо загрузить напрямую в Object Storage, проверить и только потом связать со страницей.
Приглашение в общий чат или проект само по себе не даёт полномочий записи в облако. В привычной рабочей среде загрузка уже была настроена, а у нового участника не было того же разрешённого маршрута. На бытовом уровне это выглядело как «нашему чату токен дают, другому — нет».
Технически система проверяет доверенный GitHub-процесс и разрешённый аккаунт. Поэтому для приглашённых редакторов разработали отдельный путь запроса временного допуска: запрос с одноразовым открытым ключом, проверка автора, зашифрованный ответ и прямая загрузка файла. Постоянный ключ облака не приходится передавать в переписке.
Эта часть появилась 30 октября. Реализация маршрута ещё не равна доказательству, что конкретный приглашённый пользователь успешно прошёл весь цикл в своей среде. Практический вывод для нас: готовность редакторского доступа надо проверять отдельно на реальном аккаунте хозяйки, включая изображение, а не только правку абзаца.
Масштаб проекта потребовал не одного длинного разговора с нейросетью, а разделения работы на огромное число отдельных заданий. Одни процессы готовили тексты, другие собирали факты, третьи работали с изображениями. Публикация имела отдельные условия завершения.
Мы завели очереди, временные резервы заданий и постоянные идентификаторы результатов. Если несколько исполнителей работают одновременно, они должны видеть, что уже занято и что действительно закончено. При повторной попытке важно не перезаписать чужую работу и не выдать повторный результат за новую выполненную задачу.
Общие компоненты давали эффект масштаба: исправление формы, ленты мест или карты распространялось на соответствующий тип страниц. Но этот же масштаб требовал аккуратности. Нельзя было ради одной фотографии менять чужие туры, а ради изменения формулировки в статье — незаметно исправлять цену.
В итоге главным активом стали не только страницы и иллюстрации. Мы получили воспроизводимый способ поддерживать их: источники, модель данных, историю изменений, очереди, проверки и подтверждение выпуска. Он позволяет продолжать проект без возвращения к исходной точке после каждого нового задания.
За основной цикл — 29 календарных дней с 24 сентября по 22 октября 2026 года — получили 6 129 страниц сборки, 4 003 каталога, 5 564 утверждённых SEO/GEO-материала и 3 940 файлов, созданных или обработанных GPT Image. В каталоге на эту дату было 24 страны и территории, 1 018 опубликованных мест, 358 активных туров и 415 активных экскурсий.
Сайт связал географию, программы и впечатления, получил поиск, схемы маршрутов, видеообложки, мобильные изображения и контекстную форму заявки. Последующие этапы отдельно расширили мобильное кадрирование, ежедневное обслуживание программ и доступ приглашённых редакторов.
Следующий этап — использовать русскую основу для нового англоязычного сайта, который должен заменить прежний международный ресурс Ada Tours.
Мы сохраняем единые идентификаторы, цены, изображения, маршруты и связи. Английский слой подставляет соответствующие тексты в те же полноценные шаблоны. Так изменение общей фотографии или коммерческих данных не требует вручную синхронизировать два независимых каталога.
Источником содержания на английском в первую очередь служат подходящие утверждённые Word-программы компании; отсутствующие фрагменты переводятся с основы на русском. Для общих экскурсий и повторяющихся блоков сохраняется единая идентичность, чтобы одна и та же услуга не получила несколько случайно расходящихся переводов.
Английская версия уже развивается на отдельной площадке, закрытой от индексации. Полный международный запуск и замена старого домена остаются следующим этапом. Под эту работу заранее подготовлены общие шаблоны и адаптер Google Maps.
За время создания сайта adatours.ru мы прошли путь от исходных материалов к 6 129 страницам, связанному каталогу и тысячам проверяемых текстовых и визуальных результатов. Дальнейшая задача — перенести эту содержательную систему на другой язык и сохранить её актуальность по мере появления новых путешествий.
Проект: Ada Tours · Разработка и SEO/GEO-архитектура: GAEO.
Основной срез — выпуск GitHub Pages от 22.10.2026, исходная версия 03e99c1 и подтверждение редакционных статусов 9f59ec9. Количество страниц и каталогов взято из журнала этой сборки; сущности, связи и ИИ-файлы посчитаны по тому же историческому состоянию. История проекта исследована до 11.11.2026. Скриншоты для кейса сделаны 11.11.2026 и могут отражать последующие улучшения.
Технические документы открыты в репозитории alexyakovlev79/adatours.ru. В контрольной версии 0faffbbc доступны MEDIA_DELIVERY.md и регламенты seo-geo-voice-rewrite, geo-maps, mobile-hero-p06-20261022 и tour-2027-daily. Ссылка на успешный выпуск с исходниками приведена в начале кейса.