Kategorien
Web und virtuelles

WordPress Permalinkstruktur nachträglich anpassen

Da ich gerade an weiteren Optimierungen und Anpassungen meiner Website bin und ich durch die Problematik mit den .IO-TLDs vieles nicht wie geplant einfach umbauen kann, wird das jetzt alles hier einfließen.

Die Arbeit ist eigentlich die gleiche, wenn nicht sogar etwas weniger.

Was habe ich diesmal getan?

Wie in der Überschrift schon steht habe ich die Struktur der Permalinks innerhalb von WordPress angepasst.

Diese Permalinks sind für die URLs deiner Seiten, Beiträge, Kategorien, Schlagwörter und bei Shops z.B. der Produkte verantwortlich. Hier stellt du sozusagen das Grundgerüst deiner Website auf.

Etwas was man einmal zu Beginn der Website einstellt und dann nie wieder anfassen sollte. Denn wenn man das einfach mal so umstellt kann es ganz schnell dazu kommen das sehr viele externe Links, die auf deine Seite verweisen, nicht mehr funktionieren. Ganz vorn mit dabei sind da natürlich auch die Einträge in den Suchmaschinen.

Deswegen solltest du dir schon im vornherein sehr gut Überlegen wie du das ganz gern umgesetzt haben möchtest.

Zum Beginn dieser Website hatte ich mich für ..com/%year%/%monthnum%/%postname% entschieden und das hat mir auch wirklich lange so gefallen. Jetzt hat sich meine Meinung darüber doch verändert und so musste ich das jetzt auch anpassen.

Im WordPress Backend unter Einstellungen und unter den Reiter Permalinks findest du die Einstellmöglichkeiten. Hier kannst du aus verschieden URL-Strukturen wählen oder auch deine eigene unter Benutzerdefiniert hinterlegen.

Ich wollte es minimalistischer und gern so das man direkt über die URL erkennt was Seiten und was die Beiträge sind. Das wäre zwar auch mit dem Jahr/Monat gegangen aber an sich nutzt die Funktion dahinter doch eh niemand mehr.

Da ich mich Aktuell auch in das Thema Analytics einarbeite finde ich die Aufteilung in die einzelnen Jahre wirklich nicht schön. Mit der Anpassung werden ebenfalls die Besucherstatistiken wesentlich übersichtlicher und leichter auswertbar werden.

Screenshot → WordPress Backend, Einstellungen, Permalinks

Ich habe mich deswegen für die neue URL-Struktur ..com/blog/%postname% entschieden.

Natürlich hätte ich hier noch das ./blog/. weglassen können, dann wäre aber die Klarheit und Trennung zwischen Seiten und Beiträgen nicht mehr wie gewünscht gegeben. Was für mich aber noch dafür spricht ist, dass wenn du den %postname% weglässt, du direkt in die Blog-Übersicht gelangst 🤯😜

Weiterleitungen nicht vergessen

Wie ich hier weiter oben schon geschrieben hatte, wäre eine einfach Umstellung nicht so gut für Links die auf deine Beiträge verweisen. Deswegen solltest du dir im Vorfeld schon ein paar Gedanken zur Weiterleitung der alten URLs machen.

Du solltest dir also am besten eine Liste erstellen in der alle alten URLs deiner Beträge stehen. Ich habe hierfür ein kleines PHP-Script genutzt um die URLs zu exportieren.

<?php

include "wp-load.php";

$posts = new WP_Query('post_type=any&posts_per_page=-1&post_status=publish');
$posts = $posts->posts;

header('Content-type:text/plain');
foreach($posts as $post) {
    switch ($post->post_type) {
        case 'post':
            $permalink = get_permalink($post->ID);
            break;
    }
    echo "{$permalink}\n";
}

Mit dieser Liste kannst du dann ganz einfach die Weiterleitungen deinen wünschen anpassen. Ich habe das ganze über .htaccess Redirects gelöst.

Das Schema dafür sieht wie folgt aus:

Redirect 301 /2020/06/beitragstitel https://example.com/blog/beitragstitel

Sobald du deine Liste also fertig hast setzt du diese in die .htaccess ein und kannst auch die Permalinkstruktur umstellen.

Der Redirect 301 sorgt jetzt dafür das alle alten Verlinkungen auf die neuen URLs weitergeleitet werden. Auch die Suchmaschinen werden das mit der Zeit erkennen und deine alten URLs in die neuen umwandeln. Somit sollte es beim Ranking nicht all zu große Probleme geben 😉

8 Antworten auf „WordPress Permalinkstruktur nachträglich anpassen“

Wenn die URLs sich im Zuge deiner Aufräumaktion nicht ändern, kannst du mit einem „Regulären Ausdruck“ (RegEx) eine Weiterleitung für ganze Verzeichnisse anlegen.

Beispiel /news/* zu /blog/*
RewriteRule ^news/(.*)$ /blog/$1 [R=301,L]

Beispiel /2020/06/* zu /blog/*
RewriteRule ^(\d{4})/(\d{2})/(.*)$ /blog/$1 [R=301,L]

Solltest du einzelne URLs jedoch anpassen, musst du deren Redirects in der .htaccess vor der RewriteRule aufführen. Das „L“ sorgt dafür, dass bei einem Treffer weiteren Rewrites ausgeführt werden.

Ja das Thema mit Plugin hatte ich auch schon kurz bei Twitter. Bei so etwas endgültigen und statischem wie diese Weiterleitungen setze ich lieber auf ein paar Zeilen Text 😉

Ich habe aber nach der Umstellung auch einmal das 404-Log geleert und schau gerade was da so aufläuft. Da nutze ich wiederrum ein Plugin sehr gern 😂

Danke dir auch noch für die Verlinkung deines wesentlich ausfühlicheren Beitrags zu Umstellung der Permalinkstruktur 👍

Ist das noch so wie früher, dass man bei einer Multisite-Installation als Permalink „blog“ nicht verwenden darf, wobei ich nie kapiert habe, warum nicht …

Nein es ist doch eigentlich so das man keine Child-Website /blog nennen darf, weil der Standart der Main-Website /blog in der Permalinkstruktur enthält. Aber auch das könnte man recht einfach umgehen 😉

Ist halt geschichtlich geschuldet, so das keine Website bei einem Umbau auf Multisite kaputt geht 🤷🏻‍♂️

nein, natürlich nennt man (ich) keine Unterseite „blog“ 😉
Aber ich hatte vor langer Zeit einmal eine Multisite mit Domainmapping, die Unterseiten waren als Unterseiten und nicht als Subdomains angelegt. Eine Unterseite hatte ich dann auf eine Domain xyz.de gemappt, konnte dort aber keinen Permalink „blog“ anlegen (wie auf der Hauptseite, obwohl die auf eine ganz andere Domain gemappt war). Das meinte ich …

Das ist wirklich komisch, denn auch dieses WordPress hier läuft als Multisite und ich hatte kein Problem bei der Umstellung.

Läuft aber auch schon ein paar Jahre, kann also nicht 100%ig sagen das ich da nichts angepasst haben 🤭

Schreibe einen Kommentar

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