Из ниши бытовых услуг для посёлка Афипский и Excel-таблицы семантики автоматически собран многостраничный сайт услуг: 95 страниц, 894 смысловых кластера, 3 886 поисковых формулировок, 10 категорий. Пакет вышел в шести сборках — 618 HTML-файлов. Автопроверка: 0 битых ссылок, 0 дублей Title / H1 / Description, 0 совпадений семи шаблонных фраз из предыдущих версий.
Ниша «Помощь Афипский» — бытовые услуги для посёлка Афипский в Краснодарском крае: ремонт домов, сантехника, электрика, бурение, кровля, демонтаж, вывоз мусора и десятки соседних направлений. Клиентской задачи на проде не было: это демонстрационный проект собственного генератора.
Нужно было доказать, что многостраничный сайт услуг можно собрать автоматически из двух входов — ниши и таблицы семантики — и при этом не превратить его в шаблонную SEO-воду.
noindex,follow и не попадает в sitemap.Клиент не указан: проект внутренний, демонстрационный. Домен в конфиге сборки — плейсхолдер, публикации не было, поэтому в шапке кейса нет ссылки на сайт.
То, с чего стартовал генератор, и почему автоматическая сборка без ручных вмешательств дала бы плохой результат.
Таблица семантики на 492 КБ содержит 95 ниш и 894 смысловых кластера. Собранных строгих локальных частотностей — 0: все 3 886 формулировок помечены как «ещё не собрано».
Индексируемых ниш — 0, подтверждённых дочерних страниц — 0. Наивная сборка отдала бы в индекс 95 страниц без подтверждённого спроса.
Каждый кластер мог стать отдельной страницей — это 894 почти одинаковых абзаца. Решение: кластеры становятся блоками задач внутри своей основной страницы.
В QA-отчётах зафиксированы 7 проблемных шаблонов: конструкции вида «Для «покос…», служебные слова в тексте («семантика страницы», «подзадачи из семантики», «svgПлощадь») и вопросы не по теме («Вопросы по покос травы»).
В конфиге бизнеса пусто: телефон, мессенджеры, email, endpoint формы, счётчик Метрики, юр. данные, кейсы и отзывы. Любое из этих значений пришлось бы выдумать.
Сборка подставляет домен из конфигурации в canonical, Open Graph и sitemap. Это заготовка, а не работающий сайт клиента: публикации по нему не было.
Пайплайн из пяти шагов: от Excel-семантики до статической сборки с автопроверкой. Один прогон — и на выходе пакет файлов плюс отчёты.
data/generated/.services-content.json.dist/, проверяет 103 страницы и пишет машинный отчёт и Markdown-версию. Сборка не считается готовой, пока QA не проходит.Один запуск даёт готовую статику на 103 файла и два отчёта. По этому же пайплайну пакет собран в шесть редакций — 618 HTML-файлов суммарно.
Конструкция «Для «покос травы» важны…» на 95 страницах подряд, одинаковый список факторов цены на каждой подуслуге и служебные слова в видимом тексте. По предыдущим версиям это и было причиной жалоб.
У каждой страницы свой оффер, своя специфика, свои факторы цены, свой порядок работы и свой FAQ. Средний объём — 624 слова (минимум 557, максимум 756). Ни один из 7 проблемных шаблонов не встречается ни разу, уникальных процессов работы — 95 из 95.
Собранные 95 страниц формально индексируемы, но решение по запуску каждой ниши в таблице — «Не решено», а строгая локальная частотность не собрана ни по одному запросу. Публиковать такой набор в индекс — значит отдать краулерам 95 страниц без подтверждённого спроса.
Все сервисные страницы собираются с noindex,follow и исключаются из sitemap: в карте остаётся 3 URL — главная, каталог и «О проекте». На странице услуги это видно прямо в интерфейсе: плашка «Пока не одобрено для индексации». QA отдельно проверяет, что noindex-страница не попала в sitemap.
Чего в исходных данных нет, то и не публикуется: кнопка звонка скрыта, форма честно сообщает, что данные не отправлены, в таблицах цен стоит «По расчёту», раздел отзывов и кейсов скрыт, категории подписаны как тематические иллюстрации, а не как работы мастера. Все пропуски вынесены в отдельный файл CONTENT_GAPS.md — 27 позиций с указанием, где данные нужны и что происходит сейчас.
Ни одного выдуманного телефона, рейтинга, отзыва или кейса. На странице услуги видно, что берётся «цена по расчёту», а ориентировочные чеки из внутренней SEO-таблицы на сайт не выводятся.
Ровно один H1 и один canonical на странице, непустой Title, отсутствие битых внутренних ссылок, alt и размеры у всех изображений, валидность JSON-LD, label у видимых полей форм, отсутствие lorem ipsum, совпадение набора URL в sitemap с indexable-манифестом, отсутствие каннибализации по основному запросу и по cluster_id, а также предупреждение о шаблонных цифрах вроде «500+» или «10 лет».
Проверено 103 HTML-страницы: 0 ошибок, 0 предупреждений, статус PASS. Плюс отдельный отчёт по 7 шаблонным фразам предыдущих версий — 0 совпадений.
Собранный сайт-пакет: главная, каталог на 95 услуг, страница услуги с блоками задач, калькулятором параметров, таблицей цен и FAQ. Ниже — десктопная и мобильная версии тех же страниц.




