Implementation plan · SOLCOM Neos→Drupal Cutover

Redirect-Mapping für den Go-Live-Cutover

Ausgangslage Der Neos-Produktions-Dump (temp/db_10770solcom_2026-07-06_06-38.sql.gz, Stand 06.07.2026) wurde vollständig analysiert: URL-Baum der Live-Site aus nodedata rekonstruiert, Redirect-Tabelle ausgewertet und probeweise gegen die Drupal-Aliasliste (Staging) gematcht. Dieser Plan beschreibt das dreistufige Redirect-Paket für den Go-Live am 08.07.2026.

Update 07.07. nachmittags: Alle offenen Blöcke wurden in einer Entscheidungsrunde aufgelöst (Sektion 06), drei Import-Wellen sind auf Staging eingespielt und HTTP-verifiziert (1.163 Redirect-Entities), das 410-Gone-Modul solcom_gone und die Karriere-Host-Map liegen im Branch feature/p2503-283-bestaetigungsmaske.
Neos-Live-URLs (www + karriere)
1.332
+ historische Redirects
581 prod-relevant
Stand Staging
1.163 Redirects aktiv
Go-Live
08.07.2026
01

Befund aus dem Dump

Zwei Quellen im Dump: die aktuelle URL-Struktur der Live-Sites (neos_contentrepository_domain_model_nodedata, uriPathSegment-Hierarchie, Workspace live) und die historische Redirect-Tabelle (neos_redirecthandler_…_redirect, 2.456 Einträge seit 2017). Neos ist Multi-Site: solcom (www.solcom.de), solcom-career (karriere.solcom.de) und solcomtech (www.solcom.tech, nur 6 URLs — vernachlässigbar). Alle Live-URLs laufen unter dem Sprachpräfix /de/….

SegmentAnzahlCharakteristik
Projektangebote /de/projektportal/projektangebote/* 349 Slug endet mit numerischer Projekt-ID aus dem alten RMS (z. B. …-106821). Angebote laufen nach Wochen ab — zum Cutover praktisch alle tot.
Neos-Shortcuts 271 Interne Weiterleitungsseiten; ~250 davon nur Anker-Links innerhalb von Landingpages, 17 node-intern, 14 extern.
Referenzdatenbank /de/referenzen/* 208 Case-Study-Sektion — existiert im Drupal-MVP nicht.
Statische Seiten & Landingpages 281 Freelancer-Skill-Landingpages, Unternehmensseiten, Presse/News. Drupal hat viele davon slug-identisch nachgebaut.
Schulungskatalog 52 Seminar-Angebote — existiert im Drupal-MVP nicht.
Karriere-Site karriere.solcom.de 171 Eigener Neos-Site-Baum (solcom-career): 82 Stellenanzeigen (Career.Project/Personio.Project, abgelaufen), Rest statische Seiten. Drupal führt Karriere unter /karriere/* (46 vacancy-Nodes) plus Seiten wie /benefits, /bewerbungsprozess.
Historische Redirects (Redirect-Tabelle) 433 + 148 Prod-relevante Alt-URLs (Host NULL/www.solcom.de bzw. karriere.solcom.de), Ziele sind Neos-Pfade → zwei-Hop-Auflösung. Keine Ketten. Nur 103 mit Hits in den letzten 12 Monaten.
410-Gone-Einträge + hidden Pages 42 + 51 Bewusste Lösch-Entscheidungen aus 8 Jahren Redaktion — als 410 übernehmen.
Asset-Redirects _Resources/* 1.569 Alte Bild-/Datei-Pfade — sterben mit dem Neos-Server, kein Übertrag.

Drupal-Gegenseite: 1.372 Aliase (Staging via mw app exec), davon ~170 Canvas-Pages und 1.131 project_offer-Nodes unter /fuer-freiberufler/projektliste/<slug>. Drupal-Projektangebote kommen aus Salesforce (field_sf_parent_auto_number, neue Nummernserie) — 1:1-ID-Match zu alten RMS-Nummern nicht möglich und nicht nötig.

02

Regelwerk

Kein Wildcard-/Pattern-Modul, kein Custom-EventSubscriber: alle Alt-URLs sind aus dem Dump bekannt, also werden sie als exakte Einträge ins bereits installierte redirect-Modul enumeriert. Drupal-way, null Custom-Code.

Quelle (mit /de-Präfix)AnzahlZielModusCode
Exakte Pfad-/Slug-Matches (inkl. Suffix-Strip -2, -1-1) 109 1:1 auf Drupal-Alias automatisch 301
/de/projektportal/projektangebote/* 349 /fuer-freiberufler/projektliste eine Regel 301
Projektportal-Skill-Seiten (/de/projektportal/abap-projekte-… u. ä.) 54 Drupal-Skill-Landingpage per Keyword (/ABAP-Freelancer-fuer-ihre-IT-Engineering-Projekte), sonst Projektliste Keyword-Regel 301
Historische Redirects (Redirect-Tabelle) 433 Neos-Ziel durch dasselbe Mapping geschleust (zwei Hops) automatisch 301
Neos-Shortcuts 271 Auflösung über die gemappte Elternseite bzw. das Shortcut-Ziel automatisch 301
/de/referenzen/* + Branchen-Alt-Redirects 243 /unternehmen/referenzen (Entscheidung 07.07. — statt 410) eine Regel 301
/de/schulungskatalog/* 100 (inkl. Alt-Redirects) /solcom-akademie (Entscheidung 07.07. — Akademie war Betreiber des Katalogs) eine Regel 301
/de/unternehmen/* Firmen-/Siegel-/Digitalisierungs-Seiten 22 /uber-solcom (Entscheidung 07.07.) eine Regel 301
/de/unternehmen/presse*, News-Artikel ~120 410 via Gone-Modul (Entscheidung 07.07.: veraltete News ohne Ersatz) eine Regel 410
Kunden-Kampagnen-LPs (92000-/125000-Freelancer-profile u. ä.) 62 /experten-finden-lassen (kundengerichtete Kampagnen) eine Regel 301
Alte 410er + hidden Pages + News (Gone-Liste gesamt) 358 Custom-Modul solcom_gone (EventSubscriber, case-insensitive Pfadliste, cacheable 410) — Entscheidung 07.07.: vor Cutover bauen automatisch 410
Restliche Einzelfälle ~70 manuelle Arbeitsliste (neos-unmatched.tsv) manuell 301/410
Asset-Redirects _Resources/* 1.569 weglassen 404
karriere.solcom.de/de/jetzt-bewerben/* (Stellenanzeigen) 82 /karriere-bei-solcom/offene-stellenanzeigen (Entscheidung 07.07.) eine Regel 301
karriere.solcom.de statische Seiten 89 Slug-Matches direkt; warum-zu-solcom/*/karriere-bei-solcom, Standorte → /solcom-gmbh-standorte, kontakt/kontakt, dynamische-inhalte → 410 Regeln 301/410
karriere.solcom.de historische Redirects 148 zwei-Hop durch das Karriere-Mapping automatisch 301

