WordPress Permalinks: Datum aus URL entfernen & weiterleiten

WordPress war ursprünglich dafür gedacht ein digitales Tagebuch, einen Blog, zu führen. Doch davon sind die meisten mit WordPress betreibenen Seiten weit entfernt. An diversen Stellen in WordPress begegnet man diesem ursprünglichen Gedanken. Besonders in den Standardeinstellunen für Permalinks. Hier wird als Standardeinstellung die URL-Struktur für einen Beitrag aus dem Datum mit Jahr, Monat, Tag und dem Beitragstitel z.B. /2020/02/20/beispielbeitrag/ generiert. Perfekt für ein Tagebuch aber schlecht für eine Website wo man regelmäßig Änderungen an seinem Inhalt vornimmt um diesen aktuell zu halten.

Standardeinstellungen für Permalinks in WordPress

Das Problem

Ändert man in WordPress das Beitragsdatum, ändert sich auch die URL-Struktur. Der Beitrag ist dann unter dem neuen Jahr/Monat/Tag erreichtbar aber nicht mehr unter dem alten Datum. Stattdessen informiert WordPress unter der alten URL, dass kein Beitrag gefunden werden konnte und gibt pflichtbewusst den 404 Not Found Status zurück.

Beispiel:

Beispielbeitrag veröffentlicht am 19. November 2018:

https://go-around.de/2018/11/19/beispielbeitrag/ → 200 Found

Beispielbeitrag aktualisiert am 20. Februar 2020:

https://go-around.de/2018/11/19/beispielbeitrag/ → 404 Not Found
https://go-around.de/2020/02/20/beispielbeitrag/ → 200 Found

Damit hat man zwei Probleme:

  1. Suchmaschinen z.B. Google findet den Beitrag nicht mehr und schmeißen ihn aus dem Index. Der Beitrag unter der neuen URL interpretieren die Suchmaschinen als neuen Beitrag und es muss erst neues Vertrauen aufgebaut werden d.h. die Rankings gehen sehr wahrscheinlich verloren.
  2. Für die ursprüngliche URL gesammelte Backlinks von anderen Seiten führen auf die 404-Seite und sind damit wertlos. Im schlimmsten Fall wird der Link sogar vom Seitenbetreiber entfernt, weil der Inhalt scheinbar gelöscht worden ist.

Zusammengefasst: Für die Suchmaschinenoptimierung ein ganz großer Stolperstein!

An der Stelle könnte man WordPress eigentlich zutrauen statt einer 404-Seite anhand des Slugs beispielbeitrag nach dem Beitrag zu suchen und den Leser zu der korrekten URL weiterzuleiten: Tut WordPress aber leider nicht!

Das heißt jedes Mal wenn man das Beitragsdatum anpasst, muss man per Hand einen Redirect erstellen z.B. mit einem Plugin wie Redirection. Alternativ könnte man komplett darauf verzichten das Veröffentlichungsdatum jemals zu ändern. Meiner Meinung nach aber keine gute Idee. Durch ein Update signalisiert man den Suchmaschinen, dass man den Beitrag aktuell hält. Außerdem wird das Veröffentlichungsdatum häufig auch in den Suchergebnissen angezeigt.

Suchergebnisse WordPress Permalink
Veröffentlichungsdatum in den Google Suchergebnissen

Permalinks umstellen

Wer WordPress intensiv für seine Website nutzt und nicht gerade ein Tagebuch umsetzen will, kommt früher oder später an den Punkt wo er die Standardeinstellungen für Permalinks von WordPress ändern will und in der URL nur den Beitragsnamen haben möchte. Die Änderung kann man innerhalb von wenigen Sekunden in Einstellungen › Permalinks erledigen. Schon sind alle Beiträge, auch alle alten, unter https://go-around.de/beitragsname/ erreichbar.

Die Änderung hat aber wiederum zur Folge, dass alle alten URL mit Jahr, Monat, Tag einen 404-Fehler ausgeben. Auch an dieser Stelle könnte WordPress eingreifen und einen Redirect durchführen, tut es aber nicht.

Redirects setzten

Also müssen wir selber ran. Allerdings macht es wirklich kein Spaß im schlimmsten Fall für mehrere Hundert Beiträge manuell Weiterleitungen zu erstellen. Helfen kann uns dabei aber zum Glück ein bisschen Magie Reguläre Ausdrücke, kurz Regex.

Mit diesem regulären Ausdruck kann man die alte URL-Struktur identifizieren und anschließend weiterleiten:

^\/\d{4}\/\d{2}\/\d{2}\/(.*)$
Info

Der Reguläre Ausdruck wird nur auf den Pfad z.B. /2019/02/20/beispielbeitrag/ und nicht auf die ganze URL inkl. Protokoll z.B. https und Domain z.B. go-around.de

