У нас в Точка Банк много продуктов, для которых нужны SEO-лендинги: онлайн бухгалтерия, эквайринг, электронный документооборот. Создание одного сайта — это несколько недель работы с участием редактора, дизайнера, разработчика, тестировщика, верстальщика. Не страшно, если нужен один сайт. Но когда их много, на их создание уходит колоссальное количество времени. 

Меня зовут Василий Полосухин — я фронтовый техлид в Точка Банк. В статье рассказываю, как мы сделали визуальный конструктор страниц и научились собирать сайты без кода.

С чего всё началось

Недавно нам поставили задачу — создать больше 100 типовых SEO-страниц. Мы поняли, что вручную такие объёмы осилить трудно, поэтому решили сделать визуальный конструктор.

При этом важно, чтобы он:

  • Был переиспользуемым — мы могли использовать его не только в этой задаче, но и для других проектов.

  • Включал готовые компоненты, чтобы не пришлось ничего верстать с нуля и можно было обойтись уже существующими блоками.

  • Имел мощный редактор контента, т.к. это важно для SEO.

  • Поддерживал SSR, чтобы сайты хорошо индексировались поисковиками.

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

Как работает конструктор

Конструктор — это npm-пакет, который устанавливается в проект и предоставляет интерфейс для редактирования контента. В сайдбаре появляются динамически редактируемые виджеты, их можно перетаскивать на страницу и настраивать по своему усмотрению. При этом каждый проект сохраняет свой уникальный дизайн. 

Чтобы ускорить наполнение страниц, мы сделали акцент на работу с крупными блоками. В качестве редактора контента выбрали Editor.js — там можно добавлять списки, таблицы, кнопки, заголовки, вложенные блоки и т.д.

Для SEO добавили:

  • настройки метатегов;

  • семантические тэги для заголовков (H1, H2, H3 и т.д.);

  • обязательную JSON-LD разметку на всех страницах и опциональную для некоторых компонентов.

Конструктор встраивается в админку сайта через iframe. Там же можно задавать дополнительные настройки: метатеги, редиректы и т.д. Создавать и редактировать страницы могут только сотрудники.

Сами страницы рендерятся на фронте через общий роут. Когда пользователь делает запрос, мы обращаемся к бэкенду, получаем json, десериализуем данные и на выходе получаем готовую страницу.

Конфигурация виджетов

Конфигурацию виджета можно настроить через TypeScript-конфиг. Редактор предоставляет интерфейс для регистрации каждого компонента через Widget.createFactory. 

Мы сделали больше десяти вариантов полей на все случаи жизни:

  • StringField — для ввода текстовой строки;

  • EditorField — для вызова редактора Editor.js;

  • RangeField — для выбора значения из диапазона;

  • ComplexField — сложное поле, которое может содержать другие поля;

  • SlotField — для размещения других виджетов;

  • AutocompleteField — поле с автозаполнением, которое предлагает варианты при вводе;

  • UploadField — для загрузки файлов;

  • OptionsField — поле с выбором из заранее заданных опций;

  • RadioField — поле с выбором одного варианта из нескольких;

  • DropField — поле, позволяющее вкладывать одни виджеты в другие до бесконечности;

  • Кастомное поле — для уникальных задач (можно описать своё поле, наследуясь от базового поля field).

На основе этого конфига редактор автоматически строит интерфейс для редактирования полей и использует его как схему для сериализации и десериализации экземпляров виджета.

Первая MVP-версия

В первую версию конструктора вошли:

  • 3 layout-компонента, которые есть во всех страницах (меню, префутер, футер);

  • 15 контентных блоков, которые наполняются текстами и иллюстрациями; 

  • 4 вида форм, с помощью которых пользователи оставляют заявки на подключение;

  • 1 SEO-компонент для продвинутой настройки.

Мы старались сделать конструктор максимально гибким. Если бы делали единый виджет форм, он выглядел бы как космолет с тысячью полей. Поэтому сделали четыре типовых вида и много настроек (разделы, подразделы и т.д.).

Большинство компонентов у нас уже были свёрстаны, но пришлось сделать рефакторинг, т.к. мы обнаружили некоторые несоответствия с дизайн-системой.

Вот для примера страница, созданная через конструктор — выглядит довольно объёмно, как наш типовой лендинг. 

Конструктор V2.0

Изначально мы задумывали конструктор, чтобы быстро делать SEO-страницы. Поэтому использовали крупные блоки и просто наполняли их текстами. 

Позже решили применить конструктор для сайта Универмага — это магазин Точка Банк с мерчём. Здесь использовали гибкий атомарный подход: вместо крупных блоков сделали акцент на работу с отдельными элементами (как zero block в Tilda). 

Вот что у нас получилось: главная страница Универмага целиком построена дизайнером в конструкторе без единой строчки кода. 

Точно так же сделали ещё несколько лендингов. Неожиданным решением от дизайнера стало использовать видео вместо анимации. Но мы быстро поняли намёк и сейчас делаем для этого отдельный виджет (:

Внутри всё работает точно так же, как в первоначальном варианте. Есть набор базовых элементов, из которых можно собирать блоки. Для каждого проекта «атомы» регистрируются отдельно, чтобы сохранить уникальный стиль. 

Что мы получили в итоге 

Конструктор закрыл нашу первоначальную потребность — мы научились создавать SEO-страницы без участия разработчиков только силами редактора. Можно пропускать этапы тестирования, вёрстки и код-ревью. Просто собираем страницу, проверяем её и сразу же отправляем в прод.

В «Универмаге» благодаря конструктору появилась возможность создавать лендинги и самостоятельно менять баннер на главной (раньше для этого нужно было пройти тот же «квест» с полным циклом). Теперь можно реагировать на инфоповоды и быстро обновлять контент. 

Комментарии (6)


  1. Tomasina
    12.09.2025 10:35

    Вы повторно изобрели аналог Tilda. Если и есть какая-то уникальная фишка, то не донесли.


    1. mxmlksv
      12.09.2025 10:35

      вдумайтесь:

      tilda (первоисточник)

      аналог tilda (2я степень)

      повторно аналог Tilda (3 степень)

      Tomasina, да ты умеешь подколоть)))


      1. Strefilov2024
        12.09.2025 10:35

        Т банк может только использовать чужие идеи в худшем исполнении


    1. Irreversib1e
      12.09.2025 10:35

      Единственная фишка это то что это самописное решение, которые работает внутри компании. Со всеми вытекающими


  1. FoxyGDFD
    12.09.2025 10:35

    Каким образом происходит хранение информации о контенте страницы (на бекенде)?
    Как вы реализовали перемещение элементов внутри дерева?
    Есть ли поддержка создания многостраничников?


  1. Denis-KD
    12.09.2025 10:35

    Можете раскрыть чуть больше деталей вашего решения? Сколько ушло дней, месяцев на со старта до v2.0?

    Тоже думали над своим конструктором,но пошли другим путем, взяв за основу готово рыночное решение. Как нибудь напишу про это.

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