SEO-Migration ohne Rankingverlust

SEO-Migration ohne Rankingverlust

SEO-Migration ohne Rankingverlust: Der ultimative Leitfaden für 2026

Sei es ein frisches Design, eine neue Domain, das Zusammenführen mehrerer Webseiten oder der Wechsel zu einem neuen CMS – eine Website-Migration ist immer ein Mail mit Schweißausbrüchen. Denn hinter jeder Migration lauert die große Angst: Was, wenn wir unser hart erkämpftes Ranking verlieren?

Die gute Nachricht: Es geht auch anders. Mit der richtigen Planung, den passenden Tools und ein bisschen Geduld kannst du deine Seite migrieren, ohne dass Google dich vergisst. In diesem Artikel zeige ich dir Schritt für Schritt, wie das klappt – inklusive konkreter Code-Snippets, die du direkt umsetzen kannst.

Warum Migrationen so heikel sind

Google ist gossip-trinkend, was URLs angeht. Änderst du die Struktur deiner Webseite, hat Google erstmal keinen Plan, wo dein Content jetzt steckt. Ohne saubere Redirects und eine durchdachte Strategie landen deine Seiten im Niemandsland – und deine Rankings genauso.

Die häufigsten Ursachen für Rankingverluste nach einer Migration:

  • Fehlende oder fehlerhafte Redirects (301)
  • Doppelte Inhalte (Duplicate Content) durch fehlende Canonicals
  • Verlorene interne Verlinkungen
  • Geänderte URL-Struktur ohne Anpassung der Sitemap
  • Ladezeiten, die sich verschlechtert haben
  • Vergessene robots.txt-Anpassungen

Schritt 1: Vor der Migration – Bestandsaufnahme

Bevor du auch nur eine Datei verschiebst, brauchst du einen sauberen Ist-Zustand. Das ist wie ein Umzug: Erstmal alles einpacken und inventarisieren, bevor du irgendwohin fährst.

Alle indexierten URLs erfassen

Using Google Search Console und ein Crawler-Tool (Screaming Frog, Sitebulb oder crawlwrap) sammelst du alle relevanten URLs. Achte besonders auf:

  • Seiten mit hohem organischen Traffic
  • Seiten mit vielen Backlinks
  • Conversions-starke Landingpages

Ein schnelles PHP-Snippet, um deine Seiten aus einer Datenbank zu exportieren und auf Redirects vorzubereiten:

<?php
// URLs aus der Datenbank holen und für Redirect-Map vorbereiten
$pdo = new PDO('mysql:host=localhost;dbname=meine_seite', 'user', 'pass');

$stmt = $pdo->query("
    SELECT 
        CONCAT('/', slug) AS old_url,
        CONCAT('/', new_slug) AS new_url
    FROM pages
    WHERE status = 'active'
");

$redirects = [];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $redirects[$row['old_url']] = $row['new_url'];
}

// Als .htaccess-kompatibles Format exportieren
file_put_contents(
    'redirects.map',
    implode(PHP_EOL, array_map(
        fn($old, $new) => "Redirect 301 {$old} {$new}",
        array_keys($redirects),
        $redirects
    ))
);

echo count($redirects) . " Redirects exportiert." . PHP_EOL;

Rankings und Traffic sichern

Dokumentiere deine aktuellen Rankings für die wichtigsten Keywords. Exportiere die Daten aus der Search Console für die letzten 6 Monate. Das ist dein Benchmark – daran misst du später den Erfolg.

Schritt 2: Die Redirect-Strategie

Hier wird der Braten gemacht. 301-Redirects sind das A und O. Eine 301 sagt Google: „Der Inhalt ist jetzt woanders – und zwar für immer.“ Damit wird der Link-Juice sauber weitergegeben.

Nginx-Redirects für größere Projekte

Falls du Nginx nutzt, ist die Redirect-Konfiguration besonders performant. Für größere Seiten mit hunderten oder tausenden URLs empfiehlt sich eine Lua-basierte Lösung:

# /etc/nginx/conf.d/redirects.conf

map $request_uri $redirect_url {
    default 0;
    
    # Einzelne Redirects (für kleinere Mengen)
    /alte-seite          /neue-seite;
    /blog/beitrag-alt    /blog/beitrag-neu;
    /produkt/123         /shop/produkt-123;
}

server {
    listen 80;
    server_name example.de;

    location / {
        if ($redirect_url) {
            return 301 $redirect_url;
        }
        try_files $uri $uri/ /index.php?$args;
    }
}

Für wirklich große Seiten (10.000+ Redirects) lohnt sich ein Lookup in der Datenbank statt einer langen Konfigurationsdatei:

# /etc/nginx/conf.d/redirect-lookup.conf

server {
    listen 80;
    server_name example.de;

    location / {
        rewrite_by_lua_block {
            local redis = require "resty.redis"
            local red = redis:new()
            red:connect("127.0.0.1", 6379)
            
            local new_url = red:get("redirect:" .. ngx.var.request_uri)
            
            if new_url and new_url ~= ngx.null then
                return ngx.redirect(new_url, 301)
            end
        }
        
        try_files $uri $uri/ /index.php?$args;
    }
}

Die Idee: Du speicherst deine Redirects in Redis (oder einer anderen Datenbank) und schlägst sie zur Laufzeit nach. Schnell, flexibel und wartbar.

