Як створити блог без обслуговування за допомогою MDX і Next.js 15
Як створити блог із контентом у git за допомогою MDX, gray-matter і Next.js App Router — без бази даних.

Це технічна стаття для розробників. Якщо ви керуєте салоном, рестораном або ремісничим бізнесом, краще почніть звідси: скільки насправді коштує сайт і що насправді потрібно вашому сайту.
Багато невеликих сайтів надмірно ускладнюють блог. Ви встановлюєте CMS, налаштовуєте вебхуки, розгортаєте базу даних і витрачаєте на інфраструктуру більше часу, ніж на тексти. MDX із Next.js App Router усуває все це: контент зберігається в репозиторії, версіонується разом із кодом і не має жодних runtime-залежностей.
Чому MDX, а не headless CMS
Headless CMS на кшталт Sanity або Contentful — правильний вибір, коли контент публікує нетехнічна команда. Для особистого блогу розробника вона створює зайві зв’язки:
- Затримка холодного старту — кожен рендер сторінки звертається до зовнішнього API.
- Залежність від доступності — збій CMS робить недоступним і ваш блог.
- Перемикання контексту — доводиться писати в браузерному редакторі замість IDE.
MDX змінює цю модель. Контент — це файл .mdx. Публікація — це git push. Обслуговувати CMS не потрібно.
Структура проєкту
content/
blog/
nextjs-15-architecture.mdx
trading-bot-design.mdx
lib/
mdx.ts ← parse frontmatter + content
app/[locale]/blog/
page.tsx ← listing
[slug]/page.tsx ← detail
Обробка MDX-файлів за допомогою gray-matter
Основа системи — одна утиліта, яка читає .mdx-файли з диска та перетворює їх на вашу модель даних:
ts
gray-matter відокремлює YAML-frontmatter від основного тексту. Решта — звичайний TypeScript; на цьому етапі спеціальний MDX runtime не потрібен.
Рендеринг MDX в App Router
Для сторінки статті Next.js рекомендує @next/mdx або легший next-mdx-remote. Оскільки файли завантажуються під час запиту, а не статично імпортуються, next-mdx-remote підходить краще:
ts
MDXRemote з експорту /rsc є React Server Component: він компілює та рендерить MDX на сервері без клієнтського JavaScript.
Схема frontmatter
Узгоджена структура frontmatter запобігає нетиповим ситуаціям на сторінці зі списком статей:
yaml
Для чернеток залишайте published: false — фільтр у getMdxPosts виключить їх без змін у маршрутизації.
Статична генерація з generateStaticParams
Для максимальної продуктивності попередньо рендерте всі статті під час збірки:
ts
Разом із next/image для обкладинок і CDN перед Vercel це скорочує Time to First Byte до кількох мілісекунд.
Додавання власних MDX-компонентів
Одна з найбільших переваг MDX — можливість вбудовувати React-компоненти в текст. Зіставте назви компонентів із реалізаціями в одному місці:
ts
Тепер будь-який .mdx-файл може використовувати <Callout> або <CodeBlock> безпосередньо в тексті.
Компроміси
Що ви отримуєте:
- Жодної бази даних, CMS API або вебхуків.
- Контент версіонується в git: чернетки — це гілки, перевірка — pull request.
- Повний набір інструментів IDE: автодоповнення, перевірка правопису, рефакторинг.
Від чого відмовляєтеся:
- Немає візуального редактора для нетехнічних учасників.
- Немає вбудованого керування медіафайлами — використовуйте Cloudinary або
public/. - Для публікації потрібне повторне розгортання — прийнятний компроміс для сайту, який підтримує одна людина.
Висновок
Для сайту, який підтримує один розробник, блог на MDX має правильний рівень складності. Налаштування вміщується у два файли, масштабується до сотень статей без бази даних і залишає роботу з текстом у звичних інструментах. Єдина витрата на обслуговування — час від часу запускати npm update для gray-matter і next-mdx-remote.
Працюєте над чимось подібним?
Я створюю швидкі маркетингові сайти та системи онлайн-запису для малого бізнесу по всій Європі — як незалежний розробник, віддалено. Відповідаю протягом 24 годин.
Зв’язатисяСхожі статті
Сайт для ремісничого бізнесу: заявки замість пропущених дзвінків
Чому електрики, сантехніки та інші майстри втрачають замовлення телефоном — і як сайт із формою заявки, завантаженням фото та екстреним контактом перетворює пропущені дзвінки на структуровані звернення. З інтерактивним демо.
Прочитати статтюBooksy, Fresha та інші платформи чи власний сайт для запису: чесне порівняння
Що маркетплейси запису справді дають салонам, скільки вони коштують у довгостроковій перспективі та коли доцільний власний сайт з онлайн-записом. Зважене порівняння без категоричного «або-або».
Прочитати статтю