Zum Inhalt springen
aviral gupta

WordPress-zu-Next.js-Migration ohne Ranking-Verlust

Rankings überstehen eine WordPress-zu-Next.js-Migration, wenn jede Legacy-URL über genau einen 301-Hop zu einer Seite mit demselben Titel, H1, Canonical und serverseitig gerendertem Textkörper führt — was Sie mit einem Crawl-Diff auf Staging beweisen, bevor DNS umgestellt wird, nicht danach.

Geschrieben von Aviral GuptaVeröffentlicht 9 Min. Lesezeit
  • Migration
  • Next.js
  • WordPress
  • Technisches SEO
  • Redirects
WordPress-zu-Next.js-Migration ohne Ranking-VerlustLEGACY301 MAPNEXT.JS/?p=812/blog/post/services.php/index.html3011:1, no chains/blog/post/blog/post/services/200 OK · rankings held

Warum verlieren die meisten WordPress-zu-Next.js-Migrationen Rankings?

Nicht, weil Sie PHP gegen React getauscht haben. Weil sich an einem einzigen Tag sechs Signale ändern und niemand sie vergleicht: die URL, der Redirect-Pfad dorthin, die internen Links, die darauf zeigen, Titel und H1, ob der Textkörper im HTML steckt, und wie schnell der Server antwortet.

  • Redirect-Ketten. Die alte URL leitet per 301 auf einen Slug weiter, der per 301 auf eine Trailing-Slash-Variante weiterleitet, die schließlich 200 liefert. Google folgt dem; fast sonst niemand. Redirect-Tests fanden, dass OAI-SearchBot und Claude-SearchBot eine Kette bei drei Hops abbrechen, GPTBot und PerplexityBot bei fünf, Googlebot bei zehn (CaptainDNS, 2026).
  • Ein pauschaler Redirect auf die Startseite. Ein Redirect auf eine Seite, die kein enges Äquivalent ist, wird als Soft-404 behandelt: Das Ziel erbt nichts, die Quelle wird fallengelassen. Das sagt Google selbst in seiner Dokumentation zum Site-Umzug.
  • Interne Links, die still verschwunden sind. Ein Theme liefert Hunderte, die nie jemand gezählt hat — Blöcke mit verwandten Beiträgen, Archive, Sidebars, Breadcrumbs, Pagination. Ein Rebuild liefert die Links, die ein Designer eingezeichnet hat. Seiten, die zwanzig bekamen, bekommen jetzt zwei — und ranken entsprechend.
  • Umgeschriebene Titel und H1s. Ändern Sie an dem Tag, an dem sich jede URL ändert, auch noch jedes Titelmuster, werden Sie nie wissen, welche Änderung was bewegt hat.
  • Textkörper, der erst nach der Hydration existiert. Googlebot rendert JavaScript; fast nichts sonst tut das. Instrumentierte Tests fanden, dass GPTBot bei rund 11,5 % der Anfragen JavaScript herunterlädt und ClaudeBot bei 23,8 % — und es nie ausführt (SearchOptimo, 2026). Text, der erst beim Mount geladen wird, ist Text, den Bing nicht liest.
  • Langsame TTFB bei kaltem Cache. WordPress hinter einem Page-Cache antwortet in Millisekunden; eine Route, die bei Bedarf revalidiert und ein CMS auf einer kalten Instanz aufruft, braucht Sekunden, und die Crawl-Statistik verzeichnet das als steigende durchschnittliche Antwortzeit.

Nichts davon zeigt sich in einem Design-Review. Alles davon zeigt sich in einem Crawl-Diff — deshalb behandle ich einen Plattformwechsel als Migrationsprojekt.

Wie erstellen Sie zuerst eine vollständige URL-Inventur?

