WordPress: Datum aus URL entfernen


Ich habe das Datum aus meinen URLs entfernt. Ich hatte bis jetzt immer gedacht, dass es äußerst sinnvoll wäre, zumindest das Datum in der URL mitzuführen.

Nach ein paar Gesprächen mit meinem Kollegen Martin über URLs musste ich zu dem Schluss kommen, dass es tatsächlich keinen tieferen Sinn hat, wenn man durch solche Dinge die URL künstlich aufbläst. Also habe ich alle meine URLs bis auf den Zusatz „/blog/“ gekürzt.

Was ist mit Google News

Aber braucht man das nicht, um bei Google News aufgenommen zu werden?“ Nein, braucht man nicht mehr laut dem Google Support, wenn man eine News Sitemap einreicht. Auch aus SEO Gesichtspunkten gibt es eigentlich nur Gründe für eine Verkürzung der URL. Also gibt es keinen Grund mehr, nicht die URLs ganz im Sinne von Verschlichter Dich zu vereinfachen.

Neue URL Struktur definieren

Das Permalinkschema in WordPress befindet sich unter Settings -> Permalinks Das habe ich entsprechend auf /blog/%postname%/ gestellt, damit meiner Artikel die URL https://marc.tv/[Artikel-Titel] bekommen. Schon haben alle Artikel die neue URL Struktur. Das war der einfache Teil.

Alte URLs umleiten

Da die alten URLs natürlich überall verlinkt waren und ich nicht möchte, dass diese Links ins Leere führen, habe ich sie umgeleitet. Das geht am einfachsten direkt über die .htaccess Datei auf dem Server, damit man WordPress damit nicht belasten muss. Hier die RegEx für die URL Rewrite Regel. Diese leitet alles mit dem Muster /blog/[ZAHL]/[ZAHL]/[ZAHL]/titel-des-artikels per 301 „Moved Permanently“ auf /blog/titel-des-artikels um.

RewriteEngine On
RedirectMatch 301 /blog/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ /blog/\

Verlinkte URLs innerhalb von WordPress umschreiben

Das größere Problem ist, dass überall im Inhalt der Artikel und Kommentare die alten URLs verlinkt sind. Das ist natürlich durch die Umleitung in der .htaccess abgefangen worden aber schön ist es natürlich nicht, wenn die eigene Seite auf eine Umleitung verlinkt. Man könnte direkt auf Datenbank per Suchen und Ersetzen und ein paar Regulären Ausdrücken rumpfuschen. Ich habe mich deswegen dazu entschieden, lieber ein WordPress Plugin namens Search Regex zu bemühen. Dort habe ich die für meine URL Struktur passende RegEx eingetragen:

Search Pattern
|marctv.de/blog/(d*)/(d*)/(d*)/|

Replace Pattern
marctv.de/blog/

Haken bei RegEx setzen nicht vergessen!

search-regex

Dies habe ich für die Tabellen Post Content und Comment Content gemacht um die URLs in Artikel und den Kommentaren zu ersetzen. „Search“ sucht nur nach dem „Search Pattern“ und listet alle Fälle auf. „Replace“ zeigt an, was wie ersetzt wird aber führt den Befehl noch nicht aus. „Replace und Save“ macht dann ernst und ersetzt alle URLs.

Bei Kommentaren funktioniert Search Regex nicht!

Ja, das ist leider richtig. Es gibt irgendwo einen Bug im Plugin den man aber recht einfach umgehen kann. In der Datei /search-regex/view/admin/search.php in Zeile 23 setzt man einfach das Limit auf eine absurd hohe Zahl:

<?php echo $this->select( array( '1000000' => __( 'No limit', 'search-regex' ), '10' => '10', '25' => '25', '50' => '50', 'works' => '100000' ), $limit ) ?>

Das ist natürlich mit der heißen Nadel von hinten durchs Knie und ziemlich billig aber es funktioniert. Solange bis der Plugin-Entwickler endlich diesen nervigen Fehler behebt.

„www“ Subdomain aus der URL entfernen

Wenn man schon mal dabei ist, kann man auch die sinnlose www-Subdomain entfernen. Es macht die URL kürzer und mittlerweile denke ich, dass jeder mitbekommen hat, dass es sich um einer Adresse im World Wide Web handelt – ohne, dass man es an den Anfang der URL schreibt. In WordPress entfernt man unter Settings -> General bei der Site-URL und Domain das „www“. Die Weiterleitung aller URLs passiert wieder in der .htaccess So wird http://www.marctv.de zu https://marc.tv

RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/\ [R=301,L]

Fazit

Vielleicht hilft diese Anleitung dem ein oder anderen, der das selbe vor hat wie ich. Wenn man ein bisschen aufpasst, kann eigentlich wenig passieren. Innerhalb weniger Tage Google dann auch schon die Umleitung bemerkt und seinen Index entsprechend angepasst.


Beitrag veröffentlicht

in

von

