Что болело до
Направление новое. Доверия к нему нет. Фраза «мы делаем софт» ничего не доказывает и никого не убеждает.
Боль клиента при этом описывается очень конкретно. Мы собрали её в пять пар «было → стало» и вынесли в отдельную секцию страницы.
Классическая разработка закрывает такое за 3-6 месяцев и бюджет от 300 000 ₽. Для компании с выручкой 3-50 млн ₽ в месяц это неподъёмно. Странице надо было доказать сразу две вещи: что мы умеем делать сервисы и что делаем их быстро.
- 7 Google-таблиц, которые никто не заполняет
- менеджер 4 часа в день собирает данные руками
- отчёт по выручке собирается 2 дня из 5 источников
- клиентская база лежит в общей таблице, доступ есть у всех
- платежи и отгрузки сверяются вручную
Оффер, который считает сам себя
Первый экран держат три цифры: 5 дней до запуска MVP, от 80 000 ₽ фиксом в договоре, 2 проекта в месяц. Дальше 12 секций от боли до формы заявки.
Ядро страницы это калькулятор сметы. Пять типов задачи, слайдер экранов от 3 до 24, семь интеграций, пять дополнительных опций. Цена и срок пересчитываются мгновенно на клиенте, без запроса на сервер, с разбивкой по строкам. Срок жёстко ограничен снизу пятью днями, поэтому калькулятор физически не может пообещать меньше, чем сказано в оффере.
Метод объяснили сравнением двух колонок. Слева классическая команда из пяти человек, от 3 до 6 месяцев, бюджет от 300 000 ₽. Справа один инженер, ИИ-инструменты, старший разработчик на ревью каждого изменения, 5 дней и от 80 000 ₽. Условия вынесли отдельно: 2 проекта в месяц, аванс 50%, исходный код у клиента с первого дня, багфиксы первого месяца бесплатно.
Для одностраничника с нулевым бэкендом фреймворк был бы лишним весом. Получилась статика без сборщика: ни package.json, ни node_modules в репозитории. Секции разложены по 10 JSX-файлам, в dev-режиме страница компилирует JSX прямо в браузере: правишь файл и жмёшь F5. В работу уходит склеенный и минифицированный бандл, деплой обычный git push.
Витрина вместо обещаний
Витрину собрали из 10 сервисов, которые уже работают в продакшене: Пульсар7, МП Приборка, ФП, Орг.Структура, Контент-завод и другие. Каждый идёт карточкой в формате «Боль → Решение → две цифры результата», со скриншотом в рамке браузера и ссылкой на живой адрес. Первые шесть видны сразу, остальные открываются кнопкой.
Секцию «что мы делаем» собрали из шести живых мокапов: таблица, дашборд, лента алертов, кабинет с ролями, финотчёт, маршрутизатор. Их можно кликать и переключать вкладки. В каждом спрятана подсказка, которая по клику объясняет пользу простыми словами.
В первом экране печатает код IDE-панель: три сцены, каждая заканчивается строкой результата вроде «✓ отчёт за 3 секунды вместо 2 дней». FAQ написали на 11 вопросов и включили туда неудобные: что будет, если не успеете за 5 дней, кто конкретно работает над проектом, можно ли посмотреть демо до оплаты.
Чтобы страницу читали и поисковики, и языковые модели
Попадание в ответы ChatGPT, Claude и Perplexity было отдельной целью. Для B2B-услуги это живой источник заявок, поэтому GEO-контур закрывали осознанно.
Отдельно закрыли 152-ФЗ: реквизиты оператора в футере, страница политики конфиденциальности, cookie-баннер с сохранением согласия.
- SSR-фолбэк: полная текстовая копия страницы лежит в HTML внутри #root, React заменяет её при загрузке. Краулеры видят содержимое без выполнения JS, а пользователь с отключённым JavaScript получает рабочую страницу.
- 6 блоков JSON-LD: Organization, ProfessionalService с каталогом офферов и ценами, FAQPage на 11 вопросов, BreadcrumbList, WebSite и WebPage со speakable.
- robots.txt с явным Allow для 18 краулеров, среди них GPTBot, ClaudeBot, PerplexityBot и Google-Extended.
- llms.txt и llms-full.txt: машиночитаемый дамп лендинга специально под языковые модели.
Грабли
Главная грабля: один и тот же текст живёт в трёх местах и со временем разъехался. Контент продублирован в React-компонентах, в SSR-фолбэке внутри HTML и в llms-файлах. Правки вносили только в React, до двух других копий они не доехали.
Расхождения видно невооружённым глазом. По одному из кейсов в React стоит уже сниженная цифра по клиентам, а в SSR-фолбэке и в обоих llms-файлах лежит старая. В React шесть форматов работы, в SSR четыре. В React 11 вопросов FAQ, в SSR семь. Блок про гарантию результата есть только в React.
Неприятно тут вот что: модели охотнее всего цитируют именно машиночитаемые копии, поэтому устаревшая версия расходится дальше актуальной. Вывод простой. Если делаешь SSR-фолбэк руками, сразу пиши скрипт-сверку, который сравнивает копии и ругается на расхождения.
Вторая грабля из той же серии: скрипта сборки нет вообще. Бандл и минифицированный CSS собираются руками, защиты от «забыл пересобрать» никакой.
Частые вопросы
Сколько времени заняла сборка лендинга?
Пять дней: с 19 по 23 мая 2026 года, по датам файлов в репозитории. За это время собрали 12 секций от боли клиента до формы заявки. Внутрь поместились калькулятор сметы, витрина из 10 сервисов и шесть кликабельных мокапов.
Зачем лендингу калькулятор сметы?
Он снимает главный вопрос до звонка: сколько стоит и когда будет готово. В калькуляторе пять типов задачи, слайдер экранов от 3 до 24, семь интеграций и пять дополнительных опций. Цена и срок считаются прямо в браузере, без запроса на сервер, с разбивкой по строкам. Срок ограничен снизу пятью днями, поэтому калькулятор не может пообещать меньше, чем сказано в оффере.
Как сделать, чтобы страницу цитировали ChatGPT, Claude и Perplexity?
Нужен текст, который виден без выполнения JavaScript. Полная текстовая копия страницы лежит в HTML внутри #root, React заменяет её при загрузке. Сверху шесть блоков JSON-LD: Organization, ProfessionalService с ценами, FAQPage на 11 вопросов, BreadcrumbList, WebSite и WebPage. В robots.txt прописан явный Allow для 18 краулеров, среди них GPTBot, ClaudeBot и Google-Extended, плюс выложены llms.txt и llms-full.txt.
Почему обошлись без Next.js?
Одностраничнику с нулевым бэкендом фреймворк добавил бы только вес. Получилась статика без сборщика: ни package.json, ни node_modules в репозитории. Секции разложены по 10 JSX-файлам, в dev-режиме страница компилирует JSX прямо в браузере. В работу уходит склеенный и минифицированный бандл, деплой обычный git push.
Какая ошибка вылезла на этом проекте?
Один и тот же текст жил в трёх местах: в React-компонентах, в SSR-фолбэке внутри HTML и в llms-файлах. Правки вносили только в React, две другие копии отстали. В React 11 вопросов FAQ, в SSR-фолбэке семь; форматов работы шесть против четырёх. Модели охотнее цитируют машиночитаемые копии, поэтому расхождение надо ловить скриптом-сверкой на сборке.
