Zum Inhalt springen

Weiterleitungen in WordPress

In WordPress kannst du URLs auf mehreren Wegen weiterleiten: per Plugin, per Regel in der .htaccess oder mit ein paar Zeilen PHP. Hier erfährst du, welcher Weg wann passt und wie du die typischen Stolperfallen mit Caching und HTTPS umgehst.

Welche Methode ist die richtige?

Mit allen Methoden bekommst du eine saubere 301- oder 302-Antwort. Der Unterschied liegt darin, wo der Redirect passiert und wer ihn pflegt:

MethodeLäuftGeeignet für
Redirect-PluginIn PHP, nachdem WordPress geladen istRedakteure ohne Serverzugang, einzelne URLs, 404-Überwachung
.htaccess / nginx-KonfigurationIm Webserver, bevor PHP startetGanze Domains, HTTP auf HTTPS, www, große Regelwerke
PHP (wp_redirect())In deinem Theme- oder Plugin-CodeWeiterleitungen mit Logik, etwa abhängig von Benutzerrolle oder Metadaten

Redirects auf Serverebene sind am schnellsten, weil WordPress gar nicht erst startet. Plugins sind am bequemsten. Leg für jede Art von Regel einen festen Ort fest – sonst leitest du irgendwann dieselbe URL auf zwei Ebenen doppelt weiter.

Redirect-Plugins

Drei verbreitete Plugins decken die meisten Fälle ab. Alle speichern die Regeln in der Datenbank und senden den Redirect aus PHP:

  • Redirection (kostenlos): ein reiner Redirect-Manager. Du wählst den Statuscode pro Regel, kannst reguläre Ausdrücke nutzen, nach Login-Status, Browser oder Referrer unterscheiden und 404-Fehler protokollieren – so siehst du, welche alten URLs noch Besucher bekommen. Regeln lassen sich auch im .htaccess- oder nginx-Format exportieren.
  • Yoast SEO Premium: Der Redirect-Manager gehört zur kostenpflichtigen Version. Änderst du den Slug eines Beitrags oder löschst ihn, bietet Yoast direkt an, eine Weiterleitung anzulegen. Die Regeln landen wahlweise in der Datenbank oder in einer Server-Konfigurationsdatei.
  • Rank Math: Schon die kostenlose Version enthält ein Redirections-Modul mit 301, 302, 307, 410 und 451, Regex-Unterstützung und optionalen automatischen Weiterleitungen bei Slug-Änderungen.

Nutzt du Yoast oder Rank Math ohnehin, reicht deren Redirect-Manager meist aus. Brauchst du ausführliche Logs oder Bedingungen, ist Redirection das spezialisiertere Werkzeug. Zwei Redirect-Manager gleichzeitig solltest du vermeiden.

Was WordPress von selbst weiterleitet

Einige Weiterleitungen erledigt WordPress auch ohne Plugin:

  • Änderst du den Slug eines veröffentlichten Beitrags, merkt sich WordPress den alten Slug und leitet ihn per 301 auf die neue URL weiter (Funktion wp_old_slug_redirect()). Das greift nicht in jedem Fall bei Seiten und auch nicht, wenn du die Permalink-Struktur umstellst.
  • Der Canonical Redirect (redirect_canonical()) leitet ?p=123 auf den sprechenden Permalink um, ergänzt oder entfernt den Slash am Ende passend zu deiner Struktur und korrigiert den Hostnamen, wenn er nicht zur Website-Adresse passt.

Permalink-Struktur ändern

Stellst du unter Einstellungen → Permalinks etwa von /2024/05/mein-beitrag/ auf /mein-beitrag/ um, ändern sich alle Beitrags-URLs auf einen Schlag. WordPress versucht zwar, bei manchen alten URLs den passenden Beitrag zu erraten, darauf solltest du dich aber nicht verlassen. Leg lieber eine Muster-Weiterleitung an, in der .htaccess zum Beispiel so:

RewriteEngine On
RewriteRule ^[0-9]{4}/[0-9]{2}/([^/]+)/?$ /$1/ [R=301,L]

Im Plugin Redirection trägst du dasselbe Muster als Regex-Regel ein: Quelle ^/\d{4}/\d{2}/([^/]+)/?$, Ziel /$1/. Prüf danach ein paar alte URLs mit dem Redirect-Checker und achte darauf, dass jede in genau einem Schritt auf der neuen URL landet.

