Sari la conținut

Drupal Headless cu Next.js: arhitectură decoupled pentru performanță maximă 2026

· 14 min lectură· Digital Rocket

Drupal headless cu Next.js este arhitectura care combină cel mai puternic CMS enterprise din lume (Drupal — content modeling, permisiuni, multilingual) cu cel mai performant framework frontend (Next.js — SSG, ISR, Edge, React Server Components). Rezultatul: un site cu Core Web Vitals excelente, editorial experience matur și scalabilitate nelimitată.

Această arhitectură decoupled separă backend-ul (Drupal servește conținut prin API) de frontend (Next.js consumă API-ul și generează pagini statice sau server-rendered). Spre deosebire de un Drupal monolitic care generează HTML pe server PHP, frontend-ul Next.js poate fi servit de pe CDN edge cu TTFB sub 100ms — o diferență masivă de performanță.

Context 2026: Peste 40% din proiectele enterprise Drupal folosesc o formă de arhitectură headless/decoupled. Pachetul next-drupal (v2.0.1, menținut de Chapter Three) oferă integrare out-of-the-box: client JSON:API, inline preview, autentificare și suport complet pentru Next.js 15 App Router.


Ce înseamnă Drupal headless și de ce contează?

Într-o arhitectură headless (sau decoupled), Drupal nu mai generează HTML-ul paginii. În schimb, expune conținutul prin API (JSON:API sau GraphQL), iar un frontend separat (Next.js) consumă acel API și construiește interfața.

AspectDrupal monolitic (tradițional)Drupal headless + Next.js
Generare HTMLPHP server (Drupal Twig)Next.js (SSG/SSR/ISR)
Performanță frontendDependentă de server PHPCDN edge, sub 100ms TTFB
Editorial UXComplet în Drupal adminDrupal admin + live preview
Scalabilitate frontendVertical (mai mult PHP/RAM)Horizontal (CDN, edge, serverless)
Core Web VitalsBune (cu BigPipe/caching)Excelente (static + React)
Flexibilitate frontendLimitată la TwigReact complet, orice UI
Complexitate arhitecturăSimplă (un server)Medie (2 sisteme)

Când merită headless: Proiecte unde performanța frontend, experiența utilizator custom și scalabilitatea sunt critice — eCommerce cu trafic mare, portale media, aplicații web complexe, multisite cu frontend-uri diferite pe același backend Drupal.

Când NU merită: Site-uri simple corporate cu 10-20 pagini — overhead-ul arhitectural nu se justifică. În acest caz, un Drupal monolitic sau WordPress este suficient.


Ce este JSON:API în Drupal și cum expune conținut?

JSON:API este modulul core Drupal (inclus din Drupal 8.7) care expune automat toate entitățile Drupal ca endpoints REST conformă cu specificația {json:api}. Zero configurare necesară — activezi modulul și tot conținutul devine accesibil.

Pasul 1: Activează și configurează JSON:API pe Drupal

  1. Activează modulul: drush en jsonapi (inclus în core, doar activare)
  2. Endpoint default: https://drupal.site/jsonapi — listează toate resursele disponibile
  3. Exemplu request: GET /jsonapi/node/article → returnează toate articolele cu câmpuri, relații, traduceri
  4. Filtrare: ?filter[status]=1 — doar conținut publicat
  5. Include relații: ?include=field_image,field_tags — include entități referențiate într-un singur request
  6. Sparse fieldsets: ?fields[node--article]=title,body,field_image — returnează doar câmpurile necesare

Alternativa GraphQL: Modulul contribuit GraphQL (v4.x) oferă queries custom, mai flexibile pentru frontend-uri complexe. Avantaj: un singur request pentru date imbriate. Dezavantaj: configurare manuală, curba de învățare mai mare.

APIConfigurareFlexibilitatePerformanceBest for
JSON:API (core)Zero configBună (filtru/include)Bună (cacheable)75%+ din proiecte
GraphQL (contrib)ManualăExcelentă (custom queries)Variabilă (N+1 risk)Frontend-uri complexe

Recomandare: Începe cu JSON:API — zero overhead, spec-compliant, cacheable. Treci la GraphQL doar dacă ai nevoie de queries complexe care ar necesita multiple JSON:API requests.


Cum funcționează next-drupal și ce oferă?

next-drupal este pachetul npm (menținut de Chapter Three) care conectează Next.js cu Drupal prin JSON:API. Versiunea curentă (2.0.1, decembrie 2025) suportă Next.js 15 App Router cu React Server Components.

Pasul 2: Instalează și configurează next-drupal pe frontend

Instalare:

npx create-next-app drupal-frontend
cd drupal-frontend
npm install next-drupal

Configurare client:

// lib/drupal.ts
import { DrupalClient } from "next-drupal"

