Розробка фронтенду на 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
    Розробка веб-сайту для компанії ФІКСПЕР
    943
  • 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
    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 як фронтенд поверх Bitrix-бекенду. Bitrix керує контентом і бізнес-логікою, Next.js займається рендерингом. Це не заміна Bitrix, а розподіл відповідальності: Bitrix — надійний бекенд для e-commerce (замовлення, каталог, CRM, оплати), Next.js — сучасний фронтенд з SSR, SSG, ISR та відмінними Core Web Vitals. Наш досвід — 10+ років розробки на Bitrix та 50+ успішних проєктів. Оцінимо ваш проєкт за 1 день.

Архітектура headless Bitrix + Next.js

Bitrix виступає в ролі API-сервера. На його стороні розробляються REST-контролери через \Bitrix\Main\Engine\Controller або кастомні endpoint'и в /local/ajax/. Next.js працює на окремому сервері (Node.js), споживає Bitrix 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-шаблони Bitrix?

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

API на стороні Bitrix

Створення чистого REST API поверх Bitrix без зайвих залежностей:

// /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 має повертати нормалізовані дані, а не сирі Bitrix-структури зі сміттєвими полями ~PREVIEW_TEXT та IBLOCK_ELEMENT_ID. Докладніше про REST API Bitrix читайте в офіційній документації.

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 сек), Bitrix-шаблон важкий, повільний на мобільних.

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

Реалізація:

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

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

  3. Зображення: next/image з автоматичною оптимізацією, WebP, responsive srcset. Хостинг зображень через CDN (окремо від Bitrix).

  4. Пошук: Meilisearch з індексом з Bitrix, React-компонент instant search.

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

Метрика Bitrix-шаблон 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 Bitrix, 3 місяці на Next.js фронтенд. Паралельно працював старий шаблон, перемикання — по DNS за хвилину.

Як інтегрувати кошик між Next.js та Bitrix?

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

Наші інженери гарантують, що кошик не загубиться: досвід десятків проєктів підтверджує надійність цієї схеми.

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

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

Nginx як reverse proxy перед Next.js та Bitrix:

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

# REST API → Bitrix
location /api/bitrix/ {
    proxy_pass http://bitrix/local/ajax/;
}

# Адміністративна частина → Bitrix
location /bitrix/ {
    proxy_pass http://bitrix;
}

Що входить в роботу

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

Терміни орієнтовно

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

Хочете покращити Core Web Vitals та SEO? Отримайте консультацію безкоштовно. Замовте аудит — ми підготуємо пропозицію під ключ.

Чому верстка сайтів на 1С-Бітрікс вимагає професіоналізму?

Відкриваєте template.php у попереднього підрядника — а там SQL-запити, бізнес-логіка та inline-стилі в одному файлі. На кожному другому проєкті, який ми беремо на підтримку, код шаблонів виглядає як звалище: кеш не працює, додати нову фічу — переписуй все. Виправлення такої верстки може коштувати чимало, а втрачений виторг через зламаний кошик у пік сезону може сягати десятків тисяч гривень.

Ми — команда сертифікованих розробників 1С-Бітрікс із десятирічним досвідом. За нашими плечима понад 50 успішних проектів верстки та підтримки. Наш підхід строго розділяє: логіка — в 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% — в 1.4 раза швидше порівняно з повним скиданням.

Реальний кейс. Наш клієнт скаржився — на сторінці каталогу у всіх один кошик. Виявилося, попередній розробник вивів $_SESSION['BASKET'] всередині template.php компонента catalog.section. Компонент кешувався на годину — кошик застиг. Перенесли виведення в component_epilog.php, налаштували тегований кеш на sale.basket.basket.line. Сторінка не втратила у швидкості, кошик став актуальним. Збитки від несправного кошика в пік сезону могли бути значними, а вартість виправлення — помірною.

CSS-підходи: BEM, Tailwind або гібрид?

Для великих проєктів (30+ шаблонів) використовуємо BEM.product-card__price, .product-card--featured. Стилі ізольовані, конфліктів немає. У Бітрікс обгортки з класами 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+ років.

Типові помилки при верстці, які ми виправляємо - Inline-стилі в шаблонах — ламають кешування та об'єднання CSS. - Відсутність `component_epilog.php` — динамічний контент застигає. - Неправильне підключення скриптів через `