headless-cms · 16 мин чтения

Strapi vs Payload vs Sanity в 2026: какую headless CMS выбрать

Strapi Payload CMS Sanity headless CMS сравнение Payload CMS Next.js Strapi open source Sanity коллаборация
Содержание

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%.

Сравнительная таблица

КритерийStrapiPayload CMSSanity
ЛицензияMIT (Community), EE (Enterprise)MITПроприетарная (Studio — MIT)
АрхитектураStandalone Node.js-сервер (Koa)Next.js-нативный (App Router)Облачный Content Lake + Studio
ЯзыкTypeScript (с v5)TypeScriptTypeScript (Studio)
Базы данныхPostgreSQL, MySQL, SQLitePostgreSQL, MongoDB, SQLiteУправляемый Content Lake
Self-hostingДа, полный контрольДа, полный контрольТолько Studio; данные в облаке
APIREST + GraphQLREST + GraphQL + Local APIGROQ + GraphQL
Admin-панельВстроенная, GUI-конструкторВстроенная, code-firstSanity 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 EditorBlocks 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 на реальном сценарии.

Похожие статьи

Источники

  1. Strapi 5 — официальная документация и What’s New
  2. Payload 3.0 — анонс и документация
  3. Sanity — документация и Spring Release 2025
  4. Headless CMS Comparison 2026 — Cosmic
  5. Payload vs Other CMS — Shakuro
  6. Sanity Pricing
  7. Strapi Cloud Pricing
← Все статьи