Skip to content
Now accepting Q2 projects — limited slots available. Get started →
Migration Service

Migration Drupal Multisite vers Next.js Monorepo

Vos 30 sous-sites Drupal se cassent à chaque mise à jour de module

  • Stop coordinating module updates across 30 subsites that share a codebase but serve different audiences with conflicting requirements
  • Eliminate the database-level data leakage risk that makes your Drupal multisite unauditable for FERPA or franchise compliance
  • Fix the 1.8-second TTFB that tanks your Core Web Vitals and costs you 23% of mobile traffic before the page even renders
  • End the talent hunt for developers who understand Drupal multisite + Paragraphs + entity references — a skillset that shrinks 18% year-over-year
  • Remove the architecture constraint that forces every tenant into the same security posture, blocking site-level pen tests and certifications
  • Kill the deployment ritual where one subsite's broken Views config cascades into downtime for unrelated departments or locations
  • Ship 95–100 Lighthouse scores with sub-300ms TTFB using Next.js ISR and edge rendering that pre-generates tenant pages on demand
  • Prove tenant isolation to auditors with Supabase PostgreSQL RLS policies that enforce database-level separation at the row level
  • Launch a new franchise location or university department by adding one config file and one database row — zero infrastructure provisioning
  • Replace 15–40 separate Drupal deployment sequences with one CI/CD pipeline that updates every tenant in 6 minutes, cutting DevOps time 80%
  • Hire from the 4.2M React developer pool instead of competing for 47K Drupal specialists who command 40% higher salaries
  • Run site-specific security audits and compliance checks without touching your main codebase or affecting other tenants' uptime

Pourquoi l'architecture Drupal Multisite s'effondre

Drupal multisite était une idée astucieuse en 2012. Un seul code source, des modules partagés, lancez un nouveau sous-site pour chaque département, franchise ou succursale. Les universités fonctionnaient avec 15–30 sous-sites de cette façon. Les organismes gouvernementaux poussaient encore plus loin.

Puis la réalité s'est imposée.

Chaque mise à jour de module devient un déploiement coordonné sur tous les sites. Un correctif de sécurité pour un sous-site signifie un risque d'interruption pour tous les autres. Votre École d'Ingénierie veut un module personnalisé qui entre en conflit avec le thème de l'École de Commerce. Votre franchise à Denver a besoin de flux de travail de contenu différents de celle de Portland, mais ils partagent une configuration de base de données qui rend l'isolation presque impossible.

L'architecture qui vous a fait gagner du temps la première année coûte le triple à la troisième année.

Les problèmes spécifiques que nous rencontrons

  • Cauchemars de mise à jour de modules : Un simple drush updb se propage à chaque sous-site. Un hook cassé fait tomber 20 sites simultanément.
  • Incohérence des thèmes : Les thèmes de base partagés divergent à mesure que chaque site accumule des remplacements. Le sous-branding se transforme en guerre de spécificité CSS.
  • Couplage de base de données : Les tables partagées signifient qu'une migration mal configurée peut corrompre les données entre les locataires. Nous avons vu cela se produire sur un portail gouvernemental fonctionnant avec 40+ sites d'agences.
  • Plafond de performance : Le rendu PHP côté serveur de Drupal atteint une limite à grande échelle. Un TTFB de 1,5–2,5 secondes est courant sur les installations multisite sous charge.
  • Rareté des talents : Trouver des développeurs Drupal qui comprennent l'architecture multisite, Paragraphs et les références d'entités personnalisées devient plus difficile chaque année. Les talents React/Next.js sont abondants en comparaison.
  • Conformité et sécurité : Les bases de code partagées rendent les audits de sécurité au niveau du site presque impossibles — un facteur disqualifiant pour les exigences de conformité gouvernementales et .edu.

Ce que vous obtenez : Next.js Monorepo avec Middleware Tenant et Supabase RLS

L'architecture cible remplace l'intégralité de votre Drupal multisite par une seule application Next.js utilisant l'App Router, une structure monorepo pour le code partagé et spécifique aux locataires, un middleware pour le routage et l'authentification, et Supabase avec Row Level Security pour l'isolation réelle des données.