Nehmen Sie die Vereinigung von sechs Quellen, nicht nur eine. Die Sitemap listet, was WordPress Ihnen zeigen will; die Inventur listet, was tatsächlich etwas einbringt. Bei jeder Migration, die ich durchgeführt habe, war die Sitemap die kleinste der sechs Quellen.

  1. Search Console → Leistung → Seiten, über die vollen 16 Monate. Ihre Liste rankender URLs und Ihre Vorher-Baseline: Klicks, Impressionen, Position, CTR.
  2. Search Console → Seitenindexierung, jeder Status, einschließlich Gecrawlt — zurzeit nicht indexiert und Duplikat ohne vom Nutzer festgelegten kanonischen URL. Google kennt diese; Ihre Sitemap listet sie nicht.
  3. Jede Sitemap, die WordPress veröffentlicht. Yoast und Rank Math teilen Beitrags-, Seiten-, Kategorie-, Tag-, Autor-, Produkt- und Anhang-Indizes auf. Gehen Sie /sitemap_index.xml durch; verlassen Sie sich nie auf eine einzelne Datei.
  4. Ein vollständiger Crawl mit Screaming Frog oder Sitebulb: JavaScript aus, nofollow gefolgt, kein Limit. Exportieren Sie auch den Bericht zu internen Links — Sie brauchen den Link-Graphen, nicht nur Adressen.
  5. Server-Logs, 30 bis 90 Tage, gefiltert auf Googlebot und Bingbot. Die einzige Quelle, die URLs findet, die immer noch gecrawlt werden, obwohl sie keinen eingehenden Link und keinen Sitemap-Eintrag haben.
  6. Search Console → Links → Meistverlinkte Seiten. Externe Links zeigen auf URLs, die Ihr Crawler nie erreicht, und genau deren Redirects zählen am meisten.

Normalisieren Sie die sechs Quellen in ein Sheet, indiziert nach Pfad, bereinigen Sie Groß-/Kleinschreibung und Trailing Slash, und erfassen Sie pro URL: Statuscode, Canonical, 16-Monats-Impressionen, eingehende interne Links. Dieses Sheet ist die Migration.

Migrationsablauf: eine Legacy-URL-Inventur speist ein 1:1-Redirect-Mapping, ein Paritäts-Diff läuft auf Staging, dann ein überwachter Launch.LEGACY301 MAPNEXT.JS/?p=812/blog/post/services.php/index.html3011:1, no chains/blog/post/blog/post/services/200 OK · rankings held
Inventur vor Mapping, Mapping vor Bau, Paritäts-Diff vor DNS.

Wie bauen Sie ein 1:1-301-Mapping, das nie kettet?

Eine Legacy-URL, eine Regel, ein Hop, ein 200. Das ist die gesamte Spezifikation. Schwierig wird es nur, weil WordPress URL-Formen erzeugt, die ein handgeschriebenes Mapping nie vorhersieht.

  • /?p=123 und /?page_id=45 — permalink-unabhängige Formen, die weiterhin auflösen und immer noch in alten E-Mails und CRM-Vorlagen stecken.
  • /category/…, /tag/…, /author/… — Archive, die oft Rankings halten und nach einem Rebuild kein offensichtliches Äquivalent haben.
  • /feed/, /comments/feed/, /wp-json/…, /xmlrpc.php — maschinelle Endpunkte, die externe Dienste weiterhin abfragen.
  • /some-post/amp/ — indexiert, falls das AMP-Plugin jemals aktiv war, egal ob sich noch jemand daran erinnert.
  • Query-Strings: ?replytocom=, WooCommerce ?add-to-cart=, Elementor ?elementor-preview=. Die verwaisten Redirects — 200 bei WordPress, danach stiller 404.
  • /wp-content/uploads/2019/06/photo.jpg und Anhangsseiten wie /some-post/photo/ — Bild-Rankings und dünn indexierte URLs.

Dann der Trailing Slash. WordPress liefert /about/; Next.js liefert /about und leitet die Slash-Form per 308 weiter. Bilden Sie nur die Quelle ohne Slash ab, und jeder alte eingehende Link erhält eine Zwei-Hop-Kette. Bilden Sie beide auf das endgültige Ziel ab, und testen Sie beide mit curl -I.

