Разработка фронтенда на Next.js для 1С-Битрикс: headless-архитектура

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка фронтенда на Next.js для 1С-Битрикс: headless-архитектура
Средний
~1-2 недели
Часто задаваемые вопросы

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

Этапы разработки

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    944
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    829
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1074

Bitrix-монолит с PHP-шаблонами решает 80% задач. Оставшиеся 20% — высоконагруженные страницы, SEO для динамичного контента, PWA, персонализация с edge computing — требуют другой архитектуры. Мы предлагаем headless-подход: Next.js как фронтенд поверх Битрикс-бэкенда. Битрикс управляет контентом и бизнес-логикой, Next.js занимается рендерингом. Это не замена Битрикс, а разделение ответственности: Битрикс — надёжный бэкенд для e-commerce (заказы, каталог, CRM, оплаты), Next.js — современный фронтенд с SSR, SSG, ISR и отличными Core Web Vitals. Наш опыт — 10+ лет разработки на Битрикс и 50+ успешных проектов. Оценим ваш проект за 1 день.

Архитектура headless Битрикс + Next.js

Битрикс выступает в роли API-сервера. На его стороне разрабатываются REST-контроллеры через \Bitrix\Main\Engine\Controller или кастомные endpoint'ы в /local/ajax/. Next.js работает на отдельном сервере (Node.js), потребляет Битрикс API и рендерит страницы. Между ними — API-слой.

Browser → Next.js (SSR/SSG) → Bitrix REST API → DB
                            ↓
                       Redis Cache

Типичная схема запросов:

// next.js: getStaticProps для страницы категории
export async function getStaticProps({ params }) {
  const [category, products] = await Promise.all([
    fetchBitrix(`/api/catalog/category/${params.slug}`),
    fetchBitrix(`/api/catalog/products?section=${params.slug}&limit=24`),
  ]);

  return {
    props:      { category, products },
    revalidate: 300, // ISR: перегенерация через 5 минут
  };
}

Incremental Static Regeneration (ISR) — ключевая фича Next.js для e-commerce: страницы генерируются статически при первом запросе и перегенерируются в фоне по расписанию. Это даёт скорость статики при актуальности динамического контента.

Почему Next.js лучше традиционных PHP-шаблонов Битрикс?

Сравним метрики: Next.js обеспечивает LCP до 1.4 сек против 4.8 сек у стандартного шаблона, а PageSpeed Mobile поднимается с 34 до 82 баллов. Традиционный шаблон грузится дольше из-за монолитной архитектуры, тогда как Next.js с ISR отдаёт страницу из кеша за миллисекунды. ISR — это разница между потерянным клиентом и конверсией.

API на стороне Битрикс

Создание чистого REST API поверх Битрикс без лишних зависимостей:

// /local/php_interface/include/api/catalog/ProductsController.php
class ProductsController extends \Bitrix\Main\Engine\Controller
{
    public function getListAction(
        string $section = '',
        int    $page    = 1,
        int    $limit   = 24,
        string $sort    = 'NAME',
        string $order   = 'ASC'
    ): array {
        $filter = ['ACTIVE' => 'Y', 'IBLOCK_ID' => CATALOG_IBLOCK_ID];
        if ($section) {
            $sectionId = $this->getSectionIdBySlug($section);
            $filter['SECTION_ID'] = $sectionId;
            $filter['INCLUDE_SUBSECTIONS'] = 'Y';
        }

        $result = \CIBlockElement::GetList(
            [$sort => $order],
            $filter,
            false,
            ['nPageSize' => $limit, 'iNumPage' => $page],
            ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE',
             'PROPERTY_BRAND', 'CATALOG_PRICE_1']
        );

        $products = [];
        while ($el = $result->GetNextElement()) {
            $products[] = $this->formatProduct($el);
        }

        return [
            'items' => $products,
            'total' => (int)$result->SelectedRowsCount(),
            'pages' => ceil($result->SelectedRowsCount() / $limit),
        ];
    }
}

API должен возвращать нормализованные данные, а не сырые Битрикс-структуры с мусорными полями ~PREVIEW_TEXT и IBLOCK_ELEMENT_ID. Подробнее о REST API Битрикс читайте в официальной документации.

SSR для SEO-критичных страниц

Карточки товаров, страницы категорий, статьи блога — кандидаты на SSG/ISR. Корзина, чекаут, личный кабинет — CSR (рендеринг на клиенте), SEO не нужен.

// Динамическая генерация путей для товаров
export async function getStaticPaths() {
  const products = await fetchBitrix('/api/catalog/products/slugs');

  return {
    paths:    products.map(p => ({ params: { slug: p.slug } })),
    fallback: 'blocking', // новые товары рендерятся при первом запросе
  };
}

fallback: 'blocking' позволяет обрабатывать новые товары без полной перегенерации сайта.

Кейс из нашей практики: Next.js фронтенд для fashion-ритейлера

Сеть магазинов одежды, онлайн-каталог ~35 000 SKU, сезонное пополнение. Проблема: Core Web Vitals LCP = 4.8 сек (цель < 2.5 сек), Битрикс-шаблон тяжёлый, медленный на мобильных.