Weiterleitungen in der .htaccess

Auf Apache-Hosting schreibt WordPress einen eigenen Block in die .htaccess. Deine Regeln gehören über # BEGIN WordPress: Alles zwischen den Markierungen überschreibt WordPress beim Speichern der Permalinks, und die Sammelregel dort schickt jede Anfrage an index.php – Regeln darunter werden also womöglich nie erreicht.

# Eigene Weiterleitungen
RewriteEngine On
RewriteRule ^alte-seite/?$ /neue-seite/ [R=301,L]
RewriteRule ^shop/(.*)$ https://shop.example.com/$1 [R=301,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Weitere Muster findest du im Ratgeber zur .htaccess-Weiterleitung, und der .htaccess-Generator baut dir die Regeln zusammen. Unter nginx gibt es keine .htaccess; dort nutzt du return 301 im Server-Block, wie im nginx-Ratgeber beschrieben.

Weiterleiten mit PHP: wp_redirect() und wp_safe_redirect()

Für Weiterleitungen mit Logik hängst du dich in einem kleinen Plugin oder in der functions.php deines Themes an den Hook template_redirect. Er läuft, nachdem WordPress weiß, welcher Inhalt angefragt wird, aber bevor irgendetwas ausgegeben wurde.

add_action('template_redirect', function () {
    if (is_page('alter-kontakt')) {
        wp_safe_redirect(home_url('/kontakt/'), 301);
        exit;
    }
});

Drei Details sind wichtig:

  1. Gib den Statuscode an. Beide Funktionen senden standardmäßig 302. Für einen dauerhaften Umzug übergibst du 301 als zweites Argument.
  2. Ruf exit auf. Die Funktionen setzen nur den Location-Header und beenden das Skript nicht. Ohne exit rendert WordPress die Seite einfach weiter.
  3. Nimm lieber wp_safe_redirect(). Die Funktion erlaubt nur den eigenen Host und Hosts, die du über den Filter allowed_redirect_hosts freigibst. Das schützt vor Open Redirects, wenn das Ziel aus Benutzereingaben stammt. wp_redirect() akzeptiert dagegen jede URL.

Willst du mit wp_safe_redirect() auf eine fremde Domain weiterleiten, gib sie vorher frei:

add_filter('allowed_redirect_hosts', function (array $hosts): array {
    $hosts[] = 'shop.example.com';
    return $hosts;
});

Website-Adresse ändern oder auf eine neue Domain umziehen

Die Adresse der Website legst du unter Einstellungen → Allgemein fest (WordPress-Adresse und Website-Adresse) oder – mit Vorrang – in der wp-config.php:

define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');

URLs in Beitragsinhalten, Menüs oder Widgets ändern sich dadurch nicht. Die ersetzt du in der Datenbank, zum Beispiel mit WP-CLI (vorher Backup machen und zuerst mit --dry-run testen):

wp search-replace 'https://alt.example.com' 'https://example.com' --skip-columns=guid

Anschließend leitest du die alte Domain auf Serverebene per 301 weiter – und zwar pfadgenau, damit alt.example.com/blog/beitrag/ auf example.com/blog/beitrag/ führt und nicht auf die Startseite. Den kompletten Ablauf inklusive Search Console findest du in der Checkliste zum Domain-Umzug.

Typische Stolperfallen

Caching-Plugins

Seiten-Caches wie WP Super Cache, W3 Total Cache oder WP Rocket, aber auch Varnish oder ein CDN liefern oft eine gespeicherte Kopie aus, bevor PHP überhaupt läuft. Ein Redirect, den du per Plugin anlegst, wirkt dann erst, wenn der Cache für diese URL geleert ist. Leere also nach neuen Weiterleitungen den Cache und schau dir die Response-Header im Checker an: Siehst du weiterhin eine 200 mit Cache-Header, kommt noch die alte Kopie.

Redirect-Schleifen mit SSL hinter einem Proxy

Beendet ein Load Balancer, Reverse Proxy oder Cloudflare die HTTPS-Verbindung und spricht per HTTP mit deinem Server, hält WordPress die Anfrage für unverschlüsselt. Beginnt die Website-Adresse mit https://, leitet WordPress auf HTTPS um, der Proxy schickt die nächste Anfrage wieder per HTTP – und du landest in einer Endlosschleife (ERR_TOO_MANY_REDIRECTS). Teil WordPress das ursprüngliche Protokoll in der wp-config.php mit, oberhalb der Zeile /* That's all, stop editing! */:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