// next.config.ts — Next.js 16
import type {NextConfig} from 'next';

// Generated from the inventory sheet by a script, never typed by hand:
// { '/2019/06/old-post-slug': '/blog/new-post-slug', ... }
import {LEGACY_URLS} from './src/lib/legacy-urls';

const exact = Object.entries(LEGACY_URLS).flatMap(([from, to]) => [
  // permanent: true emits 308. Use statusCode when you want the literal 301
  // that old logs, analytics filters and link checkers expect — Google and
  // Bing treat 301 and 308 identically, but your tooling may not.
  {source: from, destination: to, statusCode: 301},
  // WordPress served the trailing-slash form. Send it straight to the final
  // destination so an old inbound link resolves in ONE hop, not two.
  {source: `${from}/`, destination: to, statusCode: 301}
]);

const nextConfig: NextConfig = {
  // Decide the slash policy once, here, so nothing adds an implicit hop.
  trailingSlash: false,

  async redirects() {
    return [
      // Exact matches first: a specific rule must always beat a pattern.
      ...exact,

      // Shapes, not pages.
      {source: '/category/:slug', destination: '/blog/topic/:slug', statusCode: 301},
      {source: '/:path*/amp', destination: '/:path*', statusCode: 301},
      {source: '/feed', destination: '/rss.xml', statusCode: 301},

      // Image URLs carry Google Images rankings of their own. They have file
      // extensions, so they never reach proxy.ts — handle them here.
      {
        source: '/wp-content/uploads/:path*',
        destination: '/media/:path*',
        statusCode: 301
      }
    ];
  }
};

export default nextConfig;
Referenz: next.config.js redirects.

Ab etwa tausend exakten Regeln verschieben Sie das Lookup in proxy.ts — die Datei, die Next.js 16 von middleware.ts umbenannt hat. Ein Hash-Map-Lookup läuft in konstanter Zeit, und es ist der einzige sinnvolle Ort, um ?p=123 aufzulösen, weil dieses Mapping Daten sind, kein Muster.

// src/proxy.ts — Next.js 16 renamed middleware.ts to proxy.ts.
import {NextResponse, type NextRequest} from 'next/server';
import {LEGACY_URLS, LEGACY_POST_IDS} from '@/lib/legacy-urls';

export function proxy(request: NextRequest) {
  const {pathname, searchParams} = request.nextUrl;

  // /?p=123 and /?page_id=45 — the ID form WordPress never stops serving.
  const id = searchParams.get('p') ?? searchParams.get('page_id');
  const byId = id ? LEGACY_POST_IDS[id] : undefined;

  // Slash-insensitive key so /about/ and /about hit the same entry, and both
  // land on the destination in a single hop.
  const key = pathname.length > 1 ? pathname.replace(/\/$/, '') : pathname;
  const destination = byId ?? LEGACY_URLS[key];

  if (destination) {
    return NextResponse.redirect(new URL(destination, request.url), 301);
  }

  return NextResponse.next();
}

export const config = {
  // Never run the map over assets or route handlers: a redirect rule that
  // catches /_next/static is an outage, not a ranking problem.
  matcher: ['/((?!api(?:/|$)|_next/|_vercel/|.*\\..*).*)']
};
Der Matcher überspringt alles mit einer Dateiendung — deshalb bleiben Upload-Redirects in next.config.ts.

Wie übertragen sich Titel, Canonicals und Schema ohne Drift?

