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

Migration de Drupal University vers Next.js

Votre dernière migration CMS. C'est promis.

  • Every major Drupal version upgrade (D7→D8, D9→D10, D10→D11) is essentially a forced migration costing $30–60K.
  • Department subsites on Drupal multisite create duplicated infrastructure and inconsistent module management across 15–30 installations.
  • Drupal Views generate full page loads on every filter interaction, making program finders and faculty directories sluggish on mobile.
  • Contributed modules break on major version upgrades, requiring replacement or custom patches for education-specific functionality.
  • Drupal's permission system is application-level, not database-level, making multi-department content governance fragile and prone to misconfiguration.
  • Supabase Row Level Security enforces department content boundaries at the database level — structurally impossible to bypass.
  • Program finders and faculty directories return filtered results in under 100ms with no full page reload via Next.js server components.
  • Native SAML 2.0 support in Supabase Auth connects directly to university identity providers (Shibboleth, ADFS, Okta) without custom code.
  • One Next.js application replaces 15–30 department subsites with /departments/[slug] routes and department-scoped admin access.
  • No forced CMS migrations — Next.js and Supabase update incrementally without breaking changes that require full rebuilds.

Harvard utilise Drupal. Tout comme Yale, Princeton, Stanford et Duke. Tout comme votre université. Vous connaissez le cycle de mise à jour : D7 à D8 était une refonte complète. D8 à D9 a nécessité un travail important. D9 à D10 a cassé les modules contributeurs. D10 à D11 arrive fin 2026 avec Symfony 7 et Twig 4. Pour le coût d'une seule migration Drupal supplémentaire, votre université peut passer à Next.js + Supabase et ne jamais faire face à une migration CMS forcée à nouveau.

Ceci est notre guide de migration spécifique à l'éducation. Pour un aperçu général, consultez notre page de migration Drupal. Cette page couvre ce qui rend les installations Drupal universitaires uniquement complexes — et comment nous gérons chaque partie.

L'écosystème Drupal de l'enseignement supérieur

Les installations Drupal universitaires ne sont pas comme les sites d'entreprise. Ce sont des systèmes vastes et multi-parties prenantes — types de contenu spécifiques à l'éducation, taxonomies profondément imbriquées, sous-sites de département avec des éditeurs indépendants, intégrations avec les systèmes d'information des étudiants. Une approche de migration générique échouera.

Types de contenu spécifiques à l'éducation