export const drupal = new DrupalClient(
  process.env.NEXT_PUBLIC_DRUPAL_BASE_URL,
  {
    auth: {
      clientId: process.env.DRUPAL_CLIENT_ID,
      clientSecret: process.env.DRUPAL_CLIENT_SECRET,
    },
  }
)

Fetch conținut:

// app/blog/page.tsx
import { drupal } from "@/lib/drupal"

export default async function BlogPage() {
  const articles = await drupal.getResourceCollection("node--article", {
    params: {
      "filter[status]": 1,
      "fields[node--article]": "title,body,path,created",
      include: "field_image",
      sort: "-created",
    },
  })
  return <ArticleList articles={articles} />
}

Ce oferă next-drupal:

  • JSON:API client — type-safe, cu filtrare, include, sort, paginare
  • Inline preview — editorii Drupal văd live preview-ul paginii Next.js direct în admin
  • Draft mode — afișează conținut nepublicat prin Next.js preview API routes
  • Webform integration — formulare Drupal Webform redate ca React components
  • Authentication — OAuth 2.0 via Simple OAuth module
  • Incremental Static Regeneration — revalidare automată la publicare/editare conținut

Ce modele de arhitectură decoupled există?

ModelDescriereComplexitateBest for
Fully decoupledDrupal = API only, Next.js = tot frontend-ulMedie-mareSite-uri noi, SPA, PWA
Progressively decoupledDrupal renders page shell, React components embeddedMică-medieMigrare graduală, admin UX intact
Static site generationNext.js build-time fetch din Drupal API → HTML staticMicăBlog, docs, site-uri cu update rar
Hybrid (ISR)Static + revalidare incrementală la publicareMedieContent sites cu update frecvent

Recomandare 2026: Hybrid ISR este modelul optim pentru majoritatea proiectelor — paginile sunt pre-generate static (performanță CDN), dar se revalidează automat când editorii publică conținut nou. Zero rebuild complet, zero downtime.

Pasul 3: Configurează rendering strategy per tip de conținut

Exemplu arhitectură hybrid:

Content typeRendering strategyRevalidareMotivație
Pagini statice (About, Contact)SSG (build time)Manual/webhookSchimbări rare
Articole blogISR (revalidare 60s)La publicareContent frecvent
Pagini produsISR (revalidare 30s)La update preț/stockFreshness critică
Dashboard userSSR (server-side)Real-timeDate personalizate
Search resultsSSR + streamingReal-timeQuery-dependent
// app/blog/[slug]/page.tsx
export const revalidate = 60 // ISR: revalidare la 60 secunde

export async function generateStaticParams() {
  const articles = await drupal.getResourceCollection("node--article")
  return articles.map((article) => ({ slug: article.path.alias }))
}

Cum funcționează preview-ul pentru editori?

Una dintre cele mai mari provocări ale arhitecturii headless este editorial preview — editorii trebuie să vadă cum arată conținutul înainte de publicare. next-drupal rezolvă asta elegant:

Pasul 4: Configurează inline preview în Drupal admin

Pe Drupal:

  1. Instalează modulul Next.js (drupal/next): composer require drupal/next
  2. Configurează site entity: Admin → Configuration → Next.js Sites → Add site
  3. Setează: Base URL = https://frontend.vercel.app, Preview URL, Preview secret
  4. Instalează Simple OAuth pentru autentificare preview requests

Pe Next.js:

  1. Creează API route pentru draft mode:
// app/api/draft/route.ts
import { enableDraftMode } from "next-drupal/draft"

export async function GET(request: Request) {
  return enableDraftMode(request, drupal)
}
  1. Paginile detectează automat draft mode și afișează conținut nepublicat

Experiența editorului: Deschide un articol în Drupal admin → click Preview → vede pagina Next.js cu conținutul draft direct în iframe Drupal. Editează → salvează → preview-ul se actualizează instant.

Avantaj major: Editorii nu trebuie să învețe un tool nou — lucrează în Drupal admin ca întotdeauna, dar văd rezultatul final pe frontend-ul Next.js.


Cum gestionezi autentificarea între Drupal și Next.js?

Autentificarea este necesară pentru: preview conținut nepublicat, acces la endpoints protejate, formulare autentificate.

MetodăModul DrupalUse caseComplexitate
OAuth 2.0Simple OAuthStandard, recomandatMedie
JWTJWT AuthenticationAPI-to-API, microservicesMedie
API KeyKey AuthSimple, internalMică
Cookie-basedCoreProgressively decoupledMică

