Migration de Drupal University vers Next.js
Votre dernière migration CMS. C'est promis.
Why leave Drupal (D7/D8/D9/D10)?
- 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.
What you gain
- 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
/programsavec 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
/facultyavec 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
/eventsavec filtrage par plage de dates et export iCal. - Fil d'actualités — Vue Drupal filtrant par département, catégorie → page Next.js
/newsavec 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
/careerstirant 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, FKprograms.subject_area_id - Vocabulaire Departments → table
departmentsavecparent_idpour la hiérarchie - Vocabulaire Campus Locations → table
campuses, FKprograms.campus_id - Vocabulaire Research Areas → table
research_areas+ table de jointurefaculty_research_areas - Vocabulaire Event Types → colonne énumérée
event_typeou 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 :
- L'étudiant clique sur « Se connecter » sur le site Next.js
- Redirection vers le IdP universitaire (Shibboleth/ADFS/Okta)
- L'étudiant s'authentifie avec ses identifiants universitaires
- Le IdP envoie l'assertion SAML à Supabase
- Supabase émet un JWT avec le rôle et le département de l'étudiant
- 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.
The migration process
Discovery & Audit
We map every page, post, media file, redirect, and plugin. Nothing gets missed.
Architecture Plan
New stack designed for your content structure, SEO requirements, and performance targets.
Staged Migration
Content migrated in batches. Each batch verified before the next begins.
SEO Preservation
301 redirects, canonical tags, sitemap, robots.txt — every ranking signal carried over.
Launch & Monitor
DNS cutover with zero downtime. 30-day monitoring period included.
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 |
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.
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.