Als Export, nicht als Neuschrieb. Yoast und Rank Math speichern Titel und Beschreibungen pro Beitrag in wp_postmeta, erreichbar über die REST-API oder eine einzige SQL-Abfrage. Dieser Export wird zu einer Fixture, die der Build ausliest, sodass generateMetadata denselben String zurückgibt, den die alte Seite zurückgab, Zeichen für Zeichen. Verbessern Sie den Text erst danach, wenn der Effekt zuordenbar ist.

  • Setzen Sie `metadataBase` im Root-Layout auf den absoluten Produktions-Origin. Ohne das lösen Canonicals und Open-Graph-URLs gegen den jeweils ausliefernden Host auf — auf Staging bedeutet das Canonicals, die auf die Staging-Domain zeigen. Der klassische Weg, sich selbst eine Stunde nach dem Launch zu deindexieren.
  • Canonicals müssen absolut, selbstreferenziell und auf dem ausliefernden Host sein. Google gleicht eine Abweichung notdürftig aus; Bing nicht. Widersprüchliche Canonicals sind eine dokumentierte Ursache dafür, dass Bing die falsche URL oder gar nichts indexiert (Microsoft Q&A, 2026).
  • Robots-Direktiven in beide Richtungen prüfen. Was noindex war, bleibt noindex; dringender noch: nichts anderes wird es. Ein staging-weites noindex, das in Produktion ausgeliefert wird, ist die häufigste Einzelursache für kompletten Traffic-Verlust.
  • Strukturierte Daten müssen übereinstimmen oder besser werden. Yoast erzeugt einen @graph mit Organization-, WebSite-, WebPage-, BreadcrumbList- und Article-Knoten. Liefern Sie nur Organization aus, haben Sie die Breadcrumb-Rich-Results sitewide verloren. Vergleichen Sie Alt gegen Staging im Rich Results Test.
  • hreflang, falls die Website es nutzt. Jedes Alternate reziprok, mit Selbstreferenz und x-default.

Wie beweisen Sie Parität auf Staging, bevor DNS umgestellt wird?

Crawlen Sie beide Websites und vergleichen Sie Spalte für Spalte: derselbe Crawler, derselbe User Agent, dieselbe Rendering-Einstellung, HTTP-Auth für Staging. Verbinden Sie die Exporte über das zugeordnete URL-Paar. Das Ergebnis ist eine Zeile pro URL mit einem Delta pro Spalte, und jedes Delta ungleich null wird behoben oder erklärt.

Paritätsprüfungen, pro URL verglichen: Live-Crawl gegen Staging-Crawl.
SignalErforderlicher Zustand nach der MigrationWie es verifiziert wird
HTTP-Status200 nach genau einem HopSkriptgesteuertes curl über das gesamte Mapping
Title-TagIdentischer String aus generateMetadataCrawl-Diff, Title 1
Meta DescriptionIdentisch, oder geändert und dokumentiertCrawl-Diff, Meta Description 1
H1Gleicher Text, genau eine pro SeiteCrawl-Diff, H1-1 und H1-Anzahl
CanonicalAbsolut, selbstreferenziell, Produktions-HostCrawl-Diff plus URL-Prüfung
IndexierbarkeitUnverändert; kein staging-weites noindexCrawl-Filter auf Indexierbarkeit
Gerenderte WörterInnerhalb von ~5 % mit deaktiviertem JavaScriptStaging zweimal crawlen, JS an und aus
Strukturierte DatenGleiche Knotentypen, keine FehlerRich Results Test, Alt gegen Staging
Eingehende interne LinksKeine Seite verliert unentschieden LinksCrawls über Link-Anzahl verbinden
Bilder und AltURL erreichbar, Alt-String identischBildbericht crawlen, Alt-Spalte vergleichen
Sitemap-EinträgeAlle Ziele, keine Redirects200 bei jedem Eintrag sicherstellen
#!/usr/bin/env bash
# One hop, one 200, correct destination — for every row in the map.
# redirect-map.csv holds: old_path,new_path
# A URL whose path does not change should not be in the map at all.

BASE=https://staging.example.com

while IFS=, read -r old new; do
  read -r status hops final <<<"$(curl -sS -o /dev/null -L \
    -w '%{http_code} %{num_redirects} %{url_effective}' "${BASE}${old}")"

  if [ "$status" != "200" ] || [ "$hops" != "1" ] || [ "${final%%\?*}" != "${BASE}${new}" ]; then
    printf 'FAIL %-44s status=%s hops=%s landed=%s\n' "$old" "$status" "$hops" "$final"
  fi