Kommentare

11 Antworten zu „WordPress: Datum aus URL entfernen“

  1. Avatar von ben_
    ben_

    Hmm … ich finde das ja noch ganz praktsich. SEO Gründe gibt es dafür latürnich nicht. Also würde mich SEO-Gründe interessieren. Damit habe ich 2003 aufgehört. Warum ich es praktisch finde: Es zeigt schon an der URL an, dass es sich um einen Blog-Artikel aus der regulären Chronoligie handelt und nicht um eine statische Seite (von denen ich ja auch zunehmend mehr habe). Außderdem verweißt es indirekt so nett auf die Chronologischen Archive.

    Und überhaupt: Cool URIs don’t change!

  2. Avatar von Usul
    Usul

    Ich lese mich jetzt schon den halben Sonntag durch das Blog hier, tolle Sache! Allerdings macht mir die hier angesprochene Änderung das Leben schon ein bisschen schwerer, da ich mich gern durch diverse Links und Teaser-Bilder treiben lasse, aber dann schwer sehen kann, wo ich zeitlich gelandet bin. Das ist bei manchen Artikeln nicht ganz unerheblich zu wissen! Es steht natürlich unter jedem Beitrag drunter, aber das ist irgendwie blöd, beim Lesen sich zu fragen, von wann ist der Artikel, und dann immer erst runterscrollen zu müssen. Deswegen: Es wäre schick, wenn man den Zeitstempel des Artikels irgendwo oben sehen könnte, entweder in der URL oder im oberen Bereich des Artikels.

    Alternativ, wegen der Reduzierung aufs Wesentliche: Zeitangaben nur bei Artikel älter als Zeitpunkt X (ein Monat vielleicht?) im oberen Bereich einblenden.

    1. Avatar von Marc
      Marc

      Mhhh, ich gucke mal was sich machen lässt. Schön, dass es dir gefällt. :)

  3. Avatar von Felix
    Felix

    Vielen Dank, extrem hilfreich!

  4. Avatar von Marc
    Marc

    Nun ist auch noch /blog/ aus der url geflogen. Natürlich werden alle alten URLs mit einem 301 Status Code weitergeleitet. Nun sind die URLs so kurz wie es nur geht.

  5. Avatar von Wolf
    Wolf

    Hallo Marc,

    prima Artikel. Leider erhalte ich nach der Änderung der .htaccess einen Internal Server error.

    Ich bin mir nicht sicher ob ich Deinen Eintrag an der richtigen Stelle in der .htaccess eingefügt habe. So sieht aktuell meine .htaccess Datei aus:

    # BEGIN s2Member GZIP exclusions

    RewriteEngine On
    RewriteMatch 301 /blog/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ /blog/$4
    RewriteBase /
    RewriteCond %{QUERY_STRING} (^|\?|&)s2member_file_download\=.+ [OR]
    RewriteCond %{QUERY_STRING} (^|\?|&)no-gzip\=1
    RewriteRule .* – [E=no-gzip:1]

    # END s2Member GZIP exclusions

    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress

    Viele Grüße
    Wolf

  6. Avatar von Julian
    Julian

    Schau an, Marc. So begegnen wir uns wieder. :)

    Ich stelle gerade meinen Blog auf „Nicht-mehr-mit-Datum“ um. Da hast Du mir echt geholfen!

    1. Avatar von Marc
      Marc

      Gerne. Und s das noch aus dem Urlaub. ;)

  7. Avatar von Grischa
    Grischa

    Hallo Marc,

    genau danach habe ich gesucht. Ich habe das aktuelle WordPress und benutze WordPress seit fast 13 Jahren.

    Leider funktioniert die URL Rewrite Regel:
    RedirectMatch 301 /blog/([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ /blog/$4
    Bei mir nicht.

    Ich habe es im Icognito Modus von Chrome getestet, jedoch muss ich wohl trotzdem mindestens 30min warten, bis ich sicher sein kann das er die htaccess Regeln nutzt (ich nutze auch nginx und da kann man ja auch manche Sachen regeln).
    Wenn ich die alte URL-Struktur mit Datum nutze kommt:
    „This is somewhat embarrassing, isn’t it?“

    Wenn ich mit der Einstellung wie jetzt mit Datum,Titel in URL, das Datum rausnehme als Test, leitet er mich korrekt auf die Seite um.

    So sieht der Rewrite Teil meiner htaccess jetzt ohne Permalink Änderung aus:

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /blog/index.php [L]

    1. Avatar von Marc
      Marc

      Es gibt Seiten im Netz, die du nutzen kannst, um den Redirect zu testen.

      Der Chrome cached die Redirects. Aber ich meine nicht im Developer Mode mit Cache abgeschaltet.

      Was sagt denn die Redirect chain?

  8. Avatar von Ralf
    Ralf

    Hi Marc,
    vielen Dank, für mich als Anfänger war es sehr hilfreich.

Schreibe einen Kommentar

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