Итог одной автоматической проверки собранной статики. Цифры — из отчёта сборки, без округлений и добавлений.
| Проверка | Результат |
|---|---|
| HTML-страниц проверено | 103, плюс отдельный 404.html |
| Ошибок и предупреждений QA | 0 и 0 — статус PASS |
| Индексируемых страниц в сборке | 3 из 103, остальные под noindex,follow |
| URL в sitemap.xml | 3 — набор совпадает с indexable-манифестом |
| Битые внутренние ссылки и ассеты | 0 |
| Дубли Title / H1 / Description | 0 / 0 / 0 |
| H1 на странице | ровно 1 на всех проверенных страницах |
| Canonical на странице | ровно 1 на всех проверенных страницах |
| alt и размеры у изображений | заданы у всех картинок |
| JSON-LD | валиден на всех страницах |
| Label у видимых полей форм | есть у всех полей |
| Lorem ipsum | не найден |
| Каннибализация по основному запросу и cluster_id | не найдена |
| Объём страницы услуги | 557 / 624 / 756 слов — минимум, среднее, максимум |
| Уникальных процессов работы | 95 из 95 |
| Семь шаблонных фраз предыдущих версий | 0 совпадений по каждой |
| noindex-страницы в sitemap | не попали |
Проверка автоматическая и не заменяет ручной контроль перед публикацией: реальные контакты, цены, кейсы, юридические тексты и решение по индексации подтверждает владелец.
| Параметр | До | После |
|---|---|---|
| Страниц услуг | 0 — на входе только таблица семантики | 95 в сборке |
| HTML-файлов в пакете | нет | 618 в 6 сборках, 103–104 на сборку |
| Структура | 10 категорий и 894 кластера в Excel | 95 страниц услуг + 799 секций-кластеров внутри них |
| Дубли Title / H1 / Description | жалобы на предыдущие версии | 0 / 0 / 0 |
| Шаблонные «жалобные» фраз | 7 проблемных шаблонов | 0 совпадений |
| Средний объём страницы услуги | не измерялся | 624 слова, диапазон 557–756 |
| Уникальность текста | один шаблон на все подуслуги | 95 разных процессов работы |
| Битые внутренние ссылки | не проверялось | 0 из 103 страниц |
| Индексация | решение по запуску не принято | 3 индексируемые страницы, 95 под noindex,follow |
| Локальная частотность | не собрана | помечена как «ещё не собрано», а не как нулевой спрос |
| Контакты, цены, кейсы, отзывы | данных нет | не выдуманы, 27 пробелов зафиксированы в CONTENT_GAPS |
| Проверка качества | ручной контроль | 14 автоматических проверок в сборке |
Сравнение — «до» означает состояние на входе у генератора (таблица семантики и предыдущие редакции пакета), а не состояние сайта в проде: публикации не было.
Скриншоты сделаны с живой собранной статики, а не из старых превью. Кликните, чтобы открыть в полном размере.






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