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.
solcom_gone
und die Karriere-Host-Map liegen im Branch feature/p2503-283-bestaetigungsmaske.
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/….
| Segment | Anzahl | Charakteristik |
|---|---|---|
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.
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) | Anzahl | Ziel | Modus | Code |
|---|---|---|---|---|
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).
Vollständige Abdeckung zum Cutover ist nicht das Ziel — die wertvollen URLs sauber umleiten, den Longtail über das 404-Monitoring-Netz nachziehen.
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.
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.
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.
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.
Durchgezogen = Build- und Import-Pfad (einmalig zum Cutover). Gestrichelt = Monitoring-Loop nach Go-Live.
| Artefakt (im Repo) | Inhalt |
|---|---|
scripts/redirects/import_redirects.php | Idempotenter CSV-Import via drush php:script — Dry-Run-Default, apply-Flag, Loop-Schutz, Rollback-Log |
scripts/redirects/rollback_redirects.php | Löscht die im Rollback-Log protokollierten Redirect-Entities wieder |
scripts/redirects/data/redirect-import.csv | Welle 1 — 720 Zeilen (Slug-Matches, Skill-Seiten, Projektangebote, Shortcuts, Alt-Redirects) |
scripts/redirects/data/redirect-import-wave2.csv | Welle 2 — 460 Zeilen (Entscheidungsrunde: Referenzen, Schulungskatalog, Presse-Firmen-Seiten, Karriere-Slugs) |
scripts/redirects/data/redirect-import-wave3.csv | Welle 3 — 62 Zeilen (Kunden-Kampagnen-LPs → /experten-finden-lassen) |
scripts/redirects/data/karriere-host-map-final.csv | 350 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/.
/de-Präfix vergessen: Redirects greifen nicht, weil indexierte URLs /de/… tragen, Drupal aber präfixlos fährt.de/-Präfix erzeugen; HTTP-Stichprobe der Top-100-URLs nach Import als Gate.redirect_404-Monitoring (Stufe 3) fängt Rest ab. Optional: frischen Dump am Cutover-Tag diffen.redirect_repository auf Existenz und skippt idempotent; Dry-Run-Modus vor dem echten Lauf.redirect-Modul matcht nur Pfade, nicht Hosts — karriere.solcom.de/de/kontakt und www.solcom.de/de/kontakt brauchen aber unterschiedliche Ziele.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.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).
/unternehmen/referenzen/solcom-akademie/uber-solcom, News → 410/de/unternehmen/* leiten auf /uber-solcom (Welle 2); Presse-/News-Artikel ohne Drupal-Nachfolger gehen in die Gone-Liste (410)./experten-finden-lassensolcom_goneredirect-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)./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.solcom_karriere_redirect — kernel.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.