Sonderfälle: /de selbst → /. Alle Neos-307er werden als 301 importiert (307 = temporär, wird von Suchmaschinen nicht als permanent gewertet).

03

Drei Stufen

Vollständige Abdeckung zum Cutover ist nicht das Ziel — die wertvollen URLs sauber umleiten, den Longtail über das 404-Monitoring-Netz nachziehen.

✓ 07.07.

Stufe 1 — Import-Paket bauen & einspielen

Umgesetzt: Import- und Rollback-Script gebaut (scripts/redirects/, idempotent via findMatchingRedirect, Dry-Run-Default, Rollback-Log), DB-Backup gezogen, Welle 1 (645 Redirects) eingespielt und per HTTP-Stichprobe verifiziert. Bestätigt 07.07.: Die Staging-Instanz (a-q7fxvm) geht beim Cutover live (keine separate Prod-App; Prod-Deploy in azure-pipelines.yml ist Placeholder). Die Redirects sind damit bereits auf der Go-Live-Instanz scharf und wirken, sobald DNS umgestellt wird — ein weiterer Import entfällt.

redirect-Moduldrush php:script1.163 Redirects gesamt (3 Wellen)350 Karriere via Host-Map
✓ 07.07.

Stufe 2 — Entscheidungsrunde & Nachimport

Alle 9 Blöcke in interaktiver Entscheidungsrunde aufgelöst (Sektion 06). Wellen 2+3 (458 + 60 Redirects) eingespielt, Gone-Modul gebaut, Karriere-Host-Map generiert. Keine offenen Mapping-Einträge mehr.

9 Entscheidungen3 Import-Wellensolcom_gone
nach Go-Live

Stufe 3 — 404-Monitoring als Sicherheitsnetz

redirect_404 ist bereits aktiv (View in config/sync/): erste zwei Wochen täglich die 404-Liste prüfen, alles mit echtem Traffic nachpflegen. Fängt automatisch ab, was das Mapping übersehen hat — inklusive Delta zwischen Dump-Stand (06.07.) und Cutover.