Das sehr zwar auf dem ersten Blick wirklich nach Magie aus aber wenn man es sich Stück für Stück anschaut ist es eigentlich gut verständlich:

  • ^ markiert den Start der Zeile
  • \/ ist ein normaler Slash / escapes mit einem \ davor, damit es nicht als Anweisung interpretiert werden kann.
  • \d{4} sind genau vier {4} Zahlen \d für das Jahr
  • \/ ist ein normaler Slash
  • d{2} sind genau zwei {2} Zahlen \d für den Monat
  • \/ ist ein normaler Slash
  • d{2} sind genau zwei {2} Zahlen \d für den Tag
  • \/ ist ein normaler Slash
  • (.*) ist die Gruppe () die wir in dem Text suchen z.B. beispielbeitrag und kann aus beliebig vielen * Zeichen . bestehen.
  • $ markiert den Ende der Zeile

Mit seiner URL-Strucktur testen und damit herumspielen kann man auf Regexr.com.

Anschließend benutzen wir die gefunden (erste) Gruppe $1 um den Besucher zu der neuen URL weiterzuleiten:

/$1/

Tipp: Für weitere Permalink-Strukturen z.B. /beispielkategorie/beispielbeitrag/ bietet Yoast einen Tool an den korrekten Redirect zu erzeugen. (Danke geht an Torsten)

Info

Habt ihr eurem Pfad z.B. ein /blog/ vorangestellt, müsst ihr auch dieses berücksichtigen. Der korrekte reguläre Ausdruck sieht dann so aus:

^\/blog\/\d{4}\/\d{2}\/\d{2}\/(.*)$

Und das ist euer neuer Pfad:

/blog/$1/

Konfiguration

Die Umleitung mit dem regulären Ausdruck können wir an zwei Stellen anwenden (man sollte sich aber für eine Entscheiden):

  1. Webserver: Ihr könnt die Umleitung direkt in der Konfiguration eures Webservers z.B. Apache oder NGINX platzieren. Die Umleitung ist dadurch sehr schnell aber ihr dürft die Konfiguration nicht z.B. bei einem Hosterumzug vergessen zu übernehmen
  2. WordPress Plugin: Es gibt eine Reihe von WordPress Plugins die eine Umleitung mit Regex erlauben z.B. das kostenfreie Redirection oder der Redirect Manager als Bestandteil von Yoast SEO Premium. Diese Variante ist nicht so performant, geht aber außer bei einem Pluginwechsel nicht verloren.

Hier die notwendigen Konfigurationen:

Plugin: Redirection

Beim kostenfreien Plugin Redirection müsst ihr unter Werkzeuge → Redirection → Eine neue Weiterleitung hinzufügen folgende Einstellungen machen:

  • URL-Quelle: ^\/\d{4}\/\d{2}\/\d{2}\/(.*)$
  • Optionen: Regex anhaken wichtig!
  • Ziel-URL: /$1/
Redirections WordPress Plugin Einstellungen JahrMonatTag
Einstellungen für Redirection

Testet anschließend die Weiterleitungen mit mehreren alten Beiträgen!

Plugin: Yoast SEO Premium

Unter SEO → WeiterleitungenRegex-Weiterleitungen müsst ihr folgendes Eingeben:

  • Art: 301 Dauerhaft umgezogen
  • Regulärer Ausdruck: ^\/\d{4}\/\d{2}\/\d{2}\/(.*)$
  • URL: /$1/
Yoast SEO Weiterleitungen Einstellungen JahrMonatTag
Einstellungen für Yoast SEO Premium

Anschließend solltet ihr die Einstellungen mit mehreren alten URLs testen.

Webserver: NGINX

Beim Webserver NGINX müsst ihr folgendes Snipped vor dem ersten location / {} Block einfügen:

# Redirect Year/Month/Day Permalink Structure to Postname
location ~ "^\/\d{4}\/\d{2}\/\d{2}\/(.*)$" {
    rewrite "^\/\d{4}\/\d{2}\/\d{2}\/(.*)$" /$1 permanent;
}

Testet anschließend die neue Konfiguration mit nginx -t und startet NGINX mit service nginx restart neu.

Webserver: Apache

Bei Apache müsst ihr in eurer .htaccess vor der Konfiguration für WordPress folgendes Snipped einfügen:

# Redirect /Year/Month/Day Permalink Structure to Postname
RedirectMatch permanent "^\/\d{4}\/\d{2}\/\d{2}\/(.*)$" /$1/

Anschließend speichern und die Weiterleitung ausgiebig testen!

Fazit

Ich sehe leider immer wieder, dass WordPress-Seitenbereiber über diese, meiner Meinung nach nicht mehr zeitgemäße, Standardeinstellung stolpern und bei einer Änderung alle Backlinks in der Tonne landen. Mit der richtigen Weiterleitung verliert ihr keine Backlinks und müsst die Umstellung nicht fürchten.

4 Kommentare zu “WordPress Permalinks: Datum aus URL entfernen & weiterleiten

  1. Ich nutze seit dem Anfang meines Blogs die Struktur Domain/Kategorie/Beitrag. Damit bin ich bisher gut gefahren. Ich hielt die Datumsangaben in der URL immer für falsch. Dennoch ist das ein wissenswerter Artikel. Danke dafür.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.