</>programmer-web
10 мин

JAMstack: быстрые сайты без тяжёлой CMS — что это и кому подходит

Обложка статьи «JAMstack: быстрые сайты без тяжёлой CMS»

Большинство сайтов в рунете работают на WordPress, 1С-Битрикс или MODX. Это удобно и привычно, но за удобство приходится платить скоростью, безопасностью и постоянными обновлениями. Есть другой подход — JAMstack. Разберём без лишних терминов, что это такое, какие выгоды он даёт бизнесу и в каких случаях лучше остаться на классической CMS.

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

JAMstack — это способ строить сайты, при котором страницы собираются заранее, а не в момент, когда их открывает посетитель. Название складывается из трёх частей: JavaScript, API и Markup (готовая HTML-разметка).

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

В JAMstack всё наоборот. Когда вы меняете контент, специальная программа — генератор статических сайтов — один раз собирает все страницы в готовые HTML-файлы. Посетитель получает уже готовую страницу: серверу не нужно ничего вычислять, он просто отдаёт файл. Всё динамическое — формы, бронирование, оплата, поиск — подключается через API внешних сервисов или небольших обработчиков.

Какие выгоды это даёт бизнесу

  • Скорость. Готовая страница отдаётся мгновенно: нет запросов к базе и тяжёлых плагинов. Быстрый сайт меньше теряет посетителей на мобильном интернете и лучше ранжируется в поиске.
  • Безопасность. На сервере нет базы данных и открытой админки, которые обычно и взламывают. Нечего подбирать, нет уязвимых плагинов — взломать набор HTML-файлов практически невозможно.
  • Дешёвый и надёжный хостинг. Статике не нужен мощный сервер с PHP и MySQL: её можно разместить на самом простом хостинге или CDN, и сайт спокойно выдержит наплыв посетителей после рекламы.
  • Меньше поломок. Нет ежемесячных обновлений ядра и десятков плагинов, после которых «что-то отвалилось». Сайт работает годами в том виде, в каком его сдали.
  • Хорошая база для SEO. Чистая разметка без мусора от конструкторов, быстрые страницы и полный контроль над мета-тегами и микроразметкой.

А как же редактировать контент без программиста?

Это главный вопрос, который мне задают. Ответ — headless CMS: отдельная админка, в которой менеджер редактирует тексты, цены, фотографии и страницы так же, как в WordPress. Разница только в том, что после сохранения сайт автоматически пересобирается — обычно это занимает от нескольких секунд до пары минут.

Для небольших сайтов я использую Decap CMS: она хранит контент прямо в Git-репозитории проекта и не требует отдельного сервера и базы данных. Для сайтов посложнее — Strapi или Payload CMS: полноценные админки с ролями, медиатекой и сложной структурой данных.

Формы, бронирование и оплата на статическом сайте

Статический сайт не значит «сайт без функций». Всё интерактивное работает через внешние сервисы и API:

  • формы заявок отправляются в небольшой обработчик на сервере, на почту или сразу в CRM — Битрикс24, amoCRM;
  • онлайн-бронирование, продажа билетов и запись подключаются виджетами профильных сервисов;
  • оплата — через платёжные системы вроде ЮKassa;
  • поиск по сайту, комментарии, чат — через готовые сервисы или собственный API.

Пример JAMstack-сайта: гостиница «Фатима» в Казани

Сайт fatima-kazan.ru раньше работал на WordPress с конструктором Elementor: тяжёлые страницы, лишние скрипты конструктора и накопившиеся за годы ошибки вёрстки. Я перенёс его на генератор статики Hugo с админкой Decap CMS и сверстал всё с нуля. Что получила гостиница:

  • Скорость вместо тормозов. 92 балла Google PageSpeed за производительность — вместо тяжёлых страниц конструктора посетитель сразу видит номера и цены.
  • 100 баллов за SEO. Чистая разметка, мета-теги, карта сайта и микроразметка Schema.org для гостиницы: поисковики понимают, что это отель, с адресом и контактами.
  • Переезд без потери позиций. Адреса страниц остались прежними, поэтому сайт не просел в поиске после смены движка.
  • Онлайн-бронирование на месте. Виджет Bnovo с реальными ценами и наличием номеров по датам продолжает работать прямо на страницах статического сайта.
  • Администратор правит сайт сам. В Decap CMS есть разделы «Настройки сайта», «Страницы» и «Номера»: номера и их описания, фотографии, правила проживания, SEO главной страницы и настройки бронирования меняются без программиста.
  • Нет WordPress — нет проблем WordPress. Никаких обновлений плагинов, уязвимостей и «белого экрана» после очередного апдейта.
  • Работает как приложение. Сайт сделан как PWA и устанавливается на экран телефона.