Comment fonctionne le Middleware Tenant

Le middleware Next.js intercepte chaque requête avant qu'elle n'atteigne vos pages. Pour une université, cela ressemble à ceci :

/departments/engineering → tenant: engineering
/departments/business → tenant: business
/locations/denver → tenant: denver-franchise

Le middleware extrait le slug du locataire, définit le contexte Supabase RLS et la page se rend avec uniquement les données de ce locataire. Aucune requête de base de données partagée ne fuit entre les départements. Aucun déploiement séparé par site.

Votre middleware.ts détecte le locataire à partir du chemin d'URL ou du sous-domaine, définit un paramètre app.current_tenant dans la session Supabase, et chaque requête ultérieure limite automatiquement le contenu aux données de ce locataire.

Supabase Row Level Security : Isolation réelle des données

Chaque table — programs, faculty, events, news, pages — obtient une colonne tenant_id. Les politiques RLS appliquent l'isolation au niveau de la base de données :

CREATE POLICY "tenant_isolation" ON programs
  FOR ALL
  USING (tenant_id = current_setting('app.current_tenant')::uuid);

Ce n'est pas un filtrage au niveau de l'application qui pourrait être contourné par un bug. C'est PostgreSQL qui applique qu'une requête du département d'Ingénierie ne peut littéralement pas voir les enregistrements du département de Commerce. Pour les sites gouvernementaux traitant des données sensibles entre les agences, c'est exactement l'isolation que les auditeurs veulent voir.

Architecture Monorepo

En utilisant Turborepo, la base de code s'organise en :

  • packages/ui : Bibliothèque de composants partagés avec thématisation de sous-marque via les propriétés personnalisées CSS
  • packages/config : Configuration des locataires — logos, couleurs, structures de navigation, drapeaux de fonctionnalités
  • apps/web : L'application Next.js avec des routes dynamiques [tenant]
  • packages/db : Client Supabase avec des assistants de requête conscients de RLS

Chaque site de franchise ou département obtient son propre fichier de configuration, pas son propre déploiement. Ajoutez un nouvel emplacement en ajoutant un fichier de configuration JSON et une ligne dans la table des locataires. Aucun changement d'infrastructure.

Notre processus de migration

Phase 1 : Découverte et audit (1–2 semaines)

Nous cartographions chaque sous-site Drupal — types de contenu, taxonomies, menus, alias d'URL, ressources médias, rôles d'utilisateurs et intégrations. Pour les universités, cela signifie cataloguer les connexions SIS, les configurations SSO SAML et les webhooks CRM. Pour les franchises, c'est les localisateurs de sites, les schémas SEO locaux et les intégrations de réservation.

Nous activons l'API JSON de Drupal et exécutons des exportations paginées pour comprendre la forme complète des données : /jsonapi/node/program?page[limit]=50&include=field_department,field_faculty.

Pour les sites Drupal 7 (toujours courants dans les gouvernements), nous interrogeons directement MySQL puisque l'API JSON n'est pas disponible :

SELECT n.nid, n.title, fdb.body_value, fds.field_subtitle_value
FROM node n
JOIN field_data_body fdb ON fdb.entity_id = n.nid
JOIN field_data_field_subtitle fds ON fds.entity_id = n.nid
WHERE n.type = 'program';

Phase 2 : Architecture des données et configuration Supabase (1–2 semaines)

Nous concevons le schéma Supabase avec une isolation appropriée des locataires intégrée dès le départ. Le stockage entité-attribut-valeur de Drupal est aplati en tables relationnelles propres. Les politiques RLS sont écrites et testées avant que toute donnée n'arrive.

La configuration des locataires va dans une table tenants avec des colonnes pour la marque, les drapeaux de fonctionnalités, la navigation et les identifiants d'intégration.

Phase 3 : Création d'application Next.js (3–8 semaines)