Schritt 3: Die robots.txt und XML-Sitemap

Vergiss niemals die robots.txt. Wenn du nach der Migration versehentlich deinen kompletten Spider-Prozess blockierst, kann es dauern, bis Google das neue Zeug findet.

XML-Sitemap generieren

Hier ein PHP-Snippet, um dynamisch eine XML-Sitemap zu erstellen, die nur die neuen URLs enthält:

<?php
header('Content-Type: application/xml; charset=utf-8');
echo '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;

$pdo = new PDO('mysql:host=localhost;dbname=meine_seite', 'user', 'pass');
$stmt = $pdo->query("
    SELECT 
        CONCAT('https://example.de/', new_slug) AS loc,
        updated_at,
        priority
    FROM pages
    WHERE status = 'active'
    ORDER BY updated_at DESC
");

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo '  <url>' . PHP_EOL;
    echo '    <loc>' . htmlspecialchars($row['loc']) . '</loc>' . PHP_EOL;
    echo '    <lastmod>' . date('Y-m-d', strtotime($row['updated_at'])) . '</lastmod>' . PHP_EOL;
    echo '    <changefreq>weekly</changefreq>' . PHP_EOL;
    echo '    <priority>' . $row['priority'] . '</priority>' . PHP_EOL;
    echo '  </url>' . PHP_EOL;
}

echo '</urlset>' . PHP_EOL;

Schritt 4: Das Test-Setup

Vor dem Live-Gang: Auf keinen Fall direkt auf die Produktion deployen! Richte dir ein Staging-System ein, das exakt wie die Produktion aussieht (nur nicht indexiert).

Canonical-Tags im Auge behalten

In der Übergangsphase kann es zu doppelten Inhalten kommen. Setze canonical Tags, die auf die neuen URLs zeigen:

<link rel="canonical" href="https://example.de/neue-seite" />

Falls du noch alte Seiten auf einem Subdomain-Preview hostest, verhindere die Indexierung mit einem Robots-Meta-Tag:

<meta name="robots" content="noindex, nofollow">

Schritt 5: Nach der Migration – Monitoring

Die Migration ist durch? Dann fängt die eigentliche Arbeit erst an. In den ersten 4–8 Wochen ist strenges Monitoring Pflicht.

Indexierungsstatus prüfen

Nutze die Google Search Console, um zu prüfen, ob deine neuen URLs indexiert werden. Ein kleines Script kann dir automatisch einen Report erstellen:

<?php
// Google Search Console API – Indexierungsstatus prüfen
// Voraussetzung: Service Account mit Zugriff auf die GSC API

use Google\Client;
use Google\Service\SearchConsole;

$client = new Client();
$client->setAuthConfig('service-account-key.json');
$client->addScope(SearchConsole::SEARCHCONSOLE);

$service = new SearchConsole($client);

//_traffic-Report für die neuen URLs
$startDate = date('Y-m-d', strtotime('-30 days'));
$endDate = date('Y-m-d');

$request = new SearchConsole\SearchAnalyticsQueryRequest();
$request->setStartDate($startDate);
$request->setEndDate($endDate);
$request->setDimensions(['page']);
$request->setRowLimit(1000);

$result = $service->searchanalytics->query(
    'https://example.de', 
    $request
);

if ($result->getRows()) {
    foreach ($result->getRows() as $row) {
        $url = $row->getKeys()[0];
        $clicks = $row->getClicks();
        $impressions = $row->getImpressions();
        $position = $row->getPosition();
        
        echo sprintf(
            "%s | Klicks: %d | Impressions: %d | Ø Position: %.1f%s",
            $url, $clicks, $impressions, $position, PHP_EOL
        );
    }
} else {
    echo "Keine Daten für den Zeitraum gefunden." . PHP_EOL;
}

404-Fehler im Blick behalten

Erstelle einen Report für 404-Fehler. Das sind die verlorenen Schafe deiner Migration – die harus musst du sammeln und auf die richtigeURL weiterleiten.

Checkliste für deine SEO-Migration

Zum Schluss nochmal die wichtigsten Punkte als Zusammenfassung:

Phase Aufgabe Status
Vorher Alle indexierten URLs dokumentieren
Vorher Rankings & Traffic als Benchmark sichern
Vorher 301-Redirect-Map erstellen
Vorher Internal Links prüfen & anpassen
Vorher XML-Sitemap aktualisieren
Vorher Staging-Umgebung testen
Nachher Crawl-Fehler in GSC prüfen
Nachher Indexierungsstatus überwachen
Nachher Rankings wöchentlich vergleichen
Nachher Backlinks auf neue URLs prüfen

Fazit

Eine SEO-Migration ist wie ein Zahnarztbesuch: Niemand freut sich drauf, aber mit der richtigen Vorbereitung überlebt man es ohne Schmerzen. Der wichtigste Takeaway? Plane, bevor du handelst. Je gründlicher du im Vorfeld bist, desto glatter läuft der Prozess.

Hast du eine Migration vor dir? Dann leg los mit der Bestandsaufnahme – und vergiss nicht: 301er sind dein bester Freund. Wenn du Questions hast, schreib mich gern an. Und wenn dir dieser Artikel geholfen hat, teile ihn mit deinem Team. Denn nichts ist schlimmer als eine Migration, bei der das Marketing nicht bescheid weiß. 😉