Zurück zum Portfolio
Mesogeiako — Berufsbildungszentrum & maßgeschneidertes CMS

Mesogeiako — Berufsbildungszentrum & maßgeschneidertes CMS

Mesogeiako ist ein zugelassenes Zentrum für lebenslanges Lernen und Berufsbildung in Thessaloniki, und seine Website war auf WordPress und dem Page-Builder von BeTheme gewachsen. Der Neubau behält jeden Inhalt und nichts von der Plattform. Er ist reines PHP 8.5 auf MySQL — ein Front-Controller, ein fünfzehnzeiliger Autoloader, kein Framework, kein Composer, kein Build-Schritt — rund fünftausend Zeilen Quellcode und zweitausend Zeilen Templates. Griechisch ist Standard, Englisch liegt unter /en/, und die Gleichwertigkeit beider Sprachen ist strukturell statt nachgerüstet: Jedes Projekt, jede Meldung und jede Seite ist eine Datenzeile mit einer Übersetzungszeile pro Sprache, Slugs gehören zur Übersetzung, sodass griechische Seiten griechisch abgeleitete URLs behalten, und eine dritte Sprache bräuchte keine Schemaänderung. Die Migration ist Code, kein einmaliger Export. Einundzwanzig geordnete, wiederholbare Schritte bauen die ganze Website aus der WordPress-Quelle neu auf — sie lesen die Inhalte des Muffin Builders, entfernen Textbausteine, vereinheitlichen Überschriften, führen doppelte Meldungen zusammen und lösen eingebettete Data-URI-Bilder in Dateien auf — und übertragen 33 Projekte, 90 Meldungen und 20 Seiten in beiden Sprachen, mit 798 Weiterleitungen, damit alte Links auf ihren neuen Seiten landen. Jedes Bild der Mediathek ist ein WebP unter 200 KB: Die Qualität sinkt von 82 auf 40, danach schrumpfen die Abmessungen, bis es passt, und das Original wird verworfen. Der Admin gibt dem Zentrum seine Projekte, Meldungen und Seiten in beiden Sprachen mit TinyMCE, eine Mediathek, Kontaktdaten sowie die Zähler und Blöcke der Startseite. Die strukturierten Daten tragen Postanschrift, Handelsregisternummer und Öffnungszeiten — drei Angaben, die die alte Website in einem Footer-Widget des Themes veröffentlichte, wo kein Beitrag und kein Importer sie sehen konnte.

Technologien

PHP 8.5 MySQL Vanilla JS GSAP TinyMCE 7 WebP pipeline (GD) i18n (EL/EN) SEO WordPress migration

Herausforderungen

WordPress hatte einige Fakten versteckt. Postanschrift, Handelsregisternummer und Öffnungszeiten standen in einem Footer-Widget des Themes statt in einem Beitrag, sodass ein Inhaltsexport sie nie sah, und die zweite Telefonnummer widersprach sich an drei Stellen der alten Website. Griechische URLs brachen außerdem das naheliegende Datenbankdesign: Prozentkodiert überschreiten sie regelmäßig 191 Zeichen bei langen gemeinsamen Präfixen, sodass ein Präfixindex tatsächlich verschiedene Adressen als Duplikate ablehnt. Und ein zweisprachiger Editor hat einen stillen Fehlermodus — ein Speichern, bei dem eine Sprache fehlt, ist nicht davon zu unterscheiden, dass jemand sie absichtlich leert.

Lösungen

Jede Korrektur ist ein eigener nummerierter Migrationsschritt, sodass ein frischer Neuaufbau aus WordPress die vom Kunden bestätigte Telefonnummer und die wiedergefundene Anschrift reproduziert, statt die alten Fehler erneut zu importieren. Weiterleitungen sind über einen SHA-256-Hash des alten Pfads eindeutig statt über ein Präfix. Jedes Archivsegment wird nur in seiner eigenen Sprache aufgelöst, damit ein Eintrag nicht unter zwei URLs lebt und sein eigenes Ranking teilt. Jedes Übersetzungsformular sendet pro Sprache eine Präsenzmarkierung — erst dadurch bedeutet eine fehlende Sprache „unverändert“ statt „löschen“ —, und die Admin-Smoke-Suite enthält dafür einen Regressionstest. Dateinamen werden vor der Transliteration NFC-normalisiert, weil macOS und Linux denselben griechischen Namen als unterschiedliche Bytes speichern.