Как готовый текст становится страницей разбора
Раздел «Разборы» устроен не как блог на движке, а как ещё один типизированный кусок сайта: текст приходит из конвейера статей, превращается в данные и рисуется тем же шаблоном, что кейсы и услуги. Ниже — что происходит между финальным markdown и адресом в браузере.
Черновик. Страница закрыта от индексации и опубликована не будет: она держит шаблон раздела живым, пока первый настоящий разбор в работе.
Почему не «просто markdown на странице»
Соблазн понятный: положить .md рядом со страницей и рендерить его на лету. На этом сайте так нельзя по трём причинам, и все три технические: дело тут не во вкусах.
- Страницы отдаёт пререндер Каждый адрес — статический HTML, собранный до деплоя. Рендер markdown в рантайме означал бы, что робот видит пустой контейнер.
- Мета живёт в одном списке Заголовок вкладки, description, robots и строка карты сайта считаются из общего реестра маршрутов. Статья, которой в нём нет, не попадёт ни в карту, ни в заголовок при переходе внутри сайта.
- Разметку нужно проверять глазами Article и FAQPage собираются из полей данных. Из свободного markdown их пришлось бы угадывать регулярками — и однажды угадать неправильно.
Поэтому текст один раз превращается в структуру, а дальше живёт как данные.
Что делает генератор
Скрипт конвейера читает финальный файл статьи, вырезает публикуемое тело между служебными маркерами и режет его на секции по заголовкам второго уровня. Каждый блок текста получает свой тип.
| Что в markdown | Во что превращается |
|---|---|
| Абзац | блок p, жирный зачин уезжает в отдельное поле |
| Список | блок bullets |
| Таблица | блок table с заголовками и строками |
| Цитата | блок note |
| Листинг | блок code |
Две вещи, которые скрипт не решает сам
Дату публикации и адрес статьи он берёт из мета-файла рядом с текстом и не выдумывает. Дата публикации вообще существует ровно в одном месте — в данных статьи; дату последней правки считает сборщик карты сайта. Второго списка дат на сайте нет намеренно: как только их становится два, они расходятся.
Черновик — состояние по умолчанию. Снять его и выкатить статью можно только явным решением владельца: скрипт сам ничего не публикует.
Запуск выглядит так:
python3 scripts/article-pipeline/fmt_blog.py runs/<прогон>/FINAL-blog.md \
-o runs/<прогон>/out --site-dir ~/…/v4-siteПохожая история у вас?
Напишите в двух-трёх предложениях, что происходит сейчас. Отвечу, реально ли собрать похожее, за сколько и что понадобится с вашей стороны.
Куда статья прописывается
Генератор трогает ровно два реестра, и оба помечены маркерами, чтобы вставка была предсказуемой.
- Список статей импорт данных и элемент массива. Из него собирается лента раздела и маршруты страниц.
- Список маршрутов строка с адресом, заголовком и описанием. Из неё пререндер берёт мету, ставит robots и пишет строку в карту сайта.
Повторный прогон по той же статье ничего не дублирует: скрипт сначала смотрит, нет ли уже такой строки. Это важнее, чем кажется, — статью почти всегда пересобирают несколько раз, пока правится текст.
Что проверить перед публикацией
Автоматика ловит формальное: незаменённые метки картинок, слишком длинный description, забытые пометки в тексте. Смысловое остаётся человеку.
- Заголовок и описание уедут в выдачу дословно — их читают до того, как откроют страницу.
- Внутренних ссылок должно быть хотя бы две, и вести они обязаны на живые адреса.
- Гейт линтера и факт-чек прогоняются по тому же файлу, что ушёл в генератор: черновик к этому моменту уже не в счёт.
Когда всё сходится, черновик снимается одним флагом, и страница перестаёт быть закрытой от индексации.
Короткие ответы
Похожая задача у вас?
Напишите в двух словах, что нужно. Я задам несколько вопросов и скажу три вещи: реально ли это собрать, за сколько и что понадобится с вашей стороны. Если это не моя задача, скажу прямо.
Москва · 40+ ИИ-агентов в работе · отвечаю в течение часа днём по Москве
Кейсы целиком · Сайты с SEO и GEO · Подобрать решение за 2 минуты