Появилась ли наконец настоящая альтернатива WordPress? (2026)

Sergey Nesmachny
Sergey Nesmachny
11.08.2026
9 мин чтения
Клиентский сайт на Cloudflare и EmDash за $5 в месяц: правите сами, почта и CRM встроены

Двадцать лет подряд, если клиенту нужен был сайт, который он сможет править сам, без звонка разработчику из-за каждой новой цены или фотографии, ответом был WordPress. Со всеми его бедами: раздутые плагины, бесконечные патчи безопасности, счёт за хостинг, который тихо растёт, и база, забитая «временными» исправлениями, про которые уже никто не помнит, зачем они. Настоящей альтернативы не было. Такой, которая действительно даёт нетехническому клиенту полный контроль над своим контентом.

Кажется, это меняется. Я только что сделал клиентский сайт на совсем другом стеке: CMS под названием EmDash, где структура контента задаётся схемами, и работает она целиком на инфраструктуре Cloudflare. И впервые готов сказать клиенту «это замена WordPress», а не «это конструктор страниц поудобнее».

Всё дело в сочетании. Cloudflare сам по себе теперь тихо делает то, на что раньше уходило четыре-пять разных подрядчиков: это ваш регистратор домена, SSL-сертификат, база данных, файловое хранилище, защита от ботов и DDoS, а с двумя плагинами, которые я написал поверх него, ещё и деловая почта и CRM. Всё в одном аккаунте, в одном счёте, за несколько долларов в месяц. Ниже рассказываю, как это выглядело на практике: двуязычный сайт персонального стилиста в Лиссабоне.

Стек простыми словами

  • Домен и SSL. Cloudflare, там же, где всё остальное. Отдельного регистратора нет, сертификат не нужно продлевать вручную.
  • CMS. EmDash, headless CMS со схемами данных. Она работает внутри самого Astro-приложения, а не отдельным сервисом, который приходится патчить.
  • База данных и хранилище файлов. Cloudflare D1 (SQLite) для контента и R2 для загруженных фотографий. Оба живут в том же аккаунте, что и домен.
  • Защита от ботов и DDoS. Включена по умолчанию, часть того же аккаунта Cloudflare, ничего не нужно дополнительно настраивать или оплачивать.
  • Деловая почта в обе стороны. Настоящие транзакционные письма уходят с домена клиента, а входящих адресов на этом домене сколько угодно, и каждый маршрутизируется как удобно: какие-то пересылаются прямо в привычный ящик клиента, какие-то уходят в Worker на обработку.
  • CRM, в которую попадает каждая заявка. Второй плагин превращает каждую отправку формы на сайте в настоящую запись в CRM, а не в письмо, которое потом тонет в почте.
  • Хостинг. Cloudflare Workers. Никакого сервера, который надо патчить, и больше никаких писем «пожалуйста, обновите ядро WordPress».

Платить приходится $5 в месяц за платный тариф Workers. В эту сумму входят хостинг сайта и 200 исходящих транзакционных писем в день. Регистрация домена оплачивается отдельно, но недорого, а всё остальное (база, хранилище, защита от ботов) при таком трафике укладывается в бесплатные лимиты Cloudflare.

Как это сделано на самом деле

CMS без собственного сервера

Весь бэкенд помещается в несколько строк конфига самого приложения. Отдельной установки CMS нет, PHP нет, отдельную админку защищать не нужно:

// astro.config.mjs
export default defineConfig({
  output: "server",
  adapter: cloudflare(),
  integrations: [
    emdash({
      database: d1({ binding: "DB", session: "auto" }),
      storage: r2({ binding: "MEDIA" }),
    }),
  ],
});

Это и есть бэкенд. Админка идёт в комплекте: вход по passkey (нет паролей, которые могут утечь), черновики и ревизии, нормальная медиабиблиотека. Один деплой, больше ничего ставить не надо.

Поля со смыслом, а не безликие «блоки»

Обычная ловушка headless CMS: одна общая коллекция «Страница» с гибкими блоками контента, потому что это кажется универсальным. На деле клиент открывает форму редактирования, набитую полями, которые к его странице не относятся. Я дал каждому реальному типу страниц свою схему: услуги, кейсы, отзывы, статьи блога, главная. Поля называются человеческим языком:

