Справочник для тех, кто проектирует контентные проекты, подключает ИИ-агентов к Notion или просто хочет понимать, где живут данные, кто ими управляет и кто их показывает.

Когда я впервые увидел связку «Notion + сайт», у меня в голове всё смешалось. Кажется, что Notion — это и база, и редактор, и сайт. Но когда пришло время подключать ИИ-агента, который должен редактировать статьи и не ломать вёрстку, я понял: нельзя работать с системой, пока не понимаешь, какая её часть за что отвечает.

CMS, база данных и сайт — это три разные роли. Их часто путают, потому что в простых системах (WordPress, Tilda) они слиты в одну. В современных архитектурах они разделены — и это даёт ту самую гибкость, которая нужна агентам, мультиплатформенной выдаче и спокойной миграции.

Что это

Любой контентный проект — это три сущности, которые отвечают на три разных вопроса.

База данных — хранилище. Надёжное место для структурированных данных: страницы, свойства, связи между записями, метаданные. Сюда никто не заходит «просто посмотреть» — база общается с внешним миром только через API. PostgreSQL, Supabase, встроенная база Notion — всё это про хранение.

CMS — интерфейс управления. То, через что человек (или агент) создаёт, редактирует, организует контент. Notion, Directus, Strapi, WordPress — это редакторы, которые умеют говорить с базой и отдавать данные наружу в стандартном формате.

Сайт — витрина. То, что видит посетитель в браузере. Сайт забирает контент из CMS через API и рендерит его в HTML. Next.js, Astro, любой фронтенд — это слой показа.

В монолитных системах (классический WordPress, Tilda, ранние CMS) все три роли слиты в одну программу. В headless-архитектуре они разнесены по разным сервисам и общаются через API.

Ключевое правило: если вы меняете контент, не трогая сайт, — у вас разделение слоёв. Если для смены текста нужно лезть в админку, деплоить, чистить кеш — слои слиты.

Зачем нужно

Разделение на три слоя — это не академическая красота. Это конкретные практические выигрыши, которые экономят недели при росте проекта.

  • Гибкость стека. Контент живёт в Notion, а рендерить его можно на Next.js, Astro или статическом генераторе. Меняется только витрина — данные те же.
  • Мультиплатформенная выдача. Один и тот же контент отдаётся на сайт, в мобильное приложение, в Telegram-канал, в дайджест-рассылку. CMS — одна, потребителей — сколько угодно.
  • Агенты работают с CMS, а не с сайтом. ИИ-агент создаёт черновики, заполняет свойства, переводит статус в «Опубликовано». Сайт сам подхватывает изменения. Агенту не нужны права на деплой, FTP или репозиторий — только доступ к CMS.
  • Миграция без боли. Когда придёт время менять CMS (или фронтенд, или базу), вы меняете один слой. Остальные продолжают работать по договорённости через API.
  • Разные люди для разных слоёв. Редактор работает в Notion и не лезет в код. Разработчик пишет код и не трогает контент. Это разделение ролей — оно становится возможным, только когда слои разделены архитектурно.
  • Кеширование и производительность. Сайт забирает данные из CMS раз в минуту (или раз в час) и кеширует. CMS не нагружается каждым посетителем. База защищена от пиков трафика.

Как устроено

Общая схема взаимодействия:

flowchart LR
    A["База данных"] --> B["CMS"]
    B --> C["Сайт"]
    A -->|прямой доступ через API| C
    D["Человек / Агент"] --> B

База данных и CMS часто находятся на одном сервере (так делает Notion — его «база» встроена в редактор). Сайт — это отдельный фронтенд, который читает данные через API. Человек и ИИ-агент работают только с CMS, не с сайтом напрямую.

Сравнение трёх ролей:

ПараметрБаза данныхCMSСайт
Что делаетХранит данныеУправляет контентомПоказывает пользователю
Кто работаетСерверРедактор / агентПосетитель
ПримерыPostgreSQL, Supabase, встроенная БД NotionNotion, Directus, Strapi, WordPressNext.js, Astro, любой frontend
ДоступТолько через APIИнтерфейс + APIБраузер
Работает без другихДаНужна базаНужен контент

Два основных типа CMS по отношению к сайту:

Монолитная CMS — CMS и сайт в одной программе. Редактор работает в админке, сайт отображает контент из той же системы. WordPress и Tilda — самые известные примеры.

Плюсы: быстрый старт, всё в одном месте, минимум настроек. Минусы: контент привязан к одному сайту, сложно масштабировать, агенту приходится работать с той же системой, что и посетителю.

Headless CMS — CMS отделена от сайта. Контент управляется в редакторе, а сайт (или мобильное приложение, или Telegram-бот) получает данные через API. Один контент — много потребителей.

Примеры: Notion (как headless CMS), Directus, Strapi, Contentful, Sanity.

Notion особенно интересен в роли headless CMS: редактор работает в знакомом интерфейсе блоков, свойства базы хранят метаданные (slug, описание, категория, статус), а сайт забирает страницы через Notion API и рендерит их.

Когда использовать