redirect_404-Viewtäglich, 2 Wochen
04

Datenfluss

Extraktion, Matching, Entscheidungsrunde und Import sind komplett gelaufen (Artefakte unten). Cutover-Topologie bestätigt (07.07.): die Staging-Instanz a-q7fxvm geht live — ein weiterer Import entfällt. Zum Cutover bleiben DNS-Umstellung (beide Domains auf die Drupal-App) und der Deploy von solcom_gone + solcom_karriere_redirect; Scripts + CSVs liegen reproduzierbar im Repo.

Neos-Dump (06.07.) nodedata + redirect-Tabelle Drupal-Aliase Staging · mw app exec Matcher + Regelwerk Slug-Match · Patterns · 410-Liste redirects.csv source · target · code redirect-Modul (Prod) drush php:script Import redirect_404-View Nachpflege-Loop post Go-Live generiert Import echte 404s neue Einträge

Durchgezogen = Build- und Import-Pfad (einmalig zum Cutover). Gestrichelt = Monitoring-Loop nach Go-Live.

Artefakt (im Repo)Inhalt
scripts/redirects/import_redirects.phpIdempotenter CSV-Import via drush php:script — Dry-Run-Default, apply-Flag, Loop-Schutz, Rollback-Log
scripts/redirects/rollback_redirects.phpLöscht die im Rollback-Log protokollierten Redirect-Entities wieder
scripts/redirects/data/redirect-import.csvWelle 1 — 720 Zeilen (Slug-Matches, Skill-Seiten, Projektangebote, Shortcuts, Alt-Redirects)
scripts/redirects/data/redirect-import-wave2.csvWelle 2 — 460 Zeilen (Entscheidungsrunde: Referenzen, Schulungskatalog, Presse-Firmen-Seiten, Karriere-Slugs)
scripts/redirects/data/redirect-import-wave3.csvWelle 3 — 62 Zeilen (Kunden-Kampagnen-LPs → /experten-finden-lassen)
scripts/redirects/data/karriere-host-map-final.csv350 Zeilen source_path,target_www,code für die Host-Map auf Webserver-/Mittwald-Ebene (inkl. GONE-Marker)
web/modules/custom/solcom_gone/410-Gone-Modul (EventSubscriber) mit assets/gone-paths.txt — 358 Pfade
web/modules/custom/solcom_karriere_redirect/Host-Weiche für Legacy-Hosts (kernel.request, Priorität 50): karriere.solcom.de aus karriere-host-map.csv (350 Zeilen, Fallback /karriere-bei-solcom) + solcom.tech aus tech-host-map.csv (9 Zeilen, Fallback /); 301 mit Query-String-Erhalt, GONE → 410; 10 Kernel-Tests
Mapping-Tabelle (HTML)Review-Ansicht aller 1.950 Zeilen mit Klassen-Filter und URL-Suche

Alles im Branch feature/p2503-283-bestaetigungsmaske. Auf Staging zusätzlich: DB-Backup shared/private/backup-pre-redirect-import-20260707-1345.sql.gz und Rollback-Logs unter shared/private/redirect-import/.

05

Risiken & Mitigations

Risiko
Sev
Mitigation
/de-Präfix vergessen: Redirects greifen nicht, weil indexierte URLs /de/… tragen, Drupal aber präfixlos fährt.
HIGH
Alle Quellen im Generator hart mit de/-Präfix erzeugen; HTTP-Stichprobe der Top-100-URLs nach Import als Gate.
Massenredirect auf die Startseite wird von Google als Soft-404 gewertet — Rankingverlust statt -erhalt.
HIGH
Entfallene Sektionen als 410 statt Homepage-Redirect; nur Sektions-Roots bekommen thematische 301-Ziele.
Delta zwischen Dump (06.07.) und Cutover: neue/verschobene Neos-Seiten fehlen im Mapping.
MED
Delta ist bei 1 Tag minimal; redirect_404-Monitoring (Stufe 3) fängt Rest ab. Optional: frischen Dump am Cutover-Tag diffen.
Import kollidiert mit bestehenden Redirects/Aliassen auf Prod (Duplicate-Source-Fehler).
LOW
Import-Script prüft per redirect_repository auf Existenz und skippt idempotent; Dry-Run-Modus vor dem echten Lauf.
Host-Kollision: das redirect-Modul matcht nur Pfade, nicht Hosts — karriere.solcom.de/de/kontakt und www.solcom.de/de/kontakt brauchen aber unterschiedliche Ziele.
HIGH
Gelöst 07.07.: Host-Weiche als Custom-Modul solcom_karriere_redirect (kernel.request, Priorität 50, host-aware — das redirect-Modul bleibt für www zuständig). Bei SOLCOM IT verbleibt nur die DNS-Umstellung beider Domains auf die Drupal-App.
Staging-Aliasliste weicht von Prod ab (lokal kuratierte Canvas-Pages).
LOW
Entfallen — bestätigt 07.07.: die Import-Instanz geht selbst live, Aliase und Redirects leben in derselben DB.
06

