Strapi vs Payload vs Sanity в 2026: какую headless CMS выбрать
Содержание
Headless CMS стали стандартом для современных веб-проектов, где фронтенд и бэкенд развиваются независимо. В 2026 году рынок headless-решений зрел, конкурентен и предлагает десятки вариантов — от облачных платформ до self-hosted open-source систем. Три инструмента выделяются на фоне остальных: Strapi — ветеран open-source headless CMS с 71 000+ звёзд на GitHub, Payload CMS — стремительно растущий Next.js-нативный фреймворк с 40 000+ звёзд, и Sanity — облачная платформа с лучшей в индустрии коллаборацией в реальном времени, четыре года подряд занимающая первое место в рейтинге G2.
Выбор между этими тремя системами — одно из ключевых архитектурных решений при старте нового проекта. Strapi делает ставку на привычный GUI-конструктор контента и зрелую экосистему плагинов. Payload идёт по пути code-first и глубокой интеграции с Next.js, превращаясь из CMS в полноценный фреймворк для приложений. Sanity предлагает облачное хранилище контента (Content Lake) с GROQ — собственным языком запросов — и инструменты для совместной работы редакторов, сопоставимые с Google Docs.
Эта статья предназначена для фулстек-разработчиков, техлидов и архитекторов, которые выбирают headless CMS для нового проекта или оценивают миграцию. Мы разберём актуальные версии, архитектуру, API, модель данных, экосистему, ценообразование и реальные сценарии использования — с примерами кода и сравнительной таблицей.
Обзор Strapi в 2026
Strapi — open-source headless CMS, созданная в 2015 году французским стартапом. За десять лет проект вырос до одного из самых популярных open-source инструментов: к февралю 2026 года на GitHub более 71 000 звёзд, свыше 20 миллионов загрузок, а CMS используют более 3 000 компаний. Текущая стабильная версия — Strapi 5.36 (февраль 2026).
Strapi 5 стала крупнейшим обновлением в истории проекта. Ключевые изменения:
- 100% TypeScript — кодовая база полностью переписана на TypeScript. Официальные типы для всех API и конфигураций, строгая типизация коллекций и полей.
- Vite вместо Webpack — сборка admin-панели переведена на Vite, что ускорило dev-сервер в несколько раз и сократило время сборки.
- Новый формат API-ответов — упрощённая структура JSON без вложенных
attributes, что снижает boilerplate на фронтенде. - Content History и Versioning — встроенная история версий документов с возможностью отката.
- Draft & Publish — улучшенная система черновиков и публикации с поддержкой workflow.
- Document Service API — новый программный интерфейс для работы с контентом из кастомных контроллеров и сервисов.
Strapi строится вокруг Content-Type Builder — визуального конструктора типов контента в admin-панели. Разработчик может создать коллекцию, определить поля (текст, число, медиа, связи, компоненты) и сразу получить REST API и GraphQL-эндпоинты без написания кода. При необходимости модель можно настроить через конфигурационные файлы в src/api/.
Архитектура Strapi — классический Node.js-сервер (Koa.js) с ORM Bookshelf/Knex для SQL-баз данных. Strapi 5 поддерживает PostgreSQL, MySQL и SQLite. Поддержка MongoDB была удалена ещё в v4.
Экосистема плагинов — одно из главных преимуществ Strapi. Marketplace содержит сотни плагинов: от SEO и i18n до интеграций с Cloudinary, Meilisearch, Stripe и десятками других сервисов. Strapi также предлагает Strapi Cloud — управляемый хостинг с бесплатным тарифом, Developer-планом от $15/мес и Growth-планом от $99/мес.
В 2026 году команда Strapi объявила, что главный приоритет — качество и стабильность: релизы v5.29–v5.36 включают свыше 70 PR, сфокусированных на исправлении багов, производительности и надёжности. Роадмап на 2026 год включает улучшенный logging, мониторинг и дальнейшее совершенствование DX.
Обзор Payload CMS в 2026
Payload CMS — open-source headless CMS и фреймворк для приложений, запущенный в 2021 году. Проект пережил стремительный рост: к февралю 2026 года на GitHub — более 40 000 звёзд. Текущая версия — Payload 3.x, и это не просто обновление, а переосмысление всей архитектуры.
Payload 3.0 стала первой CMS, которая устанавливается непосредственно в Next.js-приложение. Это не интеграция через API — Payload буквально живёт внутри вашей /app директории рядом с фронтенд-кодом. Admin-панель, API, база данных — всё в одном Next.js-проекте.
Ключевые особенности Payload 3.0:
- Next.js-нативная архитектура — Payload работает как часть Next.js App Router. Admin-панель построена на React Server Components. Локальный API доступен напрямую из серверных компонентов без HTTP-запросов.
- Полностью TypeScript — весь код, от конфигурации до API-ответов, строго типизирован. Типы генерируются автоматически на основе схемы коллекций.
- Гибкость баз данных — поддержка PostgreSQL, MongoDB и SQLite через адаптеры на базе Drizzle ORM. Один и тот же код работает с любой из поддерживаемых СУБД.
- Local API — запросы к контенту выполняются напрямую в Node.js-процессе, без HTTP-overhead. Это критически важно для серверных компонентов Next.js и статической генерации.
- Сокращение зависимостей — количество npm-зависимостей снижено с 88 (в v2) до 27 (в v3).
- Turbopack — поддержка Turbopack из коробки для мгновенного Hot Module Replacement.
- Lexical Rich Text Editor — встроенный редактор на базе Lexical (Meta) с поддержкой кастомных блоков и inline-элементов.
Payload позиционирует себя не только как CMS, но и как фреймворк для приложений. Благодаря полному контролю над бэкендом (хуки, access control, кастомные эндпоинты) Payload подходит для проектов, где CMS — лишь часть более сложной системы: e-commerce, SaaS-платформы, порталы.
Развёртывание возможно на любой платформе, поддерживающей Next.js: Vercel (one-click deploy), Cloudflare, собственный сервер. Payload Cloud предлагает управляемый хостинг с планами Standard ($35/мес) и Pro ($199/мес).
Обзор Sanity в 2026
Sanity — облачная платформа для управления структурированным контентом, основанная в 2017 году в Норвегии. В отличие от Strapi и Payload, Sanity использует гибридную модель: контент хранится в облачном Content Lake (управляемый бэкенд Sanity), а Sanity Studio — React-приложение для редактирования — разворачивается и кастомизируется разработчиком. Репозиторий Sanity Studio на GitHub имеет более 6 000 звёзд.
Sanity позиционирует себя как Content Operating System — не просто CMS, а платформу для контент-операций, объединяющую редакторов, разработчиков и AI-агентов. Четыре года подряд Sanity занимает первое место на G2 среди headless CMS.
Ключевые особенности Sanity в 2026:
- Content Lake — облачное хранилище с автоматическим масштабированием, CDN, realtime-синхронизацией и историей изменений. Данные доступны через API без управления инфраструктурой.
- GROQ — собственный open-source язык запросов для JSON-данных. GROQ позволяет описывать точную форму ответа, выполнять JOIN-ы между документами и фильтрации без GraphQL-схемы.
- Real-time Collaboration — несколько редакторов могут одновременно работать над одним документом, видя изменения друг друга в реальном времени. Нет блокировок, нет конфликтов — аналогично Google Docs.
- Canvas — новый AI-ассистированный редакторский интерфейс (Spring Release 2025), интегрированный с моделями контента. Canvas позволяет создавать и редактировать контент в формате, знакомом нетехническим пользователям.
- Agent Actions — schema-aware AI-автоматизация, запускаемая через API: автоматическая разметка, перевод, суммаризация контента.
- Functions — серверные обработчики событий, размещённые на инфраструктуре Sanity. Заменяют webhook-и и обеспечивают масштабируемую автоматизацию при изменениях контента.
- Sanity Studio — полностью кастомизируемый React-фреймворк для построения редакторского интерфейса. Разработчик контролирует каждый аспект: от структуры навигации до кастомных input-компонентов.
Sanity Studio разворачивается как часть вашего фронтенд-проекта или как отдельное приложение. Поддерживается интеграция с Next.js, Astro, Remix, Nuxt и другими фреймворками через официальные SDK.
Ценообразование Sanity — usage-based (на основе потребления):
- Free — $0, до 20 пользователей, 2 публичных датасета, Content Agent в комплекте.
- Growth — $15/пользователь/мес, до 50 пользователей, 5 ролей, 25 000 документов, 1 млн CDN-запросов.
- Enterprise — кастомные лимиты, безлимитные пользователи, SAML SSO, SLA >99.9%.
Сравнительная таблица
| Критерий | Strapi | Payload CMS | Sanity |
|---|---|---|---|
| Лицензия | MIT (Community), EE (Enterprise) | MIT | Проприетарная (Studio — MIT) |
| Архитектура | Standalone Node.js-сервер (Koa) | Next.js-нативный (App Router) | Облачный Content Lake + Studio |
| Язык | TypeScript (с v5) | TypeScript | TypeScript (Studio) |
| Базы данных | PostgreSQL, MySQL, SQLite | PostgreSQL, MongoDB, SQLite | Управляемый Content Lake |
| Self-hosting | Да, полный контроль | Да, полный контроль | Только Studio; данные в облаке |
| API | REST + GraphQL | REST + GraphQL + Local API | GROQ + GraphQL |
| Admin-панель | Встроенная, GUI-конструктор | Встроенная, code-first | Sanity Studio (React) |
| Real-time коллаборация | Нет | Нет (Live Preview есть) | Да, мультипользовательская |
| Плагины/экосистема | Marketplace (сотни плагинов) | Растущая экосистема | Sanity Exchange |
| GitHub Stars | ~71 000 | ~40 000 | ~6 000 (Studio) |
| Бесплатный тариф | Да (self-hosted + Cloud Free) | Да (self-hosted + Cloud) | Да (до 20 пользователей) |
| Облачный хостинг | Strapi Cloud от $15/мес | Payload Cloud от $35/мес | Включён (Content Lake) |
| Rich Text Editor | Blocks Editor (custom) | Lexical (Meta) | Portable Text |
| Интернационализация | Встроенный плагин i18n | Встроенная поддержка | Встроенная поддержка |
| Content Versioning | Да (с v5) | Да (Drafts + Versions) | Да (Content Lake history) |
Примеры кода: определение модели контента
Принципиальное отличие между тремя CMS ярко проявляется при определении модели данных. Рассмотрим создание типа контента «Статья блога» с полями: заголовок, slug, контент, автор, дата публикации и категория.
Strapi: Content-Type Schema
В Strapi модель определяется через JSON-схему в файле src/api/article/content-types/article/schema.json или через визуальный конструктор в admin-панели:
{
"kind": "collectionType",
"collectionName": "articles",
"info": {
"singularName": "article",
"pluralName": "articles",
"displayName": "Article",
"description": "Blog articles"
},
"options": {
"draftAndPublish": true
},
"attributes": {
"title": {
"type": "string",
"required": true,
"maxLength": 120
},
"slug": {
"type": "uid",
"targetField": "title",
"required": true
},
"content": {
"type": "blocks"
},
"author": {
"type": "relation",
"relation": "manyToOne",
"target": "api::author.author"
},
"publishedAt": {
"type": "datetime"
},
"category": {
"type": "relation",
"relation": "manyToOne",
"target": "api::category.category"
}
}
}
После создания схемы Strapi автоматически генерирует REST-эндпоинты (/api/articles) и GraphQL-запросы. Получение списка статей:
// Запрос через REST API (Strapi 5 — новый формат ответа)
const response = await fetch('https://api.example.com/api/articles?populate=author,category');
const { data } = await response.json();
// data[0].title — доступ напрямую, без .attributes
console.log(data[0].title);
console.log(data[0].author.name);
Payload CMS: Collection Config
В Payload модель описывается как TypeScript-конфигурация коллекции:
// src/collections/Articles.ts
import type { CollectionConfig } from 'payload'
export const Articles: CollectionConfig = {
slug: 'articles',
admin: {
useAsTitle: 'title',
defaultColumns: ['title', 'category', 'publishedAt'],
},
access: {
read: () => true,
},
versions: {
drafts: true,
},
fields: [
{
name: 'title',
type: 'text',
required: true,
maxLength: 120,
},
{
name: 'slug',
type: 'text',
required: true,
unique: true,
admin: {
position: 'sidebar',
},
},
{
name: 'content',
type: 'richText',
},
{
name: 'author',
type: 'relationship',
relationTo: 'authors',
},
{
name: 'publishedAt',
type: 'date',
admin: {
position: 'sidebar',
},
},
{
name: 'category',
type: 'relationship',
relationTo: 'categories',
},
],
}
Запрос данных через Local API из серверного компонента Next.js:
// app/blog/page.tsx — серверный компонент Next.js
import { getPayload } from 'payload'
import config from '@payload-config'
export default async function BlogPage() {
const payload = await getPayload({ config })
const articles = await payload.find({
collection: 'articles',
where: {
_status: { equals: 'published' },
},
sort: '-publishedAt',
depth: 2, // Подтянуть связанные документы (author, category)
})
return (
<main>
{articles.docs.map((article) => (
<article key={article.id}>
<h2>{article.title}</h2>
<p>Автор: {article.author?.name}</p>
</article>
))}
</main>
)
}
Обратите внимание: запрос выполняется через payload.find() — это Local API, без HTTP-запроса. Данные читаются напрямую из базы данных в серверном компоненте. Для Payload это главное архитектурное преимущество — нет задержки на сетевой запрос, нет необходимости в API-ключах для собственного бэкенда.
Sanity: Schema Definition
В Sanity модель определяется как TypeScript-объект с использованием helper-функций:
// schemas/article.ts
import { defineType, defineField } from 'sanity'
export const article = defineType({
name: 'article',
title: 'Article',
type: 'document',
fields: [
defineField({
name: 'title',
title: 'Title',
type: 'string',
validation: (Rule) => Rule.required().max(120),
}),
defineField({
name: 'slug',
title: 'Slug',
type: 'slug',
options: {
source: 'title',
maxLength: 96,
},
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'content',
title: 'Content',
type: 'array',
of: [{ type: 'block' }],
}),
defineField({
name: 'author',
title: 'Author',
type: 'reference',
to: [{ type: 'author' }],
}),
defineField({
name: 'publishedAt',
title: 'Published at',
type: 'datetime',
}),
defineField({
name: 'category',
title: 'Category',
type: 'reference',
to: [{ type: 'category' }],
}),
],
})
Запрос данных через GROQ:
// lib/sanity.ts
import { createClient } from '@sanity/client'
const client = createClient({
projectId: 'your-project-id',
dataset: 'production',
apiVersion: '2026-02-25',
useCdn: true,
})
// GROQ-запрос: получить статьи с развёрнутыми ссылками
const articles = await client.fetch(`
*[_type == "article"] | order(publishedAt desc) {
title,
"slug": slug.current,
publishedAt,
"authorName": author->name,
"categoryTitle": category->title,
"excerpt": array::join(string::split(pt::text(content), "")[0..200], "")
}
`)
GROQ позволяет формировать точную форму ответа прямо в запросе: разворачивать ссылки (author->name), проецировать поля, вычислять значения. Это устраняет проблему over-fetching, характерную для REST API.
Архитектурные различия: self-hosting vs облако
Одно из принципиальных различий между тремя CMS — модель развёртывания и владения данными.
Strapi и Payload — полностью self-hosted решения. Вы контролируете сервер, базу данных, файловое хранилище и весь стек. Это означает:
- Данные никогда не покидают вашу инфраструктуру.
- Вы отвечаете за масштабирование, бэкапы, обновления и безопасность.
- Нет зависимости от внешнего сервиса (vendor lock-in минимален).
- Оба проекта предлагают управляемые облачные решения (Strapi Cloud, Payload Cloud) для тех, кто не хочет управлять инфраструктурой.
Sanity использует гибридную модель:
- Content Lake (хранилище данных) — управляется Sanity. Данные находятся в облаке Sanity, доступны через API. Вы не можете развернуть Content Lake на собственном сервере.
- Sanity Studio — open-source React-приложение, которое вы деплоите куда угодно: Vercel, Netlify, собственный сервер.
- Это означает зависимость от Sanity как поставщика хранилища данных. Для многих проектов это приемлемо (Sanity предоставляет SLA, CDN, автоматическое масштабирование), но для организаций с жёсткими требованиями к хранению данных (data residency) это может быть ограничением.
Когда выбрать каждую CMS
Выбирайте Strapi, если:
- Вам нужна зрелая open-source CMS с минимальным порогом входа. Strapi — самая популярная open-source headless CMS в мире. Документация обширна, сообщество огромно, на Stack Overflow и GitHub тысячи решённых вопросов.
- Контент-менеджеры должны управлять моделью данных через GUI. Content-Type Builder позволяет создавать и модифицировать типы контента визуально, без кода. Это идеально для команд, где контент-менеджеры участвуют в проектировании структуры.
- Вам нужна широкая экосистема плагинов. Marketplace Strapi — самый большой среди трёх CMS. SEO, i18n, Cloudinary, Meilisearch, Stripe — десятки готовых интеграций.
- Проект не привязан к React/Next.js. Strapi работает как standalone API-сервер и одинаково хорошо интегрируется с любым фронтендом: Next.js, Nuxt, Astro, Angular, мобильные приложения.
- Бюджет ограничен. Self-hosted Strapi на VPS за $5-10/мес — одно из самых экономичных решений для малых и средних проектов.
Выбирайте Payload CMS, если:
- Ваш стек — Next.js и TypeScript. Payload 3.0 — единственная CMS, которая живёт непосредственно в Next.js-приложении. Local API из серверных компонентов, общий деплой, единая кодовая база — для Next.js-проектов это идеальный вариант.
- Вам нужен code-first подход. Вся конфигурация — это TypeScript-код. Нет визуального конструктора, нет магии — полный контроль и воспроизводимость через Git.
- CMS — часть более сложного приложения. Payload отлично подходит для e-commerce, SaaS-платформ, порталов, где CMS — лишь один из компонентов системы. Хуки, access control, кастомные эндпоинты делают Payload ближе к фреймворку, чем к CMS.
- Вы хотите гибкость в выборе БД. PostgreSQL для production, SQLite для локальной разработки, MongoDB для legacy-проектов — Payload поддерживает все три через единый API.
- Производительность критична. Local API без HTTP-запросов, Turbopack, минимальное количество зависимостей — Payload оптимизирован для скорости.
Выбирайте Sanity, если:
- Командная работа над контентом — приоритет. Sanity — единственная CMS из трёх с полноценной real-time коллаборацией. Если у вас большая редакция, распределённая команда или агентство, работающее с клиентами, real-time editing — это не опция, а необходимость.
- Вам нужен максимально гибкий запрос данных. GROQ позволяет формировать точную форму ответа без over-fetching. Для проектов с разнообразными клиентами (веб, мобильное приложение, IoT) это критически важно.
- Вы не хотите управлять инфраструктурой бэкенда. Content Lake — управляемый сервис с CDN, автоматическим масштабированием и SLA. Нет серверов, нет баз данных, нет DevOps для контент-бэкенда.
- AI-автоматизация контента важна. Agent Actions, Canvas и Functions — Sanity инвестирует в AI-инструменты для контент-операций. Автоматическая разметка, перевод, суммаризация — всё доступно через API.
- Проект — контент-ориентированный сайт с несколькими каналами публикации. Маркетинговые сайты, медиа-порталы, документация, мультиязычные проекты — Sanity спроектирован для multi-channel publishing.
Производительность и масштабирование
Производительность headless CMS зависит от архитектуры, модели данных и способа доставки контента.
Strapi масштабируется горизонтально: несколько инстансов за балансировщиком нагрузки с общей БД. Для высоконагруженных сценариев рекомендуется Redis для кэширования и CDN для статических ассетов. В Strapi 5 улучшена производительность API за счёт оптимизаций в ORM и новой системы middleware.
Payload выигрывает за счёт Local API: в серверных компонентах Next.js запросы к контенту выполняются без HTTP-overhead. При деплое на Vercel используется serverless-архитектура с автоматическим масштабированием. Для self-hosted сценариев Payload масштабируется аналогично любому Next.js-приложению.
Sanity масштабируется автоматически — это управляемый сервис. Content Lake обслуживает контент через глобальную CDN, а GROQ-запросы выполняются на серверах Sanity. Для клиентских запросов используется CDN-кэширование (useCdn: true), а realtime-подписки работают через WebSocket.
Для сайтов со статической генерацией (SSG) различия в производительности минимальны: контент загружается на этапе сборки, а пользователь получает статический HTML. Различия проявляются при ISR (Incremental Static Regeneration) и SSR — здесь Local API Payload даёт преимущество по latency.
Миграция и vendor lock-in
При выборе CMS важно учитывать стоимость миграции — насколько сложно будет переехать на другое решение.
Strapi — минимальный lock-in. Данные хранятся в стандартной SQL-базе (PostgreSQL/MySQL), модели описаны в JSON-схемах. Экспорт данных — стандартный SQL-дамп.
Payload — аналогично, минимальный lock-in. Данные в PostgreSQL, MongoDB или SQLite. Конфигурации — TypeScript-файлы в Git. Экспорт — стандартный дамп БД.
Sanity — умеренный lock-in. Данные находятся в проприетарном Content Lake. Экспорт возможен через CLI (sanity dataset export), формат — NDJSON. GROQ-запросы специфичны для Sanity и не переносятся на другие системы. Однако Portable Text — открытый стандарт для rich text, и его можно конвертировать в HTML/Markdown.
Заключение
Strapi, Payload и Sanity — три лидера рынка headless CMS в 2026 году, но они решают разные задачи и ориентированы на разные сценарии.
Strapi — лучший выбор для команд, которым нужна проверенная временем, зрелая open-source CMS с визуальным конструктором контента, богатой экосистемой плагинов и полным контролем над инфраструктурой. Это рабочая лошадка для блогов, корпоративных сайтов, маркетинговых лендингов и API-бэкендов для мобильных приложений.
Payload CMS — идеальный вариант для Next.js-разработчиков, которые хотят code-first CMS с максимальной гибкостью и производительностью. Payload стирает границу между CMS и фреймворком, что делает его отличным выбором для сложных приложений, где контент-менеджмент — лишь часть системы.
Sanity — лучшая платформа для команд с фокусом на контент-операции и коллаборацию. Real-time editing, AI-инструменты, GROQ и управляемая инфраструктура делают Sanity идеальным для медиа-компаний, агентств и enterprise-проектов с распределёнными редакциями.
Нет универсального «лучшего» решения — есть решение, подходящее вашему стеку, команде и бизнес-задаче. Начните с бесплатного тарифа каждой CMS, проведите proof-of-concept с вашей моделью данных и оцените DX на реальном сценарии.
Похожие статьи
- Supabase vs Firebase в 2026: какой BaaS выбрать для проекта — сравнение Backend-as-a-Service платформ, которые часто используются совместно с headless CMS для аутентификации и хранения данных
- Astro vs Next.js vs Nuxt в 2026: какой фреймворк для фронтенда выбрать — сравнение фронтенд-фреймворков, с которыми интегрируются Strapi, Payload и Sanity
- Neon vs PlanetScale vs Turso в 2026: какую serverless-базу выбрать — сравнение serverless-баз данных, актуальное при выборе БД для self-hosted Strapi или Payload