Проблема: редакторы не видят контент до публикации
Представьте: редактор изменяет заголовок статьи в админке Payload CMS, но чтобы увидеть результат на фронтенде, приходится сохранять черновик, открывать отдельную вкладку и ждать сборку. Это замедляет работу и создаёт риск публикации неготового контента. Live Preview решает эту задачу: изменения отображаются в реальном времени прямо в панели управления.
Почему это работает быстрее обычного превью?
Традиционный подход требует деплоя или сборки после каждого изменения — минуты ожидания. Live Preview использует postMessage для передачи данных черновика во фронтенд, рендеря страницу в iframe мгновенно. Мы измерили: скорость предпросмотра увеличивается в 10–20 раз по сравнению с полной пересборкой. Это особенно заметно при работе с текстами, изображениями и вложенными блоками.
| Метод | Время обновления | Требует сборки |
|---|---|---|
| Традиционное превью | 1–5 минут | Да |
| Live Preview | 0.2–0.5 секунды | Нет |
Эта разница критична для редакторов, работающих с большими объёмами контента. Данные черновика передаются через postMessage, что исключает перезагрузку страницы. Для сравнения, при стандартном подходе нужно дождаться перестроения статики или перезапуска дев-сервера.
Как Live Preview ускоряет работу редактора?
Редактор видит изменения сразу после ввода — без сохранения и переключения вкладок. Это снижает количество итераций при правке контента. В одном из проектов с новостным порталом время на подготовку одной статьи сократилось на 40%. Используйте Live Preview, если у вас больше двух редакторов и частые обновления контента.
Что нужно для интеграции с Next.js?
Потребуется установить пакет @payloadcms/live-preview-react и настроить Draft Mode. Ключевой момент — корректная генерация URL превью для каждой коллекции. Если URL не совпадает с продакшен-роутом, редактор увидит пустой iframe. Мы используем функцию, которая получает slug и locale, и формирует полный URL.
Конфигурация в Payload:
// payload.config.ts
export default buildConfig({
admin: {
livePreview: {
breakpoints: [
{
label: 'Mobile',
name: 'mobile',
width: 375,
height: 667,
},
{
label: 'Tablet',
name: 'tablet',
width: 768,
height: 1024,
},
{
label: 'Desktop',
name: 'desktop',
width: 1440,
height: 900,
},
],
},
},
}) // collections/Posts.ts
const Posts: CollectionConfig = {
slug: 'posts',
admin: {
livePreview: {
url: ({ data, locale }) => {
const baseURL = process.env.NEXT_PUBLIC_FRONTEND_URL
return `${baseURL}/posts/${data?.slug || 'preview'}?locale=${locale?.code || 'ru'}`
},
},
},
} Next.js: хук useLivePreview и Draft Mode
// app/(frontend)/posts/[slug]/page.tsx
import { LivePreviewListener } from './LivePreviewListener'
export default async function PostPage({ params, searchParams }) {
const { isEnabled } = draftMode()
const payload = await getPayload({ config })
const result = await payload.find({
collection: 'posts',
where: {
slug: {
equals: params.slug
}
},
draft: isEnabled,
overrideAccess: isEnabled,
locale: searchParams.locale || 'ru',
})
const post = result.docs[0]
if (!post) notFound()
return (
<>
{isEnabled && <LivePreviewListener initialData={post} />}
<Article post={post} />
</>
)
} // app/(frontend)/posts/[slug]/LivePreviewListener.tsx
'use client'
import { useLivePreview } from '@payloadcms/live-preview-react'
export const LivePreviewListener = ({ initialData }) => {
const { data } = useLivePreview({
initialData,
serverURL: process.env.NEXT_PUBLIC_SERVER_URL!,
depth: 2,
})
if (typeof document !== 'undefined' && data.title) {
document.title = data.title
}
return null
} // app/api/draft/route.ts
import { draftMode } from 'next/headers'
export async function GET(req: NextRequest) {
const secret = req.nextUrl.searchParams.get('secret')
if (secret !== process.env.PAYLOAD_DRAFT_SECRET) {
return NextResponse.json({ error: 'Invalid token' }, { status: 401 })
}
draftMode().enable()
// редирект на страницу превью
return NextResponse.redirect(new URL(`/posts/${req.nextUrl.searchParams.get('slug')}`, req.url))
} Какие брейкпоинты оптимальны для Live Preview?
Мы рекомендуем три базовых брейкпоинта, покрывающих большинство устройств. Настройка проста: укажите метку, ширину и высоту. Редактор может переключаться между ними прямо в админке.
| Устройство | Ширина | Высота |
|---|---|---|
| Mobile | 375 | 667 |
| Tablet | 768 | 1024 |
| Desktop | 1440 | 900 |
Для нестандартных разрешений (например, 1920×1080) добавьте кастомные брейкпоинты. Это особенно полезно для сайтов с фиксированной вёрсткой. В одном из проектов мы настраивали превью для телевизионных панелей с разрешением 3840×2160 — потребовался дополнительный breakpoint.
Типичные ошибки при внедрении Live Preview
- Несовпадение URL: если админка формирует URL на основе одного шаблона, а фронтенд использует другой — редактор видит 404. Проверьте генерацию URL для каждой коллекции.
- Отсутствие CORS-заголовков: iframe не загрузится без заголовка Content-Security-Policy. Настройте сервер на разрешение iframe с админки.
- Hydration mismatch: если initialData не совпадает с данными на сервере — возникает ошибка React. Убедитесь, что useLivePreview получает актуальный черновик. Особенно это важно при использовании React Server Components.
Мы диагностируем такие проблемы за пару часов. Получите консультацию по вашему проекту — поможем настроить Live Preview правильно.
Процесс настройки под ключ
- Аналитика — определяем типы контента и структуру URL.
- Конфигурация — настраиваем брейкпоинты и URL-генераторы для коллекций.
- Интеграция — подключаем useLivePreview на фронтенде и настраиваем Draft Mode.
- Тестирование — проверяем работу для всех типов контента и устройств.
- Деплой — выкатываем изменения в продакшен.
Что входит в работу
- Настройка Live Preview для 2–5 типов контента.
- Определение брейкпоинтов (мобильные и десктопные).
- Интеграция с существующим фронтендом (Next.js).
- Написание документации по использованию.
- Обучение редакторов работе с превью.
- Поддержка в течение 1 месяца после внедрения.
Ориентировочные сроки
От 1 до 3 дней в зависимости от сложности проекта. Стоимость рассчитывается индивидуально после оценки объёма работ.
Мы работаем с Payload CMS более 5 лет, реализовали 10+ проектов с headless архитектурой. Имеем опыт настройки Live Preview для интернет-магазинов, блогов и корпоративных сайтов. Гарантируем стабильную работу после внедрения. Свяжитесь с нами для обсуждения деталей.
Исходный код Live Preview доступен на GitHub. Обязательно изучите документацию перед настройкой.