Votre instance Drupal a probablement 10+ types de contenu personnalisés construits pour l'enseignement supérieur :

  • Programme — informations sur les diplômes, certificats et cours avec crédits, frais de scolarité, mode de prestation, perspectives de carrière
  • Professeur — profils avec intérêts de recherche, publications, cours enseignés, heures de bureau
  • Département — structure hiérarchique (École d'ingénierie → Département d'informatique → Laboratoire d'IA)
  • Événement — calendrier académique, événements publics, remise des diplômes, événements spécifiques au département
  • Actualités — actualités universitaires, actualités départementales, annonces de recherche, communiqués de presse
  • Page — des centaines de pages de contenu de base (à propos, admissions, aide financière)
  • Publication — documents de recherche, rapports, documents politiques avec liens DOI
  • Offre d'emploi — postes de professeur, postes de personnel, emploi étudiant
  • Profil — entrées d'annuaire du personnel pour les employés non-professeurs
  • Témoignage — histoires de réussite d'étudiants et d'anciens élèves

Chacun correspond à une table Supabase avec une conception relationnelle appropriée. Les programmes obtiennent degree_level, subject_area_id, delivery_mode, tuition et career_outcomes en JSONB. Les professeurs obtiennent une clé étrangère department_id, publications en JSONB et research_areas en tant que tableau. Les départements utilisent parent_id pour la hiérarchie auto-référencée.

Ce n'est pas un simple vidage de contenu. C'est un schéma relationnel approprié qui rend vos données interrogeables d'une façon que les vues Drupal n'ont jamais pu faire.

Vues Drupal → Composants serveur Next.js

Les sites universitaires s'appuient fortement sur les vues Drupal pour les listes filtrables. Chacune d'elles devient une page Next.js plus rapide et plus flexible :

  • Programme Finder — Vue Drupal filtrant par sujet, niveau de diplôme, campus → page Next.js /programs avec requête Supabase + état de filtre basé sur URL. Les étudiants potentiels filtrent par domaine d'intérêt et obtiennent des résultats instantanés.
  • Annuaire des professeurs — Vue Drupal filtrant par département, domaine de recherche → page Next.js /faculty avec recherche en texte intégral et filtrage des départements contre Supabase.
  • Calendrier des événements — Vue Drupal filtrant par date, département, type → page Next.js /events avec filtrage par plage de dates et export iCal.
  • Fil d'actualités — Vue Drupal filtrant par département, catégorie → page Next.js /news avec ISR afin que les nouveaux articles apparaissent dans les 60 secondes suivant la publication.
  • Tableau des offres d'emploi — Vue Drupal filtrant par département, type d'emploi → page Next.js /careers tirant des données de Supabase avec logique de date de clôture.

La différence : les vues Drupal génèrent des chargements de page complets à chaque changement de filtre. Les composants serveur Next.js avec Supabase retournent des résultats filtrés en moins de 100 ms sans rechargement de page complet.

Taxonomie Drupal → Relations Supabase

Les vocabulaires de taxonomie Drupal correspondent à des tables relationnelles appropriées :

  • Vocabulaire Subject Areas → table subject_areas, FK programs.subject_area_id
  • Vocabulaire Departments → table departments avec parent_id pour la hiérarchie
  • Vocabulaire Campus Locations → table campuses, FK programs.campus_id
  • Vocabulaire Research Areas → table research_areas + table de jointure faculty_research_areas
  • Vocabulaire Event Types → colonne énumérée event_type ou table de recherche

Les champs Entity Reference de Drupal deviennent des clés étrangères appropriées. Les relations plusieurs-à-plusieurs (professeurs ↔ domaines de recherche) obtiennent des tables de jointure. Le modèle de données devient explicite plutôt que caché derrière l'API d'entité de Drupal.

Paragraphes + Layout Builder → Blocs de composants

Les paragraphes Drupal sont le plus gros point douloureux des migrations universitaires. Vos éditeurs ont construit des pages en utilisant des dizaines de types de paragraphes : bannières de héros, sections de statistiques, mises en avant de professeurs, grilles de cartes de programmes, accordéons de FAQ, vidéos intégrées, blocs d'appel à l'action.

Nous les stockons en JSONB dans la colonne pages.blocks de Supabase :

[
  {"type": "hero", "title": "...", "subtitle": "...", "image": "...", "cta_url": "..."},
  {"type": "stats", "items": [{"number": "15:1", "label": "Ratio étudiants-professeurs"}]},
  {"type": "program_cards", "program_ids": [12, 45, 78]},
  {"type": "faculty_spotlight", "faculty_id": 234}
]

Un registre de composants Next.js rend chaque type de bloc. Les éditeurs gèrent les blocs via Payload CMS ou une interface d'administration personnalisée. Même flexibilité que les paragraphes, rendu plus rapide et pas d'attente de reconstruction du cache Drupal.

Sous-sites de département multi-sites

Les grandes universités exécutent 15–30 sous-sites Drupal — École de commerce, École d'ingénierie, Collège des arts et des sciences — chacun sur des installations Drupal séparées ou un multisite Drupal. C'est un cauchemar opérationnel : mises à jour de modules sur 20 sites, thématisation incohérente, infrastructure dupliquée.

Nous consolidons tout cela dans une application Next.js avec des routes /departments/[slug]. Chaque département obtient sa propre section avec identité de sous-marque (couleurs d'accent personnalisées dans le système de conception universitaire). Les pages, actualités, événements et professeurs du département sont tous limités à leur département.

La clé : Sécurité au niveau des lignes Supabase (RLS). Les éditeurs du département ne voient et ne modifient que le contenu où department_id correspond à leur département assigné. L'éditeur web de l'École de commerce ne peut pas accidentellement modifier le contenu de l'ingénierie. RLS applique cela au niveau de la base de données — pas dans le code d'application, pas dans les permissions CMS. C'est structurel.

Portail étudiant et intégration SSO

Votre site Drupal actuel authentifie les étudiants via CAS ou Shibboleth, se connectant à votre fournisseur d'identité (ADFS, Okta ou un Shibboleth IdP géré par l'université). Les étudiants voient du contenu personnalisé : leurs exigences de programme, les informations de conseiller, les ressources spécifiques au département.

Supabase Auth prend en charge SAML 2.0 nativement. Nous configurons le fournisseur d'identité de votre université comme un fournisseur SAML dans Supabase. Le flux :

  1. L'étudiant clique sur « Se connecter » sur le site Next.js
  2. Redirection vers le IdP universitaire (Shibboleth/ADFS/Okta)
  3. L'étudiant s'authentifie avec ses identifiants universitaires
  4. Le IdP envoie l'assertion SAML à Supabase
  5. Supabase émet un JWT avec le rôle et le département de l'étudiant
  6. Les politiques RLS contrôlent les données qu'il voit

Pas de code d'authentification personnalisé. Pas de maux de tête de gestion de session. Le JWT porte des revendications, et Supabase RLS les lit.

Migration des rôles utilisateur

Les rôles Drupal dans les universités — Site Admin, Web Editor, Department Editor, Faculty, Student, Alumni — correspondent à une table user_roles dans Supabase avec des attributions de rôle par utilisateur. Les politiques RLS font référence à ces rôles :

  • Site Admin : lecture/écriture complète sur toutes les tables
  • Department Editor : lecture/écriture où department_id = auth.jwt()->department_id
  • Faculty : mettre à jour son propre profil, ajouter des publications
  • Student : lecture seule sur le contenu public, données du tableau de bord personnalisé

La migration d'éducation en 7 phases

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

Crawl Screaming Frog de chaque URL. Analyse du trafic Google Search Console pour identifier vos pages de plus haute valeur. Inventaire des types de contenu sur tous les sous-sites. Audit des intégrations : qu'est-ce qui se connecte à Drupal ? Banner ? PeopleSoft ? Canvas ? Slate ? Baseline d'accessibilité avec scores Lighthouse et toute plainte ADA existante.

Phase 2 : Architecture et conception de schéma (1 semaine)

Schéma Supabase avec tables, relations et politiques RLS. Structure des routes Next.js. Hiérarchie de navigation. Décision sur l'interface d'administration : Payload CMS pour les éditeurs non-techniques ou un tableau de bord Supabase personnalisé. Architecture d'intégration pour les extractions SSO, SIS et webhooks CRM.

Phase 3 : Exportation de données depuis Drupal (1–2 semaines)

D8/D9/D10 : exportation JSON:API via /jsonapi/node/program?page[limit]=50, paginée à travers chaque type de contenu. D7 : requêtes MySQL directes contre les tables de champs Drupal. Exportation de médias à partir des systèmes de fichiers public:// et private://. Exports d'utilisateurs et de taxonomies. Extraction de la structure du menu.

Phase 4 : Construction (3–8 semaines)

Application Next.js avec tous les modèles de page. Tables Supabase remplies de données transformées et politiques RLS actives. Chercheur de programme avec filtres à facettes. Annuaire des professeurs avec recherche. Sections de département. Portail étudiant avec SSO. Interface d'administration. Toutes les intégrations — extraction de données SIS, webhooks CRM, réservation de visite guidée.

Phase 5 : Importation et validation de contenu (1–2 semaines)

Transformez les exportations Drupal en scripts d'insertion Supabase. Importez tous les types de contenu. Téléchargez les médias vers Supabase Storage ou Vercel Blob. Réécrivez les URL des médias dans le contenu. Vérifiez 10% de chaque type de contenu. Testez chaque filtre, recherche et chemin de navigation.

Phase 6 : Mappage des redirections (1 semaine)

C'est critique pour les universités. Votre domaine .edu a des milliers de backlinks d'autres établissements d'enseignement, de sites gouvernementaux et de bases de données de recherche. Perdre ces backlinks est catastrophique pour l'autorité SEO. Nous mappons chaque URL Drupal — alias, chemins système (/node/1234) et URLs de sous-site — vers les nouvelles routes Next.js. Implémenté via le middleware Next.js pour une capacité de redirection illimitée.

Phase 7 : Lancement et surveillance (continu)

Basculement DNS. Nouvelle soumission de sitemap à Google Search Console. Surveillance quotidienne des erreurs 404 pendant les 30 premiers jours. Formation du personnel pour Payload CMS ou admin personnalisé. Formation de l'administration du département. Formation du flux de travail d'auto-mise à jour du corps professoral. Hypercare de 30 jours avec surveillance quotidienne et check-ins hebdomadaires avec votre équipe web.

Tarification

Type d'institution Pages Portée Calendrier Investissement
Collège communautaire Moins de 500 Programme finder, annuaire basique, actualités 6–8 semaines 50 000–80 000 $
Université de taille moyenne 500–2 000 Chercheur de programme, annuaire des professeurs, sections de département, événements 8–12 semaines 80 000–150 000 $
Grande université 2 000+ Multi-campus, sous-sites de département, portail étudiant, SSO, i18n 10–16 semaines 120 000–200 000 $

Pourquoi maintenant : l'horloge D11 tourne

Drupal 11 arrive fin 2026 avec Symfony 7 et Twig 4. Les universités sur D10 font face à la décision de migration dans les 6–12 prochains mois. Une migration D10-vers-D11 coûte un minimum de 30 000–60 000 $ — et vous ferez face à D12 dans 3–4 ans.

Une migration Next.js + Supabase coûte 50 000–200 000 $ selon la portée, mais le coût total de possession sur 5 ans est inférieur à rester sur Drupal. Pas de mises à niveau forcées. Pas de rupture de module contributeur. Pas d'avis de sécurité Drupal nécessitant des correctifs d'urgence. Votre framework se met à jour selon votre calendrier, pas celui de Drupal.

Pour le coût d'une seule migration Drupal supplémentaire, rendez-la votre dernière.

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 (D7/D8/D9/D10) vs Next.js + Supabase

Metric Drupal (D7/D8/D9/D10) Next.js + Supabase
Lighthouse Mobile 35-55 90-100
TTFB 1.8-3.5s <0.3s
Program Finder Filter Response 2-4s (full page load) <100ms (server component)
Hosting Cost (multi-site) $2,000-5,000/mo $200-600/mo
Drupal Upgrade Cost (per cycle) $30-60K every 3-4 years $0 (incremental updates)
Department Content Isolation Application-level permissions Database-level RLS
FAQ

Common questions

How is a university Drupal migration different from a regular Drupal migration?

University Drupal installations have education-specific content types (programs, faculty, departments), complex taxonomy hierarchies, department subsites with independent editors, SSO integration with campus identity providers, and connections to student information systems like Banner or PeopleSoft. Generic migration approaches miss these requirements entirely.

Can we keep our university SSO (Shibboleth/CAS) with Next.js?

Yes. Supabase Auth supports SAML 2.0 natively. We configure your university's identity provider — whether Shibboleth, ADFS, or Okta — as a SAML provider in Supabase. Students and staff authenticate through your existing IdP, and Supabase issues JWTs that control access via Row Level Security policies.

How do department editors manage their own content without affecting other departments?

Supabase Row Level Security (RLS) enforces content boundaries at the database level. A department editor assigned to the School of Business can only create, edit, and delete content where `department_id` matches their assignment. This is structural — not application-level permissions that can be bypassed.

What happens to our Drupal Paragraphs and Layout Builder pages?

Paragraph types export as structured JSONB blocks stored in Supabase. Each paragraph type — hero, stats, faculty spotlight, program cards — maps to a React component in a Next.js component registry. Editors manage blocks through Payload CMS or a custom admin interface with the same flexibility they had in Drupal.

Will we lose SEO rankings during the migration?

Not if redirects are handled correctly. University .edu domains carry significant authority from backlinks across educational institutions and government sites. We map every Drupal URL to its new Next.js equivalent, implement redirects via Next.js middleware, and monitor 404 errors daily for 30 days post-launch.

Should we wait for Drupal 11 instead of migrating to Next.js?

Drupal 11 arrives late 2026 with Symfony 7 and Twig 4, requiring another migration costing $30–60K minimum. Then D12 follows in 3–4 years. A Next.js + Supabase migration costs $50–200K but eliminates forced CMS migrations permanently. The 5-year total cost of ownership favors Next.js.

How do you handle Drupal Views like our program finder and faculty directory?

Each Drupal View becomes a Next.js server component backed by Supabase queries. Your program finder gets faceted filtering by subject area, degree level, and campus with results returning in under 100ms. Faculty directories get full-text search with department filtering. Every filter interaction is instant — no full page reload.

Can we consolidate our 20+ department Drupal subsites into one application?

Yes, and you should. We consolidate all department subsites into one Next.js application with `/departments/[slug]` routes. Each department retains its sub-brand identity with custom accent colors. Supabase RLS ensures department admins only manage their own content. One codebase, one deployment, one set of dependencies to maintain.

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 →