HERON

Гайд 01 · начните отсюда

Понятия

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

Это первый из шести гайдов. Он короткий намеренно: у каждого понятия есть ссылка на место, где оно описано полностью.

Простыми словами

Представьте HERON типографией, а свой сайт — рукописью. Вы пишете рукопись (текстовые файлы в папке), типография (HERON) превращает её в готовую книгу (сайт), а оформление книги (тема) выбирается отдельно от текста. Обложку и шрифты можно сменить, не переписывая ни одной главы.

Пример. Вы создаёте файл content/ru/prices.md, пишете в нём заголовок и таблицу цен и запускаете сборку. HERON читает файл, видит адрес страницы, рисует таблицу блоком таблицы из темы и добавляет страницу в меню, карту сайта и llms.txt. Код вы не трогали.

Прочитайте эту страницу первой, до остальных гайдов: все следующие страницы пользуются словами, которые здесь объяснены (папка, страница, ключ, адрес, секция, тема, сборка). Совсем новичок? Начните ещё раньше — с Основ.

HERON и сайт — отдельно

HERON — это программа heron. Она приходит образом ghcr.io/fmstm/heron:TAG или pip-пакетом. Её не копируют в сайт и не правят под сайт.

Сайт — папка, в которой нет ни строчки кода HERON:

мой-сайт/
├── site.yaml       настройки: домен, языки, тема, меню, SEO
├── content/        страницы в markdown, по папке на язык
├── media/          картинки, видео, документы
├── data/           yaml-справочники: отзывы, команда, реквизиты
├── static/         файлы по точному адресу: favicon, .well-known
├── theme/          тема: шаблоны Jinja2, стили, строки интерфейса
└── plugins/        свои плагины, обычно пусто

Сайт объявляет, какой HERON ему нужен, первой строкой site.yaml: heron: ">=0.1,<0.2". Один HERON обслуживает любое число сайтов, и у каждого сайта может быть своя версия.

Подробно: папка сайта в спецификации.

Контракт

Контракт — договор между HERON и папкой сайта: какие файлы где лежат, какие поля у страницы, какие ключи у site.yaml, что HERON сделает сам и на что ответит ошибкой. Он один для всех сайтов и записан в спецификации. Нарушение контракта — внятная ошибка с кодом, файлом и строкой (E002, E006…), а не молча сломанная страница.

Страница, ключ и адрес

Страница — это markdown-файл. Путь файла задаёт адрес. Пример для default_lang: en, languages: [en, ru]:

content/en/index.md                →  /
content/en/about.md                →  /about/
content/en/services/_index.md      →  /services/              страница самого раздела
content/en/services/design.md      →  /services/design/
content/ru/about.md                →  /ru/o-nas/              slug: o-nas
content/ru/services/_index.md      →  /ru/uslugi/             slug: uslugi
content/ru/services/design.md      →  /ru/uslugi/dizajn/      slug: dizajn

У страницы две разные вещи, которые по умолчанию совпадают:

  • ключ — путь файла без .md: services/design. Он одинаков во всех языках. По нему HERON связывает переводы, по нему страницу называют в меню и в ссылках;
  • адрес — то, что видит посетитель. Его меняет поле slug, а ключ остаётся прежним. Поэтому у русской версии адрес /ru/uslugi/dizajn/, а ключ тот же — services/design.

Главная — index.md, её ключ /. Страница «не найдено» — 404.md.

Подробно: дерево контента и адреса.

Языки

Язык — папка в content/. Список языков и язык по умолчанию задаёт site.yaml:

site:
  default_lang: en       # отдаётся из корня: /about/
  languages: [en, ru]    # остальные — с префиксом: /ru/o-nas/

Перевод — файл с тем же именем в папке другого языка, адрес у него может быть свой (slug). Переведённые страницы получают hreflang друг на друга, x-default — версия языка по умолчанию. Поменять default_lang — значит поменять адреса всех страниц.

Подробно: языки в спецификации.

SEO-блок и фронтматтер

Каждый файл страницы начинается с SEO-блока — YAML между двумя строками ---, разбитого на восемь групп с комментариями: основное, ключевые запросы, Open Graph, Twitter, schema.org, карточка, служебное, связи. Обязательны три поля: title, h1, description. Остальное — по мере надобности, пустые поля остаются закомментированными.

Стартовые страницы приходят с полным блоком, а heron page кладёт его в каждую новую. Новая страница — копия файла с правкой значений.

Подробно: формат страницы.

Секции и их формы

После SEO-блока идёт текст. Текст до первого заголовка — вступление. Дальше — секции:

## Как мы работаем {#how}

1. **Заявка.** Пишете или звоните.
2. **Встреча.** Обсуждаем задачу.

{#how} — якорь, адрес секции для темы. Порядок секций в файле не важен: тема ставит каждую на своё место по якорю. Форму секции HERON понимает по разметке: нумерованный список — шаги, ### Вопрос? — FAQ, строки ключ | значение — факты, таблица — таблица. Всего форм двенадцать.

Подробно: секции и формы, а справочник форм показывает каждую так, как её рисует тема.

Тип страницы и тема

Тема — папка theme/: шаблоны Jinja2, модули, стили, строки интерфейса. Она решает, как выглядит сайт; контент решает, что на нём написано.

Тип страницы выбирает шаблон: страница типа service рисуется theme/templates/service.html. Тип задаётся полем type в файле или children_type в _index.md раздела. У главной тип home, по умолчанию — page. В theme/theme.yaml тема описывает свои типы, их секции, связи между страницами и пропорции картинок.

Подробно: theme.yaml в спецификации и гайд по теме.

Сборка

heron build читает папку, проверяет её по контракту и собирает dist/: HTML страниц, sitemap.xml, robots.txt, llms.txt, разметку JSON-LD, нарезанные картинки, карты 301 и 410 и конфиг nginx. Рабочая сборка (по умолчанию) закрыта от поисковиков; боевая — --env prod. Результат — либо папка на любой хостинг, либо образ nginx с сайтом внутри.

Подробно: этапы сборки и гайд по сборке и выкладке.

Источник

Эта страница повторяет docs/guide/01-concepts.md из ветки prod. Репозиторий обновляется первым, поэтому там всегда самая свежая версия.

Следующий гайд: Первый сайт.