Как готовый текст становится страницей разбора

Раздел «Разборы» устроен не как блог на движке, а как ещё один типизированный кусок сайта: текст приходит из конвейера статей, превращается в данные и рисуется тем же шаблоном, что кейсы и услуги. Ниже — что происходит между финальным markdown и адресом в браузере.

2 минуты чтенияконвейер статей · сайт · разметка

Черновик. Страница закрыта от индексации и опубликована не будет: она держит шаблон раздела живым, пока первый настоящий разбор в работе.

Почему не «просто 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, забытые пометки в тексте. Смысловое остаётся человеку.

  • Заголовок и описание уедут в выдачу дословно — их читают до того, как откроют страницу.
  • Внутренних ссылок должно быть хотя бы две, и вести они обязаны на живые адреса.
  • Гейт линтера и факт-чек прогоняются по тому же файлу, что ушёл в генератор: черновик к этому моменту уже не в счёт.

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

Короткие ответы

Остальные адреса сайта русские — /uslugi/, /o-mne/, /podbor/. «Блог» выбивался бы из схемы, а переименовывать раздел после индексации дорого.

Похожая задача у вас?

Напишите в двух словах, что нужно. Я задам несколько вопросов и скажу три вещи: реально ли это собрать, за сколько и что понадобится с вашей стороны. Если это не моя задача, скажу прямо.

Москва · 40+ ИИ-агентов в работе · отвечаю в течение часа днём по Москве