done < redirect-map.csv
Zuerst gegen Staging ausführen, dann zehn Minuten nach der Umstellung gegen Produktion. Jede FAIL-Zeile blockiert den Launch.

Wie sieht das Runbook für den Launch-Tag aus?

  1. 1

    T-24 Std. — DNS-TTL senken, Content einfrieren

    TTL auf 300 Sekunden setzen, damit ein Rollback nur Minuten dauert. Alles, was nach dem finalen Export veröffentlicht wird, existiert auf der neuen Website nicht.

  2. 2

    T-1 Std. — Paritäts-Diff erneut ausführen

    Content und Code haben sich seit dem letzten Lauf beide verändert. Gehen Sie von nichts aus, was Sie heute nicht neu gemessen haben.

  3. 3

    T-0 — Umschalten, von außen verifizieren

    Rufen Sie 50 Ihrer Legacy-URLs mit den höchsten Impressionen von einer Maschine ab, die die Website nie gesehen hat, und stellen Sie sicher, dass ein Hop zu einem 200 führt — nicht vom Browser, in dem Sie die ganze Woche getestet haben.

  4. 4

    T+15 Min. — robots.txt, Sitemaps, Firewall

    Bestätigen Sie, dass die Produktions-robots.txt nicht das Deny-all von Staging ist, reichen Sie neue Sitemaps in Search Console und Bing Webmaster Tools ein, und setzen Sie die Bot-Regeln des Hosts in den reinen Log-Modus. Anagram-Crawlbarkeitsdaten von 2026 fanden, dass 17,6 % der Top-Websites, die GPTBot in robots.txt erlauben, ihm in der Praxis 403 liefern — und ein verwaltetes WAF-Regelwerk ist typischerweise die Ursache.

  5. 5

    T+1 Std. — die alte Sitemap live lassen

    Liefern Sie sie mit den alten URLs noch ein paar Wochen weiter aus, wenn Sie noch Kontrolle darüber haben. Googles Leitfaden zum Site-Umzug sagt, das beschleunigt das Auffinden der Redirects.

  6. 6

    T+2 Std. — Analytics, Tags, Conversions

    GA4, GTM und Ad-Pixel feuern auf den neuen Templates mit denselben Event-Namen. Tracking-Parität ist Teil der Migrationsparität.

  7. 7

    T+24 Std. — erster Blick auf die Crawl-Statistik

    Search Console → Einstellungen → Crawling-Statistiken. Steigende erfolgreiche Anfragen, kein Ausschlag bei 404 oder 5xx, Antwortzeit im Bereich vor dem Launch.

Bewusst ausgelassen: das Adressänderungs-Tool. Es gilt nur, wenn sich die Domain selbst ändert.

Was überwachen Sie 30 Tage nach dem Launch?

Täglich in Woche eins, danach zweimal wöchentlich, immer gegen die Baseline, die Sie vor dem Launch exportiert haben. Die Aufgabe ist, normales Re-Crawl-Rauschen von einem echten Problem zu trennen.

  • Seitenindexierung. Achten Sie auf Gründe, nicht auf Summen. Steigt Seite mit Weiterleitung, ist das korrekt — Google arbeitet sich durch Ihr Mapping. Steigt Nicht gefunden (404), heißt das, Sie haben eine URL-Form übersehen. Duplikat, Google hat einen anderen kanonischen URL ausgewählt heißt, Canonicals und Redirects widersprechen sich.
  • Crawling-Statistiken. Die durchschnittliche Antwortzeit ist Ihr TTFB-Signal. Steigt sie, lässt die Revalidierung Crawler für Cache-Misses bezahlen; verschieben Sie teure Routen auf statische Generierung.
  • Performance, Seite für Seite gegen den 16-Monats-Export. Vergleichen Sie jede neue URL mit ihrem zugeordneten Vorgänger, nie mit der Gesamtsumme der Website — Summen verstecken eine Seite, die alles verloren hat, hinter einer Seite, die gewonnen hat.
  • Bing Webmaster Tools. Verifizieren Sie die Property vor dem Launch, sonst verbringen Sie die kritische Woche blind. URL-Prüfung an zehn zugeordneten URLs, Sitemap auf dem richtigen Host erneut einreichen, und lesen Sie den AI-Performance-Bericht, den Microsoft am 9. Februar 2026 gestartet hat — die einzigen First-Party-Daten zu Zitaten durch Antwortmaschinen.
  • Logs erneut. Bot-Zugriffe nach Statuscode nach Tag. Feuert ein 301 nach dem ersten Monat immer noch tausende Male pro Woche, verlinkt bei Ihnen selbst noch etwas auf alte URLs.