Битрикс оставили как backend: управление товарами, заказы, CRM, 1С-интеграция. Разработали Next.js фронтенд.

Реализация:

  1. API Битрикс: контроллеры для товаров, категорий, брендов, поиска, корзины (SSR-совместимый через cookie-сессию).

  2. Next.js App Router (Next.js 14): Server Components для SEO-страниц, Client Components для интерактивных элементов (фильтр, корзина, авторизация).

  3. Изображения: next/image с автоматической оптимизацией, WebP, responsive srcset. Хостинг изображений через CDN (отдельно от Битрикс).

  4. Поиск: Meilisearch с индексом из Битрикс, React-компонент instant search.

  5. Корзина: state в Zustand + синхронизация с Битрикс-корзиной через REST API при каждом изменении.

Метрика Битрикс-шаблон Next.js
LCP 4.8 сек 1.4 сек
CLS 0.18 0.02
FID / INP 280 мс 45 мс
PageSpeed Mobile 34 82
TTFB (категория) 820 мс 180 мс (ISR кеш)

Переход занял 4 месяца: 1 месяц на API Битрикс, 3 месяца на Next.js фронтенд. Параллельно работал старый шаблон, переключение — по DNS в минуту.

Как интегрировать корзину между Next.js и Битрикс?

Корзина — сложный случай при headless: она должна работать до авторизации, синхронизироваться с Битрикс при авторизации, не теряться при переходе между страницами. Решение: guest_token в cookie, корзина хранится в Битрикс по этому токену. При авторизации — merge гостевой корзины с пользовательской. React-состояние — только UI-зеркало серверной корзины.

Наши инженеры гарантируют, что корзина не потеряется: опыт десятков проектов подтверждает надёжность этой схемы.

Деплой и инфраструктура

Next.js — Node.js-приложение, требует отдельного процесса. Варианты: Vercel (наиболее просто, но данные уходят за рубеж), VPS/dedicated с PM2 + nginx, Docker-контейнер.

Nginx как reverse proxy перед Next.js и Битрикс:

# Статика и SEO-страницы → Next.js
location / {
    proxy_pass http://nextjs:3000;
}

# REST API → Битрикс
location /api/bitrix/ {
    proxy_pass http://bitrix/local/ajax/;
}

# Административная часть → Битрикс
location /bitrix/ {
    proxy_pass http://bitrix;
}

Что входит в работу

  • Аудит текущего Битрикс-фронтенда и подготовка архитектуры headless
  • Проектирование REST API: эндпоинты, схема данных, кеширование
  • Разработка чистых REST-контроллеров в Битрикс
  • Разработка Next.js приложения: роутинг, SSG/ISR/SSR, компоненты
  • Интеграция корзины, авторизации, чекаута с Битрикс
  • Настройка CDN для изображений, кеширование на уровне nginx
  • Деплой, мониторинг, CI/CD
  • Документация и обучение вашей команды

Сроки ориентировочно

MVP (каталог + карточка + поиск) — 2–3 месяца. Полный фронтенд с корзиной, чекаутом, кабинетом — 4–6 месяцев. Стоимость рассчитывается индивидуально — свяжитесь для оценки вашего проекта.

Хотите улучшить Core Web Vitals и SEO? Получите консультацию бесплатно. Закажите аудит — мы подготовим предложение под ключ.

Почему вёрстка сайтов на 1С-Битрикс требует профессионализма?

Открываете template.php у предыдущего подрядчика — а там SQL-запросы, бизнес-логика и inline-стили в одном файле. На каждом втором проекте, который берём на поддержку, код шаблонов выглядит как свалка: кэш не работает, добавить новую фичу — переписывай всё. Средняя стоимость исправления такой вёрстки сайтов — 15 000–30 000 рублей только на отладку, а потерянная выручка из-за сломанной корзины в пик сезона может уходить в миллионы. Наша команда с 10-летним опытом строго разделяет: логика — в result_modifier.php или component_epilog.php, представление — в template.php. Никакого CIBlockElement::GetList в шаблоне. Это сокращает время правок на 30–40% и исключает типовые ошибки, которые ломают кэш. Аналогичную проблему исправляли клиенту, который месяц не мог обновить блок «Акции» — после настройки тегированного кэша правки вставали за минуту, а не за день.

Как правильно организовать шаблоны компонентов?

Кастомный шаблон — это не один файл, а структура из пяти-шести файлов:

  • template.php — только HTML и вывод $arResult
  • result_modifier.php — подготовка данных, дополнительные выборки
  • component_epilog.php — код после кэширования (счётчики, динамика)
  • style.css и script.js — подключаются через Asset::getInstance()->addCss() и addJs() (не через <link> — иначе ломается объединение)
  • .parameters.php — параметры визуального редактора

Пример структуры для каталога:

local/templates/your_template/components/bitrix/catalog.section/.default/
├── template.php
├── result_modifier.php
├── component_epilog.php
├── style.css
├── script.js
└── .parameters.php

Типовые шаблоны, которые верстаем под ключ:

Компонент Что делаем
catalog.section и catalog.element Переключение вида (плитка/список/таблица), lazy load для изображений, srcset для ретины
sale.basket.basket AJAX-обновление без перезагрузки, мини-корзина через sale.basket.basket.line
menu Мегаменю с кэшированием по разделам, отложенная загрузка подменю
search.title Автоподсказки с дебаунсом 300 мс, превью товаров в дропдауне
breadcrumb Микроразметка BreadcrumbList по Schema.org

Кэширование: почему оно ломается и как чиним?

Компонентное кэширование в Битрикс ломается одной ошибкой: вывели имя пользователя внутри кэшированного каталога — все видят одно имя. Решение — component_epilog.php для динамических вставок.

Tagged cache ($this->setResultCacheKeys, CIBlock::clearIblockTagCache) настраиваем обязательно. Изменили товар — очищается кэш только этого товара, а не всего раздела. На проекте с 50 000 товаров это даёт прирост скорости на 40% по сравнению с полным сбросом.

Реальный кейс. Клиент жаловался — на странице каталога у всех одна корзина. Оказалось, предыдущий разработчик вывел $_SESSION['BASKET'] внутри template.php компонента catalog.section. Компонент кэшировался на час — корзина застыла. Перенесли вывод в component_epilog.php, настроили тегированный кэш на sale.basket.basket.line. Страница не потеряла в скорости, корзина стала актуальной. Ущерб от неработающей корзины в пик сезона мог составлять миллионы, а цена исправления — в пределах 15 000 рублей. Другой клиент потерял 200 000 рублей за неделю из-за некорректного кэша формы заказа — мы вернули работоспособность за два дня.

Официальная документация Битрикс рекомендует использовать component_epilog.php для динамических вставок — подробнее в руководстве.

CSS-подходы: BEM, Tailwind или гибрид?

Для больших проектов (30+ шаблонов) используем BEM — .product-card__price, .product-card--featured. Стили изолированы, конфликтов нет. Подробнее о BEM. В Битрикс обёртки с классами bx-component не трогаем — оборачиваем свой BEM-блок внутри.

Для типовых задач (лендинги, админки) берём Tailwind 3+ с PurgeCSS — итоговый CSS 10–30 КБ вместо сотен. Дизайн-токены в tailwind.config.js фиксируют цвета, шрифты, отступы в одном месте.

На большинстве проектов применяем гибрид: BEM для структурных компонентов (каталог, карточка, чекаут), Tailwind для утилитарных вещей (отступы, flex-раскладки). Границу оговариваем с командой заранее.

Как мы достигаем Core Web Vitals?

Critical CSS — выделяем стили первого экрана через пакет critical, инлайним в <head>. Остальное грузится асинхронно через media="print" onload="this.media='all'". LCP на мобильных сокращается на 1–1.5 секунды.

Изображения — главный тормоз. Используем <picture> с WebP и JPEG-фолбэком. loading="lazy" для всего ниже первого экрана. width и height явно прописаны — CLS = 0. Обработчик в urlrewrite.php генерирует WebP на лету.

Минификация и сжатие. CSS и JS через Vite или встроенное объединение Битрикс. Brotli на nginx (brotli_comp_level 6) — на 15–20% эффективнее gzip. Кэширование статики: expires 1y + версионирование через query string.

Хотите получить подобные показатели? Свяжитесь с нами — сделаем аудит вашего проекта и предложим конкретные шаги.

Что входит в услугу вёрстки сайтов на 1С-Битрикс?

После заказа вёрстки шаблона или адаптации готового решения передаём:

  • Исходники шаблонов компонентов с разделением на template.php, result_modifier.php, epilog
  • CSS и JS, подключённые через Asset — без инлайн-стилей
  • Настроенное кэширование с тегами
  • Документацию по структуре и параметрам
  • Доступ к Git-репозиторию с историей изменений
  • Обучение вашего разработчика: как править шаблон без потери обновляемости

Гарантируем соответствие Core Web Vitals и кроссбраузерность. Закрепляем инженера с опытом 10+ лет — получите консультацию по вашему проекту до начала работ.

Процесс работы:

  1. Анализ макетов и текущего проекта — выявляем компоненты для переработки
  2. Проектирование структуры — разбиваем страницу на BEM-блоки
  3. Реализация — верстаем шаблоны по схеме: template, result_modifier, epilog, CSS, JS
  4. Тестирование — проверяем кэш, адаптивность, Core Web Vitals, кроссбраузерность
  5. Деплой — стейджинг, приёмка, продакшен

На каждом этапе вы получаете промежуточный результат и можете внести правки. Свяжитесь с нами — оценим проект за 1–2 дня после получения макетов.

Сроки

Объём работ Срок
Лендинг (5–7 экранов) 3–5 дней
Корпоративный сайт (15–20 уникальных страниц) 2–4 недели
Интернет-магазин (30+ шаблонов компонентов) 4–8 недель
Кастомизация готового решения Маркетплейса 1–3 недели
Редизайн существующего проекта 3–6 недель

После анализа даём разбивку по компонентам — что переиспользуется, что верстается с нуля. Закажите предварительную консультацию — посчитаем сроки и бюджет индивидуально.