Mach das nur, wenn dein Proxy den Header zuverlässig setzt. Bei Cloudflare ist die sauberere Lösung, den SSL/TLS-Modus von „Flexibel“ auf „Vollständig (streng)“ umzustellen und auf dem Server ein Zertifikat einzurichten. Mehr dazu im Ratgeber HTTP auf HTTPS weiterleiten und im Cloudflare-Ratgeber.

Ketten nach mehreren Änderungen

Wurde ein Beitrag zweimal umbenannt, entsteht schnell /a/ → /b/ → /c/. Pass alte Regeln so an, dass sie direkt auf die finale URL zeigen. Wie du solche Ketten findest und auflöst, liest du unter Redirect-Ketten.

Häufige Fragen

Brauche ich für Weiterleitungen in WordPress ein Plugin?

Nein. Du kannst Regeln unter Apache in die .htaccess schreiben, in die nginx-Konfiguration eintragen oder in PHP wp_safe_redirect() verwenden. Ein Plugin lohnt sich, wenn Redakteure ohne Serverzugang Weiterleitungen pflegen sollen oder du ein 404-Log möchtest.

Sendet wp_redirect() einen 301 oder einen 302?

Standardmäßig einen 302. Übergib den Status als zweites Argument, etwa wp_safe_redirect($url, 301);, und ruf direkt danach exit; auf.

Warum funktioniert meine WordPress-Weiterleitung nicht?

Meist liefert ein Seiten-Cache noch eine alte Kopie, die .htaccess-Regeln stehen unter dem WordPress-Block oder nach wp_redirect() fehlt das exit. Auch dein Browser kann einen älteren 301 gecacht haben. Teste die URL mit dem Redirect-Checker, der deinen Browser-Cache nicht nutzt.

Wie behebe ich ERR_TOO_MANY_REDIRECTS in WordPress?

In der Regel erkennt WordPress HTTPS nicht, weil ein Proxy oder CDN die Verschlüsselung beendet. Setz in der wp-config.php anhand von X-Forwarded-Proto den Wert $_SERVER['HTTPS'] = 'on' oder stell Cloudflare auf „Vollständig (streng)“. Prüf außerdem, ob Website-Adresse und Serverregeln bei www und HTTPS übereinstimmen.

  • .htaccess-Weiterleitung auf Apache

    So leitest du einzelne Seiten und ganze Domains per .htaccess weiter: mod_alias oder mod_rewrite, fertige Regeln für die typischen Fälle und wie du Schleifen und Ketten vermeidest.

  • Weiterleitungen mit nginx

    Fertige nginx-Konfiguration für 301-Weiterleitungen: einzelne Seiten, Muster, ganze Domains, HTTPS und www in einem Hop und Hunderte URLs per map.

  • Weiterleitungen mit Cloudflare

    Cloudflare kann Weiterleitungen direkt am Edge beantworten, bevor eine Anfrage deinen Server erreicht. So funktionieren Single Redirects, Bulk Redirects und Always Use HTTPS – und so verhinderst du, dass sie sich mit deinem Server in die Quere kommen.

  • Weiterleitungen in Next.js

    In Next.js kannst du an vier Stellen weiterleiten: in der Konfiguration, in der Middleware, im Servercode des App Routers und über die Option trailingSlash. Jede davon sendet standardmäßig andere Statuscodes – es lohnt sich also, die Unterschiede zu kennen.

  • Weiterleitungen bei Vercel und Netlify

    Bei Vercel und Netlify fasst du keine Webserver-Konfiguration an. Weiterleitungen stehen in einer Datei in deinem Repository oder im Dashboard, und das Edge-Netzwerk der Plattform liefert sie aus. So funktionieren beide – und hier unterscheiden sie sich.

  • Weiterleitungen mit Microsoft IIS

    IIS bietet dir zwei Wege für Weiterleitungen: die eingebaute HTTP-Umleitung und das URL-Rewrite-Modul. Hier erfährst du, wann du welches nimmst – mit web.config-Beispielen zum Kopieren.