СитуацияЧто подходитПочему
Визитка, лендинг без регулярных обновленийМонолитная CMS (Tilda)Контент меняется раз в год, разделение слоёв не даст выигрыша
Блог одного автораHeadless CMS (Notion + Astro)Редактор пишет в Notion, сайт собирается автоматически
Контент на сайт + в мобильное приложение + в рассылкуHeadless CMS обязательноОдин контент, много потребителей, общая точка правды
ИИ-агент публикует материалыHeadless CMS с APIАгент работает с CMS, а не с деплоем сайта
Несколько авторов, разные роли (редактор, разработчик)Headless CMSРазделение полномочий становится архитектурным, а не организационным
Быстрый MVP за выходныеМонолитная CMSСкорость запуска важнее гибкости

Пример

Архитектура vorobeoffai.ru устроена так:

  • CMS — Notion. Пять баз: Блог, Статьи, База знаний, Кейсы, Промпты. Контент редактируется в Notion — там же, где его пишет автор.
  • База данных — встроенная в Notion. Свойства (slug, описание, категория, статус публикации, дата) хранят метаданные рядом с текстом. Отдельный сервер не нужен.
  • Сайт — Astro. Сборщик запрашивает данные из Notion через API, рендерит статические страницы и складывает результат в dist/.
  • Агент — работает с Notion как с CMS. Создаёт черновики, заполняет свойства, переключает статус на «Опубликовано». Сайт сам подхватывает изменения при следующей сборке.

Именно разделение на слои делает возможным такой контур: человек или агент работает с контентом, не касаясь деплоя, а деплой работает по своим правилам, не касаясь контента.

Ограничения

Ограничения

Что учитывать

Headless CMS требует разработчика на старте.

Монолитная запускается за час, headless — за день-два. Выигрыш появляется при росте, а не на первом сайте.

API между CMS и сайтом — единая точка отказа.

Если API лежит, сайт не обновится. Для статической генерации это терпимо, для динамического рендеринга на лету — критично.

Кеширование обязательно.

Без кеша каждый посетитель = запрос к CMS. Notion API имеет лимит 3 запроса в секунду — при средней нагрузке это упрётся в первые сутки.

Права доступа настраиваются отдельно для каждого слоя.

В монолитной CMS «админ = всё». В headless-архитектуре админ CMS ≠ админ сервера ≠ владелец API-ключа. Это безопаснее, но требует дисциплины.

Версионирование API — ваша головная боль.

CMS может выпустить новую версию API, и интеграция сломается. Подписывайтесь на changelog с первого дня.

Не всем проектам нужно разделение.

Для простой визитки Tilda достаточно, и никакая headless-архитектура не сделает её лучше. Сложность — это налог за гибкость, и его нужно оправдывать.

Антипаттерны

Антипаттерны

Чего не делать

Делать headless «на будущее» при простой визитке.

Вы получите лишний слой сложности без выигрыша. Монолит здесь честнее.

Подключать агента напрямую к сайту или репозиторию.

Агент должен работать с CMS. Иначе он получает права на деплой, рискует сломать вёрстку и не имеет нормального pre-flight-чеклиста.

Игнорировать rate limits CMS.

Notion API — 3 RPS, Directus — десятки, Strapi — свои. Без пауз и backoff ваш скрипт упрётся в 429 в первый же час активной работы.

Хранить контент только в CMS, без бэкапа.

CMS — это редактор и база в одном флаконе. Если сервис изменит тариф, закроет аккаунт или потеряет данные — восстанавливать нечего. Экспорт в markdown или JSON раз в неделю.

Смешивать слои «для скорости» в проде. Черновик-в-Notion

опубликованный-в-репозитории — это путь к рассинхрону. Выберите одну границу и держите её.

Считать, что headless автоматически быстрее монолита.

Headless даёт гибкость, а не скорость. Скорость достигается кешированием, CDN и статической генерацией — это ортогональные вопросы.

Чеклист

Чеклист

Проверка перед запуском

Границы слоёв описаны.

В архитектурной схеме явно нарисовано, где заканчивается база, где CMS, где сайт. Без этой схемы проект разваливается в первую же смену стека.

API между CMS и сайтом задокументирован.

Список endpoint’ов, формат запросов и ответов, лимиты, способ аутентификации — на одной странице.

Кеширование настроено.

Сайт не дёргает CMS на каждый запрос пользователя. Сборка раз в час или по событию — достаточно.

Права доступа разделены.

API-ключ для сайта ≠ API-ключ для агента ≠ API-ключ для разработчика. Утечка одного ключа не должна компрометировать весь проект.

Бэкап контента существует.

Экспорт из CMS в markdown или JSON раз в неделю. Проверено, что экспорт реально работает, а не «вроде бы где-то настроен».

Changelog CMS на мониторинге.

Подписка на обновления API. Breaking changes ловятся раньше, чем падает продакшн.

Агент работает только с CMS.

У агента нет доступа к репозиторию, серверу или домену. Только CMS и только в режиме «черновик».

Тестовая среда для миграций.

Прежде чем менять CMS или фронтенд, есть копия, на которой миграция прогоняется без риска для продакшна.

Ссылки

Ссылки