Ein Einbruch in den Wochen eins und zwei ist normal, während das Mapping neu verarbeitet wird. Nicht normal ist, wenn sich die Impressionen erholen, während die durchschnittliche Position schlechter bleibt als die Baseline: Die URLs wurden gefunden, aber die Seiten werden anders bewertet. Das deutet eher auf Content-, Titel- und H1-Änderungen hin als auf Redirects.

Wie sah das bei einer echten Migration aus?

Die Migration, auf die ich mich am häufigsten beziehe, war kein WordPress. Es war der PHP-Laravel-Monolith hinter Thrifty in den VAE, den ich als Senior Developer bei Thrifty Car Rental UAE auf Next.js umgezogen habe. Im selben Zeitraum wurde das .NET-Backend hinter Dollar durch sechs gemeinsam genutzte Node.js-Microservices ersetzt. Anderer Quell-Stack, identisches Verfahren, und der Grund, warum ich ihm vertraue: kein Ranking-Verlust.

Die Teile, die die eigentliche Arbeit leisteten, waren unglamourös. Die Inventur kam aus Search Console, den Plattform-Sitemaps und den Server-Logs — die Logs brachten Query-String-URLs ans Licht, die die alte Anwendung jahrelang still ausgeliefert hatte. Redirects wurden aus diesem Sheet generiert, nicht von Hand geschrieben. Metadaten kamen als Export herüber, sodass Titel am ersten Tag identisch waren. Das Launch-Gate war der Paritäts-Diff mit einer schriftlichen Liste erlaubter Deltas. Dieselbe Methode steckt hinter Cariva, 326 serverseitig gerenderten SEO-Seiten — serverseitig gerendert, damit der Text im HTML steht, für Bing und für Crawler, die nie JavaScript ausführen.

Wenn Sie das für Ihre Website wollen, ist das der Service SEO-sichere Migration und Rebuild, und das meiste von dem, was Next.js-Entwicklung in der Praxis bedeutet. Jedes Projekt beginnt mit einem ersten Projektgespräch: Ich crawle, was Sie haben, und sage Ihnen, wo das Risiko liegt. Schicken Sie mir die Domain.

Was sollten Sie über meine Arbeitsweise dabei wissen?

Das ist das Designziel, und es ist eine Methode, kein Versprechen — niemand kann ein Suchranking garantieren. Wozu ich mich verpflichte, ist das Verfahren: eine vollständige URL-Inventur aus Search Console, Sitemaps, einem vollständigen Crawl und Server-Logs; ein 1:1-301-Mapping ohne Ketten und ohne Catch-all auf die Startseite; Metadaten-, Canonical- und Schema-Parität, verifiziert durch einen Crawl-Diff auf Staging; und danach 30 Tage Monitoring in Search Console und Bing Webmaster Tools. Diese Methode hat Thriftys Laravel-zu-Next.js-Migration ohne Ranking-Verlust getragen.

Bei einer typischen Content-Website sechs bis zwölf Wochen end-to-end, und die Seitenanzahl ist ein schlechter Prädiktor. Was den Zeitplan treibt, sind die Anzahl der Templates, Plugin-Abhängigkeiten und wie viel Traffic auf URL-Formen liegt, die einzeln behandelt werden müssen. Eine 60-seitige Broschüren-Website mit fünf Templates ist schneller als eine 400-seitige mit fünfzehn. Inventur und Redirect-Mapping brauchen allein meist zwei Wochen und stehen zuerst, weil das Mapping bestimmt, was der Build produzieren muss. Content-Freeze und Launch liegen in der letzten Woche.