npx emdash schema add-field pages hero_headline --type string --required
npx emdash schema add-field pages stat_clients --type string

Никаких content_block_1. Когда клиентка открывает редактор, каждое поле можно описать одной фразой: заголовок, цена, цитата клиента. Гадать не приходится.

Фотографии, которые оптимизируются сами

В повседневной работе это оказалось самым важным. Клиентка загружает то, что снял телефон: полноразмерный JPEG на мегабайт прямо с iPhone. CMS, которая требует «сначала сожмите картинки» как ручной шаг, рано или поздно начнёт отдавать медленный сайт: лишний ручной шаг однажды обязательно забудут.

Решение уместилось в две настройки, код писать не пришлось. Первая включает в Workers настоящую обработку картинок (размер и формат), вторая разрешает Astro оптимизировать картинки с собственного домена сайта:

// wrangler.jsonc
"images": { "binding": "IMAGES", "remote": true }
// astro.config.mjs
image: { domains: ["my-real-domain.com"] },

Обе легко пропустить: без них ничего не падает с ошибкой, сайт просто молча отдаёт оригинальный полноразмерный файл, и проблема проявляется только как «почему сайт тормозит». С обеими настройками фото с телефона на 985 КБ автоматически превращается в файл нужного размера на 120 КБ. Клиентке ничего не нужно менять в работе, и неоптимизированные картинки на сайт больше не попадают.

Почта, которая действительно принадлежит домену клиента

Большинство сайтов малого бизнеса либо вообще обходятся без транзакционной почты, либо прикручивают сторонний сервис со своим аккаунтом, своим счётом и своими DNS-записями, за которыми надо следить. Cloudflare умеет почту в обе стороны сам, как только домен у него. Это та же маршрутизация, на которой я настраивал бесплатную профессиональную почту для своего стартапа. Вокруг неё я написал плагин. Исходящие письма уходят с адреса клиента:

await env.EMAIL.send({
  to: CONTACT_EMAIL_TO,
  from: { email: "noreply@clientdomain.com", name: "Website form" },
  subject, text, html,
});

А входящие маршрутизируются без ограничения на число адресов. hello@, booking@, отдельный адрес под каждую рекламную кампанию, что угодно: каждый либо пересылается прямо в настоящий ящик, либо уходит в Worker, который обрабатывает письмо кодом (автоответ, разбор вложения, создание тикета). Лимитов на ящики и платы за каждый адрес нет, потому что это никогда и не были «ящики». Это адреса на домене, которые маршрутизируются так, как нужно бизнесу.

Заявки, которые не теряются

Форма обратной связи, как на любом сайте, уведомляет клиента письмом. Но почта и есть то место, где заявки умирают: через неделю они погребены под всем остальным в ящике. Второй плагин вместе с уведомлением записывает каждую отправку формы в настоящую CRM: карточка контакта с датой и меткой источника, готовая к цепочке касаний. Искать её по почте не придётся. Клиентка получает и то и другое: мгновенное письмо и постоянную запись, которую можно найти, даже если письмо пропустили.

SEO-панель, которая что-то делает

Почти в каждой CMS есть SEO-панель на странице: title, description, canonical. И легко получить ситуацию, когда панель есть, данные сохраняются, а их никто не читает, потому что шаблоны страниц собирают мета-теги совсем из другого места. Здесь было именно так, пока я не проследил цепочку и не подключил сохранённые значения как настоящее переопределение: значение из CMS, если клиентка его заполнила, иначе разумное значение по умолчанию. Теперь, когда она правит «SEO Title» на странице, Google видит именно его.

Что это даёт клиенту

После запуска её часть работы такая: вошла, поправила поле, нажала «сохранить». Разработчик не нужен ни для новой цены, ни для нового отзыва, ни для новой статьи. Каждая отправка формы становится настоящей заявкой в настоящей CRM, а не иголкой в почтовом стоге сена. Каждое уведомление приходит с её собственного домена, а не от стороннего отправителя, похожего на спам. А поскольку всё стоит в сети самого Cloudflare, тот же аккаунт, который отвечает за домен и SSL, уже отсекает ботов и DDoS до того, как они доберутся до приложения. Сайту на WordPress для чего-то похожего понадобилось бы три-четыре отдельных платных дополнения.