Setup OAuth 2.0 (recomandat):

  1. composer require drupal/simple_oauth
  2. Generează chei RSA: openssl genrsa -out private.key 2048 && openssl rsa -in private.key -pubkey -out public.key
  3. Configurează: Admin → Configuration → Simple OAuth → set key paths
  4. Creează Consumer: Admin → Configuration → Simple OAuth → Consumers → Add
  5. Setează grant type: client_credentials (pentru next-drupal) + authorization_code (pentru user login)
  6. Adaugă client ID și secret în .env.local Next.js

Role-based access este enforced pe Drupal server-side — indiferent ce frontend request trimite, Drupal verifică permisiunile per entitate/câmp. Aceasta înseamnă că securitatea nu depinde de frontend.


Cum se face hosting-ul pentru arhitectura decoupled?

Arhitectura decoupled necesită 2 instanțe separate de hosting:

ComponentOpțiuni hostingCost lunarBest for
Drupal backendAcquia, Pantheon, Platform.sh, LAMP VPS€30-500+PHP traditional
Next.js frontendVercel, Netlify, AWS Amplify, Node VPS€0-100+ (Vercel free tier)Edge/serverless
DatabaseManaged MySQL/MariaDB/PostgreSQLInclus sau €10-50Reliability
Media storageAWS S3, Cloudflare R2€5-50Scalabilitate

Arhitectura de hosting recomandată:

[Utilizator] → [Vercel CDN Edge] → [Next.js Serverless]
                                        ↓ (API calls)
                                   [Drupal PHP Server]
                                        ↓
                                   [MySQL Database]
                                   [S3 Media Storage]

Avantaj: Frontend-ul Next.js pe Vercel servește pagini static de pe edge (200+ locații globale), cu TTFB sub 50ms. Drupal-ul backend poate sta pe un server PHP modest — nu mai servește trafic direct, doar API calls de la Next.js la build time sau revalidare.

Cost comparison: Drupal monolitic pe server capabil de 10K vizitatori/zi: €100-200/lună. Drupal headless (backend PHP mic + Vercel Pro): €50-70/lună total, cu performanță 5-10x mai bună. Scalarea se face pe Vercel (automat), nu pe PHP.


Ce performanță câștigi cu Drupal headless + Next.js?

MetricDrupal monoliticDrupal headless + Next.jsDiferență
TTFB200-800ms (PHP render)30-80ms (CDN edge)5-10x mai rapid
LCP1.5-3.5s0.8-1.5s2x mai rapid
CLS0.05-0.150.01-0.053x mai stabil
INP100-300ms50-150ms2x mai rapid
Lighthouse score60-8590-100Consistent green
Concurrent users500-2K (depinde de PHP)100K+ (CDN/serverless)50-100x

De ce diferența e atât de mare:

  • Next.js pre-generează HTML-ul la build time sau ISR → servit de pe CDN, zero server processing
  • React Server Components (Next.js 15) reduc JavaScript-ul client-side cu 40-60%
  • Vercel Edge Runtime procesează requests în < 10ms vs PHP-ul care trebuie să booteze Drupal (50-200ms)
  • Image optimization Next.js (next/image) servește automat WebP/AVIF la dimensiunea corectă

Aceste îmbunătățiri de performanță au impact direct pe Core Web Vitals și implicit pe ranking-ul SEO — Google folosește CWV ca factor de ranking din 2021.


Care sunt provocările arhitecturii headless?

Headless nu este gratuit — vine cu trade-off-uri:

  1. Complexitate deployment — 2 sisteme de menținut, CI/CD separat pentru fiecare
  2. Preview setup — necesită configurare next-drupal + Simple OAuth + API routes
  3. Search — Drupal Search nu funcționează pe frontend; necesită Solr/Elasticsearch/Algolia separat
  4. Formulare — Drupal Webform necesită integrare custom sau next-drupal Webform support
  5. Breadcrumbs și meniuri — trebuie fetch-uite din Drupal API, nu sunt automate
  6. Multilingual routing — necesită configurare manuală pe Next.js (i18n routing + fetch per limbă)
  7. Cache invalidation — la publicare conținut, Next.js trebuie notificat să revalideze (webhook sau on-demand ISR)

Pasul 5: Configurează revalidare automată la publicare

Webhook Drupal → Next.js:

  1. Instalează Webhooks module pe Drupal: composer require drupal/webhooks
  2. Configurează webhook: la eveniment entity:node:update → POST https://frontend.vercel.app/api/revalidate
  3. Pe Next.js, creează API route:
// app/api/revalidate/route.ts
import { revalidatePath } from "next/cache"

export async function POST(request: Request) {
  const { secret, path } = await request.json()
  if (secret !== process.env.REVALIDATION_SECRET) {
    return new Response("Unauthorized", { status: 401 })
  }
  revalidatePath(path)
  return new Response("Revalidated")
}
  1. Editorul publică conținut → Drupal trimite webhook → Next.js revalidează pagina → CDN servește versiunea nouă

