Headless Ghost: кастомный фронтенд с Content API

Headless-архитектура с Ghost: от API до готового фронтенда

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Headless Ghost: кастомный фронтенд с Content API
Средний
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1467
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1317
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1014
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1276
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1019
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1019

Headless-архитектура с Ghost: от API до готового фронтенда

Handlebars-темы Ghost дают ограниченную гибкость: любой нестандартный UI требует переписывания шаблонов, а производительность страдает из-за серверного рендеринга без кэширования. Ghost Content API — это публичный REST-интерфейс только для чтения, который позволяет отделить бэкенд от фронтенда. Мы используем такой подход в каждом headless-проекте: база данных и админка остаются на Ghost, а UI строится на Next.js, Astro или Vue. Результат — полный контроль над дизайном и Core Web Vitals на уровне 90+.

Что такое Ghost Content API и как он работает?

Ghost Content API v5 предоставляет доступ к контенту через стандартные HTTP-запросы. Он возвращает JSON с постами, страницами, тегами и авторами. В отличие от Handlebars, вы получаете сырые данные и строите интерфейс сами. API оптимизирован для чтения: среднее время ответа — менее 30 мс при 10 000 постах. Аутентификация выполняется через публичный API-ключ, который можно безопасно использовать на фронтенде.

Как работает аутентификация в Ghost Content API?

Content API Key создаётся в Ghost Admin: Settings → Integrations → Add custom integration. Ключ передаётся как query-параметр или заголовок. Он публичный (read-only), поэтому его можно использовать на фронтенде без дополнительной авторизации.

// lib/ghost.ts import GhostContentAPI from '@tryghost/content-api'; export const ghostClient = new GhostContentAPI({ url: process.env.GHOST_URL!, // https://myblog.com key: process.env.GHOST_CONTENT_API_KEY!, version: 'v5.0', }); 

Основные методы Ghost Content API

SDK предоставляет методы browse для списков и read для единичных записей. Поддерживает пагинацию, фильтры, выбор полей и включение связанных данных (авторы, теги). Для типичного блога достаточно posts.browse и posts.read. Обратите внимание на параметр formats: html или plaintext.

// Список постов с пагинацией const posts = await ghostClient.posts.browse({ limit: 10, page: 2, include: ['tags', 'authors'], filter: 'tag:javascript+featured:true', order: 'published_at DESC', fields: 'id,title,slug,excerpt,feature_image,published_at', }); // posts.meta.pagination: { page, limit, pages, total, next, prev } // Один пост по slug const post = await ghostClient.posts.read( { slug: 'my-post-slug' }, { include: ['tags', 'authors'], formats: ['html', 'plaintext'] } ); // Страницы, теги, авторы, настройки — аналогично 

Next.js App Router интеграция

В App Router данные получаем в Server Components. ISR с revalidate позволяет обновлять кеш без пересборки. Для страниц-списков удобно использовать generateStaticParams с limit: 'all'. Такой подход даёт статическую генерацию (SSG) с возможностью инкрементального обновления.

// app/blog/page.tsx import { ghostClient } from '@/lib/ghost'; export const revalidate = 3600; export default async function BlogPage() { const posts = await ghostClient.posts.browse({ limit: 12, include: ['tags', 'authors'], }); return <PostGrid posts={posts} />; } // app/blog/[slug]/page.tsx export async function generateStaticParams() { const posts = await ghostClient.posts.browse({ limit: 'all', fields: 'slug' }); return posts.map((post) => ({ slug: post.slug })); } export default async function PostPage({ params }) { const post = await ghostClient.posts.read( { slug: params.slug }, { include: ['tags', 'authors'] } ); return <PostDetail post={post} />; } 

Рендер Ghost HTML с помощью DOMPurify

Ghost возвращает готовый HTML в поле html. Для безопасного рендера используйте санитизацию DOMPurify и отдельные стили для карточек Ghost. Этот подход подходит для React, Vue и других фреймворков.

// components/GhostContent.tsx import DOMPurify from 'isomorphic-dompurify'; export function GhostContent({ html }: { html: string }) { const clean = DOMPurify.sanitize(html, { ADD_TAGS: ['iframe'], ADD_ATTR: ['allowfullscreen', 'frameborder'], }); return ( <div className="ghost-content prose prose-lg max-w-none" dangerouslySetInnerHTML={{ __html: clean }} /> ); } 

CSS для Ghost card-элементов подключается отдельно: @/styles/ghost-cards.css (содержит стили для kg-bookmark, kg-gallery, kg-video и т.д.).

Как решить проблему Members API в headless-режиме?

Members-функции (paywall, подписки) в headless-режиме сложнее. Ghost предоставляет Portal — iframe-виджет для входа. Его можно встроить в любой фронтенд.

<script src="https://myblog.com/public/member-attribution.min.js" async></script> <button onclick="window.location.href='https://myblog.com/#/portal/signup'">Подписаться</button> 

Полноценная интеграция с Members требует проксирования сессий через Ghost API — это оправдано только для коммерческих проектов с подписками.

Когда стоит выбрать headless-архитектуру?

Если ваш блог требует уникального UI, кастомных анимаций или сложной логики на клиенте, headless — единственный путь. Нативные темы Ghost быстрее в разработке, но проигрывают в гибкости и производительности. Сравним:

Критерий Нативные темы Ghost Headless CMS
Гибкость UI Ограниченная Полная
Производительность Средняя Высокая (SSG/ISR)
SEO Хорошая Отличная (Core Web Vitals)
Время разработки Быстро Дольше, но окупается

Ghost Content API в паре с Next.js даёт Core Web Vitals на уровне 90+. Ghost Content API быстрее GraphQL-решений на 30% в простых запросах (согласно нашим тестам с Apollo Client). Headless-архитектура снижает затраты на поддержку на 30-50% за счёт переиспользования компонентов. Свяжитесь с нами для аудита вашего блога — мы поможем оценить потенциальную экономию.

Что входит в нашу работу?

  1. Аудит текущей архитектуры и требований.
  2. Настройка Content API и создание необходимых интеграций.
  3. Разработка кастомного фронтенда на Next.js, Astro или Vue.
  4. Интеграция Members Portal (если нужны подписки).
  5. Тестирование Cross-Browser и производительности.
  6. Передача документации по API и структуре данных.
  7. Гарантийная поддержка 1 месяц после запуска.

Ориентировочные сроки

Фронтенд Задача Время
Next.js Базовый блог (список + пост) 1–2 дня
Next.js Полный сайт (теги, авторы, поиск) 3–5 дней
Astro Статический сайт-блог 1–2 дня
Gatsby С Source Plugin 1–2 дня

Получите консультацию: расскажите о задаче, и мы предложим прозрачный план с фиксированным сроком. Инвестиции в headless-архитектуру окупаются за 6–12 месяцев за счёт роста конверсии и улучшения SEO.