Пример JAMstack-сайта: шоу «Майкл Джексон: Легенда»

Сайт mjshow.ru я сделал под ключ — от дизайна до админки. Он собран генератором Hugo, контентом управляет Decap CMS, а на хостинг выкладывается только готовая статика. Вот что это даёт организатору шоу и зрителям:

  • Мгновенная загрузка. Главная страница — это готовый HTML весом около 50 КБ: никакого PHP и запросов к базе. Зрители приходят из соцсетей и рекламы с телефона — и сразу видят афишу, а не белый экран.
  • Работает как приложение. Сайт сделан как PWA: его можно установить на экран телефона с иконкой, а service worker кэширует страницы, поэтому повторные визиты открываются ещё быстрее.
  • Билеты прямо на странице. Покупка встроена через виджет Яндекс Афиши с картой зала и ценами по секторам — зрителю не нужно уходить на сторонний сайт.
  • Организатор правит сайт сам. Даты показов, программу шоу, фотографии, реквизиты и страницы он меняет в админке Decap CMS — без программиста и без отдельного сервера под бэкенд.
  • Нечего взламывать и нечего обновлять. На хостинге нет базы данных, PHP и плагинов — только файлы. Сайт не требует ежемесячных обновлений и не ломается от них.
  • Недорогой хостинг. Статике не нужен мощный сервер, а наплыв зрителей в день старта продаж ей не страшен — файлы просто отдаются, ничего не вычисляется.

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

Как подключается Decap CMS

Decap CMS (раньше называлась Netlify CMS) — бесплатная админка с открытым кодом, которая подключается к статическому сайту на Hugo, Next.js, Astro, Eleventy и другим генераторам. Для неё не нужен отдельный сервер, PHP или база данных: контент хранится прямо в Git-репозитории сайта. Вот как это устроено на практике:

  • Админка живёт по адресу ваш-сайт.ru/admin. Менеджер входит через аккаунт GitLab или GitHub — отдельные пароли и пользователи на сервере не нужны.
  • Разделы админки настраиваются под ваш сайт. На mjshow.ru это «Настройки», «Реквизиты», «Показы», «Программа», «Фотографии» и «Страницы» с полями «дата», «город», «площадка», «ссылка на билеты». На fatima-kazan.ru — «Настройки сайта», «Страницы» и «Номера» с ценами, фото и правилами проживания.
  • Тексты редактируются в визуальном редакторе, фотографии загружаются перетаскиванием — работать с ней не сложнее, чем с WordPress.
  • После нажатия «Опубликовать» правка сохраняется в репозиторий, сайт автоматически пересобирается и через минуту-две изменения видны всем.
  • Каждая правка сохраняется в истории Git: всегда видно, кто и что поменял, и любое изменение можно откатить.
  • Можно включить режим черновиков и согласования — правки сначала проверяет ответственный, а потом они попадают на сайт.

Подключить Decap CMS можно и к уже существующему статическому сайту: я настраиваю коллекции под структуру контента, авторизацию через GitLab или GitHub и автоматическую сборку с выкладкой на хостинг. В итоге у сайта появляется удобная админка, а скорость и безопасность статики сохраняются.

Когда JAMstack не подходит

У подхода есть границы, и честнее сказать о них заранее. Классическая CMS или фреймворк будут лучше, если:

  • это большой интернет-магазин с тысячами товаров, остатками и ценами, которые меняются каждый час, и обменом с 1С;
  • нужны личные кабинеты, роли пользователей и сложная бизнес-логика на сервере;
  • контент обновляется постоянно и многими людьми — например, новостной портал или доска объявлений;
  • проект уже держится на готовых модулях CMS, и переписывать их нет смысла.

В таких случаях я делаю проект на 1С-Битриксе, OpenCart или Laravel — инструмент подбирается под задачу, а не наоборот.

Кому стоит присмотреться к JAMstack

  • лендингам и сайтам услуг, где важны скорость и заявки;
  • корпоративным сайтам и сайтам-визиткам, которые обновляются несколько раз в месяц;
  • сайтам мероприятий, гостиниц, ресторанов, клиник;
  • блогам и экспертным сайтам, которым нужен быстрый старт в поиске;
  • владельцам сайтов на WordPress или конструкторах, которые устали от тормозов, обновлений и взломов.

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