Rezultat: Conținut actualizat pe frontend în 1-5 secunde de la publicare în Drupal, fără rebuild complet.


Ce greșeli frecvente se fac în proiecte Drupal headless?

  1. Alegi headless pentru un site simplu — overhead-ul nu se justifică pentru 10-20 pagini
  2. Nu configurezi preview — editorii nu pot vedea cum arată conținutul, experiență slabă
  3. Fetch excesiv din API — prea multe requests la Drupal la build time, build-uri de 30+ minute
  4. Nu implementezi ISR — rebuild complet la fiecare schimbare = inacceptabil pentru content frecvent
  5. Ignori cache invalidation — conținut publicat în Drupal nu apare pe frontend ore/zile
  6. Nu setezi auth corect — endpoint-uri expuse fără autentificare, risc securitate
  7. Frontend overengineered — React state management complex când SSG simplu era suficient
  8. Nu optimizezi imagini — fetch imagini raw din Drupal în loc de next/image optimization
  9. Nu plănuiești SEO tehnic — sitemap, meta tags, structured data trebuie generate pe Next.js
  10. Nu testezi performanța real — presupun că „headless = rapid" fără a măsura Core Web Vitals

Cum se compară Drupal headless cu alte opțiuni CMS?

CMS BackendAPI TypeContent ModelingMultilingualSelf-hostedBest for
DrupalJSON:API (core) + GraphQLExcelent — entități/câmpuriNativ (4 module core)DaEnterprise, gov, complex
WordPressREST API (core)Bun — CPTs + ACFPlugin (WPML)DaBlog, corporate simplu
StrapiREST + GraphQLBun — content typesPlugin (i18n)DaStartup, prototip rapid
SanityGROQExcelent — schema customBuilt-inNu (SaaS)Media, editorial
ContentfulREST + GraphQLBun — content modelsBuilt-inNu (SaaS)Enterprise SaaS

De ce Drupal câștigă pentru enterprise headless: Content modeling cel mai matur, permisiuni granulare, multilingual nativ, self-hosted (data sovereignty), ecosistem de 20+ ani. Alternativele SaaS (Sanity, Contentful) au costuri care cresc exponențial cu volumul de conținut.

Dacă ești la început cu Next.js și vrei să înțelegi avantajele față de alte framework-uri, citește comparația Next.js vs WordPress — multe din argumentele de acolo se aplică și pentru frontend-ul unui Drupal headless.


Cum planifici un proiect Drupal headless + Next.js?

Checklist de start:

  • Definește content types și relații în Drupal (content modeling document)
  • Alege rendering strategy per content type (SSG, ISR, SSR)
  • Configurează JSON:API cu filtre și include-uri optimizate
  • Instalează next-drupal și configurează client
  • Setează OAuth 2.0 (Simple OAuth) pentru preview și draft mode
  • Configurează hosting: Drupal pe PHP server, Next.js pe Vercel
  • Implementează webhook revalidare la publicare
  • Configurează SEO on-page: meta tags, sitemap, structured data pe Next.js
  • Testează Core Web Vitals pre-launch
  • Configurează GA4 și conversion tracking pe frontend Next.js

Pentru migrarea de la Drupal 7 monolitic la Drupal 10/11 headless, consultă ghidul dedicat de migrare Drupal — acoperă tot procesul tehnic inclusiv SEO preservation.


Glosar termeni Drupal headless

  • Decoupled — arhitectură unde backend (CMS) și frontend (UI) sunt sisteme separate
  • JSON:API — specificație REST pentru API-uri, modul core Drupal
  • ISR (Incremental Static Regeneration) — revalidare individuală pagini fără rebuild complet
  • next-drupal — pachet npm de Chapter Three pentru integrare Next.js + Drupal
  • Simple OAuth — modul Drupal pentru server OAuth 2.0
  • Draft Mode — funcționalitate Next.js pentru preview conținut nepublicat
  • Webhook — HTTP callback trimis automat la un eveniment (ex: publicare nod)
  • React Server Components — componente React renderizate pe server, zero client JS
  • Edge Runtime — execuție cod pe CDN edge nodes (Vercel Edge, CloudFlare Workers)
  • Content Modeling — procesul de definire a structurii de date (entități, câmpuri, relații)

Vrei un proiect Drupal headless cu Next.js? Echipa Digital Rocket dezvoltă arhitecturi decoupled — Drupal backend cu content modeling complex, Next.js frontend pe Vercel cu Core Web Vitals excelente. De la arhitectură și dezvoltare web, până la deploy și optimizare. Contactează-ne pentru o consultanță tehnică gratuită.

Ai nevoie de ajutor cu campaniile PPC?

Echipa Digital Rocket te poate ajuta să obții rezultate mai bune din publicitatea online.

Cere o consultație gratuită