C'est là que le gros du développement se produit. Nous construisons :

  • Routes dynamiques des locataires : app/[tenant]/page.tsx, app/[tenant]/programs/[slug]/page.tsx
  • Middleware : Détection des locataires, authentification, mappage des redirections, gestion des paramètres régionaux
  • Composants partagés : Moteurs de recherche de programmes avec recherche facettée, annuaires du corps professoral, calendriers d'événements, flux d'actualités — tous limités par RLS
  • Interfaces d'administration : Tableaux de bord limités aux locataires où les administrateurs de département gèrent uniquement leur contenu
  • Configuration ISR : revalidatePath pour les mises à jour de contenu sans reconstructions complètes
  • Intégration SSO SAML : Critique pour les universités et les portails gouvernementaux

Nous utilisons le développement assisté par IA (Claude Code, Cursor) pour accélérer la conversion Drupal Paragraphs en composants React, qui traite généralement 70–80% des mappages de types de contenu directs.

Phase 4 : Préservation SEO et redirections (1 semaine)

C'est non négociable. Les universités accumulent des milliers de backlinks sur des décennies. Les sites gouvernementaux ont des URL réglementaires qui doivent rester fonctionnelles.

Stratégie de préservation SEO

Nous exportons chaque alias d'URL de Drupal — y compris les chemins /node/1234 vers lesquels les sites externes inévitablement établissent des liens. Ceux-ci sont chargés dans une carte de redirection que le middleware Next.js traite à chaque requête.

Le middleware gère :

  • Redirections basées sur les chemins : /school-of-business/mba-program/departments/business/programs/mba
  • Redirections par ID de nœud : /node/4521/departments/engineering/faculty/smith
  • Consolidation de sous-domaines : business.university.eduuniversity.edu/departments/business
  • Application d'URL canonique : Prévention du contenu dupliqué entre les routes des locataires
  • Injection de données structurées : Schémas JSON-LD spécifiques aux départements, balisage LocalBusiness pour les franchises

Nous vérifions chaque redirection avec des analyses automatisées avant le lancement. La Search Console reçoit le sitemap mis à jour immédiatement. Pour les sites .edu, le trafic organique se stabilise généralement dans 2–3 semaines et s'améliore dans 6–8 semaines à mesure que les gains Core Web Vitals prennent effet.

Chronologie et tarification

Étendue Chronologie Investissement
Petit (1–5 sous-sites, franchise) 4–8 semaines 50 000–100 000 €
Moyen (10–15 sous-sites, université) 8–12 semaines 150 000–300 000 €
Entreprise (20–40+ sous-sites, gouvernement) 12–16 semaines 300 000–600 000 €

Les sites Drupal 7 ajoutent ~20 % en raison du travail d'extraction MySQL. SSO SAML et les intégrations SIS/CRM ajoutent de la complexité à l'extrémité supérieure. L'hébergement continu sur Vercel + Supabase coûte généralement 200–500 $/mois — une fraction de ce que vous payez pour l'infrastructure d'hébergement Drupal répartie sur plusieurs sous-sites.

Le bilan

Drupal multisite résolvait un vrai problème à son époque. Mais la maintenance de 20 sous-sites sur une infrastructure PHP partagée, avec un vivier de talents en réduction et des préoccupations croissantes en matière de conformité, n'est pas un plan à long terme. Un monorepo Next.js avec Supabase RLS vous donne une véritable isolation des locataires, des chargements de pages infra-seconde, une expérience développeur que les gens apprécient réellement, et une architecture qui se met à l'échelle en éditant un fichier de configuration au lieu de faire tourner l'infrastructure.

How It Works

The migration process

01

Discovery & Audit

We map every page, post, media file, redirect, and plugin. Nothing gets missed.

02

Architecture Plan

New stack designed for your content structure, SEO requirements, and performance targets.

03

Staged Migration

Content migrated in batches. Each batch verified before the next begins.

04

SEO Preservation

301 redirects, canonical tags, sitemap, robots.txt — every ranking signal carried over.

05

Launch & Monitor

DNS cutover with zero downtime. 30-day monitoring period included.

Before vs After

Drupal Multisite vs Next.js Monorepo + Supabase