На какие грабли я наступил

  • Тихие сбои вместо громких ошибок. И обработка картинок, и (отдельно) двуязычная маршрутизация сайта локально вели себя иначе, чем после деплоя. Ничего не падало, просто тихо работало не так. Проверяйте настоящую выложенную сборку: локального dev-сервера мало.
  • Работающая форма в админке ещё не значит работающую функцию. SEO-панель месяцами сохраняла данные и нормально отображалась, но их никто не читал. Проследите каждое поле CMS до шаблона, который должен его использовать.
  • Google Fonts это ещё и вопрос GDPR. Шрифты с CDN Google на каждом просмотре страницы отправляют в Google IP посетителя. Для бизнеса в ЕС это реальная проблема с соответствием. Когда я разместил те же файлы шрифтов на самом сайте, пропали и внешний запрос, и вопрос к GDPR.
  • Даже у «бесплатной» инфраструктуры есть одна платная строка. При таком трафике здесь всё бесплатно, кроме обработки картинок: до 5 000 преобразований в месяц бесплатно, дальше $0,50 за каждую тысячу. Это стоит знать, прежде чем обещать клиенту «$0 в месяц», даже если на практике почти так и выходит.

Так это правда замена WordPress?

Для маркетингового сайта, где клиенту нужен полный и простой контроль над реальным контентом (тексты, цены, фото, кейсы, заявки, почта), а магазин плагинов и тем не нужен, да, по-настоящему. Отказываетесь вы ровно от того, что и делает WordPress хрупким: разросшейся экосистемы плагинов и поверхности атаки, которая к ней прилагается. Взамен получаете сайт, который быстрее по умолчанию, дешевле в содержании, сразу идёт с работающей CRM и деловой почтой и больше никогда не пришлёт письмо «пожалуйста, обновите плагины».

Если ваш сайт как раз на WordPress и вы хотели бы тратить меньше времени на патчи и больше на развитие, это ровно тот тип проектов, за которые я берусь. Посмотрите, как я работаю с клиентами.

Обновление, сентябрь 2026: с тех пор EmDash вышел в стабильной версии 1.0, и мы перевели на него сам nesmachny.ru. Что это дало в цифрах.

Частые вопросы

EmDash CMS правда альтернатива WordPress?

Для маркетингового сайта или сайта-визитки, где клиент правит реальный контент (тексты, цены, фото) и ему не нужна экосистема плагинов, да. Структура контента в EmDash задаётся схемами, а сама CMS работает внутри приложения, без отдельного PHP-сервера. Это убирает главный источник постоянного обслуживания и проблем с безопасностью у WordPress.

Что входит в стек Cloudflare?

Регистрация домена, SSL, SQL-база данных (D1), файловое хранилище (R2), serverless-хостинг (Workers), оптимизация картинок и защита от ботов и DDoS, всё в одном аккаунте и одном счёте. Плюс, с двумя плагинами под эту задачу, настоящая транзакционная и входящая деловая почта на домене клиента и CRM, которая сохраняет каждую заявку с сайта.

Сколько стоит содержать такой сайт?

$5 в месяц покрывают хостинг на Workers и 200 исходящих транзакционных писем в день. База данных, хранилище и защита от ботов при трафике малого бизнеса укладываются в бесплатные лимиты Cloudflare. Отдельная и небольшая статья расходов одна: регистрация домена.

Может ли клиент получать почту на свой домен без полноценного почтового провайдера?

Да. Маршрутизация почты в Cloudflare позволяет завести на домене сколько угодно адресов без платы за ящик. Каждый адрес может пересылать письма в существующий ящик или отдавать их в Worker на обработку. Так же отправляются и исходящие транзакционные письма (уведомления о формах, подтверждения): с адреса клиента, а не от стороннего отправителя.

Что происходит с заявкой, отправленной через форму на сайте?

Она записывается в настоящую CRM как карточка контакта с датой и меткой источника, и одновременно клиенту приходит уведомление на почту. Так заявка сохранится, даже если письмо пропустили или оно утонуло, и по ней можно выстроить нормальную цепочку касаний, а не искать её в почте.

Почему оптимизацию картинок пришлось настраивать отдельно?

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

Sergey Nesmachny

Автор

Sergey Nesmachny

Поделиться: