Seitenstruktur ändern: Ordner in einer URL entfernen und mit Regex weiterleiten

0

Eine übersichtliche Informationsarchitektur hilft Nutzern und Suchmaschinen, sich auf einer Webseite zurechtzufinden. Entsprechend wichtig ist es, die Seitenstruktur gut zu pflegen. Dabei kann es vorkommen, dass man Unterordner entfernen oder hinzufügen möchte. Hier die Anleitung dafür:


Inhaltsverzeichnis:

  1. SQL-Statement für Search and Replace
  2. Direkt zur Regex

Mein Wunsch: Optimieren der Informationsarchitektur durch Löschen von Ordnern

In meinem Reiseblog hatte ich ursprünglich einen Ordner für die Kontinente erstellt. Typische URLs von Ländern waren beispielsweise
https://reisememo.ch/europa/schweiz
https://reisememo.ch/afrika/botswana
https://reisememo.ch/suedamerika/chile
https://reisememo.ch/asien/philippinen

Auf den Länderseiten publiziere ich eine Übersicht der Reisetipps. Seiten wie /asien/oman oder /europa/kroatien werden dadurch recht häufig aufgerufen.

Aber für die Kontinenteseiten hatte ich keine Inhalte: Es war nie ein Ziel, für „Reisen in Europa“ gefunden zu werden.

Deshalb will ich testen, ob es aus SEO-Gründen förderlich ist, die Ordner der Kontinente zu entfernen: Die Länderseiten und die effektiven Reisetipps sind damit näher an der wichtigen Homepage. Das müsste sie wichtiger machen als wenn sie weiter weg sind von der Homepage.

Ich ersetze also die längeren Kontinente-URL durch die kürzeren Länder-URL:
https://reisememo.ch/europa/schweiz wird zu
https://reisememo.ch/schweiz

Oder im Falle von Brunch-Tipps wird aus
https://reisememo.ch/europa/schweiz/brunch-zuerich
https://reisememo.ch/schweiz/brunch-zuerich

Umstellen der URL-Struktur in den Permalinks (WordPress)

Im WordPress-Menu „Einstellungen/Permalinks“ findet man die Konfiguration der URLs eines Blogs.

Wer das nicht verstellt hat, zeigt seinen Lesern als URL beispielsweise die ID des Artikels, z.B. /?p=123

Das ist weder für Leser noch Suchmaschinen besonders hilfreich.

Auf vielen Blogs sieht man auch URLs mit Datumsangaben wie /2020/02/08/beispielbeitrag. Dadurch liegt der Beispielbeitrag 3 Unterordner weit weg von der Homepage und kann dadurch ja wohl nicht so wichtig sein.

Zudem bietet es Lesern nur sehr limitierten Mehrwert, das Datum in der URL zu lesen.

Ich empfehle die Einstellung „Benutzerdefiniert“ mit dem Eintrag /%category%/%postname%

Dies generiert eine URL mit der vorangehenden Domain und dann Unterordner für allfällige Kategorien gefolgt vom Namen des Artikels.

Die Kategorien, in meinem Fall die Länder, werden im WordPress-Menu hinterlegt unter „Beiträge/Kategorien“. Dort kann man auch Hierarchien hinterlegen wie eben /europa/schweiz.

Für mein Vorhaben lösche ich die Kategorien aller Kontinente. Die darunter angeordneten Länder verschiebt WordPress automatisch um eine Ebene nach oben.

Theoretisch stellt WordPress jetzt alle URLs automatisch um und der Blog funktioniert weiterhin.

Allerdings sollte man Artikel untereinander verlinken, um Lesern Mehrwert zu bieten. Diese internen Links funktionieren jetzt nicht mehr, da sie ja noch den Kontinent enthalten.

Korrigieren aller internen Links in myPhpAdmin

Bei einem über Jahre entwickelten Blog müssen jetzt hunderte von URLs und interne Links korrigiert werden. Im Falle von Reisememo sind über 500 Artikel betroffen.

Um die URLs nicht von Hand korrigieren zu müssen, ändert man sie per „Suche und Ersetzen“ direkt in der Datenbank.

Die meisten Hosting-Dienstleister bieten einen Zugang zu phpMyAdmin: Hier findet man alle redaktionellen Inhalte des Blogs in Tabellenform organisiert.

Um nun eine Änderung in allen Blogbeiträgen vorzunehmen, wählt man links die betroffene Datenbank und dann oben den Reiter „SQL“.

Folgende SQL-Abfrage ändert in allen Artikeln (wp_posts) in den Inhalten (post_content) den Pfad mit Australien auf einen Pfad ohne Australien:

UPDATE wp_posts SET post_content = replace(post_content, '/australien/', '/');

Dann drückt man unten auf „Simulate query“, wenn man nicht ganz sicher ist oder auf „Go“, um die Änderung in allen Artikeln vorzunehmen.

SQL-Statement für phpMyAdmin zur Entfernung eines Ordners

SQL Befehl um einen bestimmten Ordner in allen Dokumenten zu entfernen

Dieses Vorgehen ist zwar sehr effizient, aber auch sehr gefährlich: Ist der Änderungsbefehl falsch, können auch viele andere Inhalte verändert werden und der Blog läuft nicht mehr rund.

Deshalb teste ich solche Umstellungen immer zuerst auf einer Testversion des Blogs.

301-Weiterleitungen einrichten für externe Links (Regex)

Da die Kontinente-URLs gelöscht wurden, entstehen dadurch „Löcher“: Ist eine Unterseite des Blogs von aussen verlinkt, läuft dieser Link ins Leere.

Deshalb muss man „Weiterleitungen“ einrichten: Die alten URLs werden auf die neuen weitergeleitet. Und zwar für immer. Im Tech-Lingo ist das eine permanente 301-Weiterleitung (301 redirect).

Dafür empfehle ich das SEO-Plugin von Yoast oder von Rank Math. Im Yoast-Menu „SEO/Redirects“ trägt man die alte und neue URL ein und setzt dies auf 301 permanente Weiterleitung.

Beispiel einer 301 - Permanenten Weiterleitung

301 – Permanente Weiterleitung

Für die Umstellung meiner 6 Kontinente wäre das von Hand kein Problem. So leite ich reisememo.ch/europa beispielsweise weiter auf reisememo.ch/schweiz.

Aber es könnte ja auch jemand eine Unterseite verlinkt haben mit der beispielhaften früheren URL https://reisememo.ch/europa/schweiz/palpuognasee-piz-ela-albulapass

Alle über 500 Artikel will ich nicht von Hand auf die neue URL ohne Kontinent weiterleiten.

Für solche Fälle gibt es die sogenannten Regular Expressions oder abgekürzt Regex: Mittels einer Regel kann man festlegen, dass alle früheren Kontinente aus dem Pfad ausgelassen werden sollen.

Der Befehl lautet für mein Beispiel
\/europa\/(.*)|\/afrika\/(.*)|\/asien\/(.*)|\/nordamerika\/(.*)|\/suedamerika\/(.*)

Und die daraus folgende URL soll sein /$1|$2|$3|$4|$5

301-Weiterleitungsbeispiel mit einer Regular Expression (Regex)

301-Weiterleitungsbeispiel mit einer Regular Expression (Regex)

Was etwas kryptisch aussieht, weil ich alle Kontinente in einer Zeile bearbeite, lässt sich einfacher darstellen für die beispielhafte Änderung nur eines Ordners:

\/europa\/(.*)

Und die Weiterleitung auf die neue URL /$1

Weil bei Regular Expressions der Slash „/“ ein Sonderzeichen ist, muss man diesen zuerst mit Backslash „\“ sozusagen „deaktivieren“ (escapen im Jargon). Deshalb die Zeichenfolge „\/“ für die Angabe eines „/“.

„\/europa\/“ wird also interpretiert als „/europa/“.

Dahinter will ich alle möglichen Artikelpfade in eine Variable schreiben und diese dann für die neue URL wiederverwenden.

Der Pfad „/$1“ wird also nach dem „/“ alles einsetzen, was in der alten URL nach „/europa/“ noch folgte.

Mit dem Pipe-Zeichen „|“ kann man Oder-Verknüpfungen erfassen. Die weiteren „Oder-Varianten“ werden dann in die weiteren Variablen $2, $3, etc. geschrieben.

/$1|$2|$3 etc. schreibt hinter dem „/“ also entweder die erste Option oder die zweite oder die dritte etc.

Testen kann man seine Regex im mächtigen Tool von regex101.com. Hier findet man mein Beispiel inklusive Test-URLs: Für jene mit Kontinent soll die Regel greifen, für jene ohne Kontinent nicht.

Rechts wird im Tool auch jeder Befehl erklärt. Sehr hilfreich ;-)

Regex-Editor-101 am Beispiel von Reisememo

Editor zum Testen von Regular Expressions

Anpassen der Navigation

Die Änderung der URL-Struktur kann natürlich auch einen Einfluss haben auf die Navigation.

In meinem Beispiel musste ich die Navigation nach Kontinenten manuell nachbauen, da sie jetzt nicht mehr via URL verfügbar ist.

Anpassung der Menustruktur in WordPress

Manuelle Anpassung der Menustruktur in der Hauptnavigation

Analog zu meinem Beispiel kann man natürlich auch Ordner neu hinzufügen.

Viel Erfolg bei der Optimierung Deiner URL-Struktur!

Danke fürs teilen meines Beitrags ;-)

Wer schreibt hier?

Walter Schärer bloggt über neuste Internet-Trends im Online Marketing, Social Media, Blogs, Web Analytics, SEO, Mobile und so.

Hinterlässt Du einen Kommentar?