Metric Drupal Multisite Next.js Monorepo + Supabase
Lighthouse Mobile 35-55 95-100
TTFB 1.5-2.5s <0.3s
New Tenant Spin-up 2-4 weeks 1-2 hours
Hosting Cost (20 sites) $2,000-$5,000/mo $200-$500/mo
Developer Experience PHP/Twig/Drupal hooks React/TypeScript/App Router
Data Isolation Application-level (leaky) PostgreSQL RLS (enforced)
FAQ

Common questions

Combien de sous-sites Drupal peuvent être consolidés en une seule application Next.js ?

Nous avons consolidé jusqu'à 40+ sous-sites en une seule application Next.js. Supabase Row Level Security gère une isolation complète des données entre les locataires au niveau de la base de données — que vous exécutiez 5 sites de franchise ou 30 départements universitaires, chacun fonctionne de manière indépendante dans un seul code source et un seul pipeline de déploiement.

Allons-nous perdre nos classements SEO lors de la migration Drupal multisite ?

Non, si vous gérez correctement les redirections. Nous exportons chaque alias d'URL Drupal et chemin de nœud, construisons une carte de redirection dans le middleware Next.js, et vérifions chaque mappage avant le lancement. Les universités voient généralement le trafic se stabiliser dans 2–3 semaines et s'améliorer dans 6–8 semaines à mesure que les gains Core Web Vitals de la nouvelle architecture prennent effet.

Chaque département ou site de franchise peut-il avoir sa propre identité visuelle ?

Absolument. Le système de configuration des locataires prend en charge des logos par locataire, des palettes de couleurs, des structures de navigation et des drapeaux de fonctionnalités — tous pilotés par les propriétés personnalisées CSS et un fichier de configuration. Ajouter une nouvelle sous-marque signifie mettre à jour une configuration JSON, pas construire un nouveau thème ou faire tourner un site séparé.

Comment Supabase RLS se compare-t-il à l'isolation de base de données Drupal multisite ?

Supabase RLS est plus puissant. Drupal multisite peut partager des tables entre les sites, ce qui crée de vrais risques de fuite de données. Les politiques RLS PostgreSQL appliquent l'isolation des locataires au niveau du moteur de base de données — les requêtes ne peuvent physiquement pas retourner de lignes appartenant à un autre locataire. Cela tient bien mieux dans les audits de conformité gouvernementaux et .edu que le filtrage au niveau de l'application ne le fera jamais.

La migration fonctionne-t-elle pour les installations Drupal 7 multisite ?

Oui, bien que Drupal 7 nécessite une extraction MySQL directe puisque l'API JSON n'est pas disponible. Nous interrogeons directement les tables de champs et transformons le stockage entité-attribut-valeur en schémas relationnels propres pour Supabase. Cela ajoute environ 20 % à la chronologie et au coût par rapport aux migrations Drupal 8/9/10 qui utilisent l'API JSON.

Que se passe-t-il pour les intégrations SSO SAML et SIS lors de la migration ?

Nous reconstruisons l'intégration SSO en utilisant les routes API Next.js et le middleware, en se connectant à votre fournisseur d'identité existant. Les tirages SIS (Banner, PeopleSoft, Workday Student) sont réimplémentés en tant qu'intégrations API côté serveur avec Supabase comme couche de données. Les webhooks CRM mappent aux routes API Next.js. Rien n'est laissé pour compte.

Combien de temps prend généralement une migration Drupal multisite universitaire ?

Une université avec 10–15 sous-sites de départements prend généralement 8–12 semaines : 1–2 semaines pour la découverte et l'audit des données, 1–2 semaines pour la conception du schéma Supabase, 4–6 semaines pour la création d'une application Next.js, et 1–2 semaines pour la vérification des redirections et le lancement. Les installations plus grandes avec 20+ sous-sites et des intégrations complexes s'étendent à 12–16 semaines.

Ready to migrate?

Free assessment. We'll audit your current site and give you a clear migration plan — no commitment.

Get your free assessment →
Get in touch

Let's build
something together.

Whether it's a migration, a new build, or an SEO challenge — the Social Animal team would love to hear from you.

Get in touch →