Nur, wenn Sie ein CMS behalten, und diese Entscheidung gehört an den Anfang des Projekts, nicht ans Ende. Bei einer content-lastigen Website lautet die übliche Antwort Headless-WordPress: Die Redakteure, Rollen und der Workflow, die Sie bereits kennen, bleiben genau, wie sie sind, und Next.js rendert das Frontend. Ändert sich Content nur ein paar Mal im Jahr, ist ein Git-basierter oder typisierter Content-Ansatz günstiger im Betrieb. Klärt das niemand vorab, endet die Migration mit einer schnellen Website, die Marketing nicht bearbeiten kann — ein schlechteres Ergebnis als die WordPress-Website, mit der Sie gestartet sind.

Nein, und seien Sie vorsichtig bei jedem, der das tut. Ergebnisse bewegen sich aus Gründen, die nichts mit Ihrer Website zu tun haben: Algorithmus-Updates, Veröffentlichungen von Wettbewerbern, Saisonalität. Kontrollierbar ist jede technische Ursache eines migrationsbedingten Einbruchs, und genau die werden herauskonstruiert — Redirect-Ketten, verlorene interne Links, fehlende Metadaten, nur per JavaScript geladener Textkörper, langsame Time-to-First-Byte. Sie bekommen den Paritäts-Diff vor dem Launch und den Baseline-Vergleich danach, sodass Sie, falls sich etwas bewegt, sehen können, ob die Migration die Ursache war.

Schauen Sie, was tatsächlich scheitert. Sieht die Website veraltet aus, lädt aber schnell, rankt und konvertiert, ist das ein Designproblem, und ein Plattformwechsel ist ein teurer Weg, es zu lösen. Ein Rebuild lohnt sich, wenn die Plattform selbst die Einschränkung ist: Core Web Vitals, die wegen Theme- und Plugin-Gewicht nicht bestehen, ein Plugin-Stack, der bei jedem Update bricht, Sicherheitsrisiken oder Content, den das Framework nicht serverseitig rendern kann. Ein Crawl plus eine Prüfung der Felddaten beantwortet das in etwa einer Stunde — genau das deckt das Projektgespräch ab.

Shops migrieren auch, mit deutlich mehr URL-Fläche zum Inventarisieren. Produkt-, Kategorie- und gefilterte URLs brauchen alle explizite Behandlung, und WooCommerce-Query-Strings wie add-to-cart und Filterparameter sind die klassischen verwaisten Redirects, die bei WordPress 200 liefern und danach still auf 404 wechseln. Produkt-Schema, Varianten-Canonicals und Pagination brauchen Parität wie alles andere. Die größere Entscheidung ist, wo die Commerce-Logik nach dem Umzug liegt — ein Headless-Commerce-Backend oder ein neu gebauter Checkout —, und das verändert den Umfang weit mehr als das Redirect-Mapping.

Ja. Die Ausgangsplattform ändert die Export-Mechanik und sonst nichts. Die Inventur kommt aus Search Console, Sitemaps, einem Crawl und Server-Logs, unabhängig davon, was das HTML erzeugt hat, und der Paritäts-Diff vergleicht gerenderte Ausgabe statt Quellcode. Die Laravel-Migration hinter Thrifty und der Ersatz des .NET-Backends hinter Dollar folgten beide genau dem hier beschriebenen Prozess. Was sich lohnt, bei jedem Legacy-Stack früh zu prüfen, sind die URL-Formen, die er erzeugt und die niemand dokumentiert hat — dafür ist Log-Analyse da, und dort stecken die meisten Überraschungen.

// OFFEN FÜR NEUE ROLLEN

Sie stellen ein oder bauen etwas, das einen Entwickler braucht?