Getroffene Entscheidungen

Alle Blöcke am 07.07. in interaktiver Entscheidungsrunde aufgelöst — umgesetzt in den Wellen 2+3, der Gone-Liste und dem Host-Weichen-Modul (karriere.solcom.de + solcom.tech). Einzig offen: die DNS-Umstellung der drei Domains auf die Drupal-App (SOLCOM IT).

Referenzdatenbank → 301 auf /unternehmen/referenzen
Statt der 410-Empfehlung: alle 243 Referenz-URLs (Root + Detailseiten + Branchen-Alt-Redirects) leiten per 301 auf die neue Referenzen-Übersicht — der Content hat dort einen thematischen Nachfolger.
Entschieden · 07.07., Welle 2
Schulungskatalog → 301 auf /solcom-akademie
Alle 100 Schulungs-URLs (Root + Detailseiten + Alt-Redirects) auf die Akademie-Seite — kein 410, die Akademie war Betreiber des Katalogs und ist der inhaltliche Nachfolger.
Entschieden · 07.07., Welle 2
Presse-/News-Altbestand: Firmen-Seiten → /uber-solcom, News → 410
Die 22 Firmen-/Siegel-/Digitalisierungs-Seiten unter /de/unternehmen/* leiten auf /uber-solcom (Welle 2); Presse-/News-Artikel ohne Drupal-Nachfolger gehen in die Gone-Liste (410).
Entschieden · 07.07., Welle 2 + Gone-Liste
Kunden-Kampagnen-LPs → 301 auf /experten-finden-lassen
62 Kampagnen-Landingpages standen zunächst in der Gone-Liste — auf User-Entscheidung stattdessen als Welle 3 auf die Kunden-Zielseite umgeleitet; Gone-Liste entsprechend auf 358 Pfade bereinigt.
Entschieden · 07.07., Welle 3
410-Mechanik → Custom-Modul solcom_gone
Das redirect-Modul kann nur 3xx-Antworten. Gebaut: EventSubscriber auf KernelEvents::EXCEPTION, der 404 für die 358 Pfade aus assets/gone-paths.txt in cacheable 410 wandelt (case-insensitive Matching).
Entschieden + gebaut · 07.07.
www.solcom.tech → Länderseiten auf der Drupal-Instanz
Entschieden (07.07. abends): Die solcomtech-Site zieht mit um — /de/at/at, /de/ch/ch (beide Ziele existieren, HTTP 200); die 4 historischen Neos-Redirects (oesterreich/osterreich/osterreich-1/at, schweiz/ch) sind zwei-Hop aufgelöst, Fallback /. Umgesetzt als zweiter Host in solcom_karriere_redirect (assets/tech-host-map.csv, 9 Zeilen; matcht www.solcom.tech und solcom.tech). DNS-Umstellung bei SOLCOM IT.
Entschieden · 07.07. — Modul-Erweiterung im Branch, DNS bei SOLCOM IT
karriere.solcom.de → Host-Weiche als EventSubscriber-Modul
Entschieden (07.07. abends, präzisiert): beide Domains zeigen per DNS auf die Drupal-App; die Host-Weiche macht das Custom-Modul solcom_karriere_redirectkernel.request-Subscriber (Priorität 50, vor Router und redirect-Modul), matcht Host == karriere.solcom.de, schlägt den Pfad in der Map nach (301 auf https://www.solcom.de/… inkl. Query-String, GONE → 410), Fallback für ungelistete Pfade: 301 auf /karriere-bei-solcom. Das Kollisionsproblem betraf nur das host-blinde redirect-Modul — der Subscriber prüft den Host selbst. Map-Quelle: scripts/redirects/data/karriere-host-map-final.csv (350 Zeilen), Kopie als Modul-Asset. Bei SOLCOM IT verbleibt nur die DNS-Umstellung.
Entschieden · 07.07. — Modul im Branch, DNS bei SOLCOM IT