WordPress Permalinks und die Performance
6. Februar 2009 von Michael | Wordpress
In den WordPress-Admin-Einstellungen unter „Permalinks“ kann man die Darstellung der Artikel-URLs von WordPress entsprechend anpassen, um aus einer Artikel-URL wie etwa
http://www.beispiel.de/?p=1234
schönere URLs wie etwa
http://www.beispiel.de/kochrezepte/Apfelstrudel
generieren zu lassen. Das dient u.a. der Benutzerfreundlichkeit und bietet Vorteile im Bereich der Suchmaschinenoptimierung. Den Aufbau (auch „Struktur“ genannt, übersetzt vom engl. „structure“) der Permalinks kann man dabei fast beliebig festlegen, z.B.
www.beispiel.de/[Jahr]/[Monat]/[Tag]/[Artikel-Titel]www.beispiel.de/[Kategorie]/[Artikel-Titel]www.beispiel.de/[Autor]/[Artikel-Titel].
Wie Dougal Campbell nun darstellt, können manche Permalink-Kombinationen zu massiven Performance-Problemen im Blog führen.
Werden nämlich Permalinks mit den Bestandteilen Kategorie (%category%), Tag (%tag%), Autor (%author%) oder Artikel-Titel (%postname%) eingeleitet, so speichert WordPress in der Optionen-Tabelle im Feld „rewrite_rules“ umfangreiche Informationen für jede im Blog vorkommende Seite („Page“, nicht aber „Post“ bzw. Blog-Artikel) ab. Lt. Dougal ist nur dadurch WordPress einigermaßen performant in der Lage, anhand der URL auf die tatsächliche interne ID des Artikels bzw. der Seite zu schließen.
Betreibt man nun ein Blog mit vielen angelegten Seiten („Pages“), so kann sich dieses Datenbankfeld „rewrite_rules“ ins fast unermessliche füllen, was zu entsprechenden Performanceproblemen führen kann. So berichtet matthijs auf der [wp-testers] Mailingliste, dass er in einem seiner Blogs dieses Datenbankfeld nicht mehr per Browser oder Texteditor öffnen kann, weil beides dann aufgrund der großen Datenmenge einfach abstürzt.
On one of my sites I can’t even open the database field to take a look because my browser and text editor crash because of its size.
Im Folgenden mal als Beispiel, welche Information genau WordPress in dem Datenbankfeld ablegt, wenn wir eine der o.g. Permalinkstruktur verwenden und eine neue Seite „testseite-1“ anlegen:
[testseite-1/attachment/([^/]+)/?$] => index.php?attachment=$matches[1]
[testseite-1/attachment/([^/]+)/trackback/?$] => index.php?attachment=$matches[1]&tb=1
[testseite-1/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&feed=$matches[2]
[testseite-1/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?attachment=$matches[1]&feed=$matches[2]
[testseite-1/attachment/([^/]+)/comment-page-([0-9]{1,})/?$] => index.php?attachment=$matches[1]&cpage=$matches[2]
[(testseite-1)/trackback/?$] => index.php?pagename=$matches[1]&tb=1
[(testseite-1)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?pagename=$matches[1]&feed=$matches[2]
[(testseite-1)/(feed|rdf|rss|rss2|atom)/?$] => index.php?pagename=$matches[1]&feed=$matches[2]
[(testseite-1)/page/?([0-9]{1,})/?$] => index.php?pagename=$matches[1]&paged=$matches[2]
[(testseite-1)/comment-page-([0-9]{1,})/?$] => index.php?pagename=$matches[1]&cpage=$matches[2]
[(testseite-1)(/[0-9]+)?/?$] => index.php?pagename=$matches[1]&page=$matches[2]
Diese Information wird für jede Blog-Seite angelegt; daher ist wohl leicht vorstellbar, wie viele Daten sich bei einem Blog mit mehr als 1000 Seiten in dem einzigen Datenbankfeld ansammeln.
wordpress.org hat inzwischen reagiert und in der Permalinks-Dokumentation den folgenden Hinweis aufgenommen:
For performance reasons, it is not a good idea to start your permalink structure with the category, tag, author, or postname fields. The reason is that these are text fields, and using them at the beginning of your permalink structure it takes more time for WordPress to distinguish your Post URLs from Page URLs (which always use the text „page slug“ as the URL), and to compensate, WordPress stores a lot of extra information in its database (so much that sites with lots of Pages have experienced difficulties). So, it is best to start your permalink structure with a numeric field, such as the year or post ID.
Fazit
Nach meiner Einschätzung kann man auch weiterhin einen Nicht-Zahlenwert, also z.B. die Kategorie (%category%), als ersten Permalink-Bestandteil verwenden, solange man nicht vorhat, viele Seiten („Pages“) im Blog anzulegen. Klassische Blogs sind damit also wohl nicht wirklich betroffen, da diese im Gegensatz zu vielen Posts meist nur eine Hand voll Pages aufweisen (z.B. „Über das Blog“, „Impressum“, „Kontakt“, …). Ganz anders kann es allerdings bei Webauftritten aussehen, bei denen WordPress als CMS eingesetzt wird. Beispielsweise sind in diesem Fall folgende Permalink-Strukturen anzuraten und führen nicht zum Aufblähen des Datenbankfeldes:
/%year%/%month%/%day%/%postname%/
/%year%/%month%/%postname%/
/%year%-%month%-%day%/%postname%/
/%year%-%month%/%postname%/
/%year%/%postname%/
/%post_id%/%postname%/
/%post_id%-%postname%/
/%post_id%/%category%/%postname%/
/%year%/%category%/%postname%/
/%year%-%postname%/
WordPress passt übrigens das Datenbankfeld automatisch an, sobald man die Permalink-Struktur aktualisiert und speichert.



Was ist ein Trackback?
17 Trackbacks/Pings:
1
WordPress Ticker (12) — Software Guide
Pingback vom 11. Februar 2009, 23:10
Artikel Permalinks und die Performance gehe ich auf neue Informationen über den Aufbau von Permalinks im Zusammenhang mit der
2
Permalinks in WordPress optimal nutzen
Pingback vom 26. Februar 2009, 13:17
Zu den Performanceproblemen gibt es einen sehr ausführlichen und aktuellen Artikel bei Software Guide. Danke an Sergej Müller für den Hinweis. Danach wird eine Perma…
3
WordPress-SEO 1: Permalinks ohne mod_rewrite | moritzhanebeck.de
Pingback vom 1. Juli 2009, 8:58
als CMS einsetzt, also viele statische Seiten verwaltet, sollte folgendes beachten: Das Software Guide Blog rät aus Performancegründen davon ab, einen Nicht-Zahlenwert, z.B. /%…
4
Blog Permalinkstruktur angepasst - Unter WordPress kein Problem - Brandt Aktuell
Pingback vom 4. August 2009, 8:12
wurde meine Motivation durch den Artikel WordPress Permalinks und die Performance von Michael angeregt, indem er die Performance Nachteile von Kategorienamen am Anfang eines WP
5
WordPress Ticker (12) « Software-Empfehlungen
Pingback vom 24. August 2009, 20:42
Artikel Permalinks und die Performance gehe ich auf neue Informationen über den Aufbau von Permalinks im Zusammenhang mit der
6
Vorteile einer Permalinkstruktur ohne Kategorienamen - Brandt Aktuell
Pingback vom 5. September 2009, 10:56
Ein weiterer (kleiner) Vorteil wenn der Kategorie Name nicht am Anfang in der Permalinkstruktur verwendet wird, ist das dies besser für die Performance der Webseite sein soll. Meh…
7
Suchmaschinen freundliche Links erstellen - Denkvirtuose.de
Pingback vom 22. September 2009, 3:00
dem Artikel “WordPress Permalinks und die Performance” auf Software Guide wird auf ein Performance-Problem bestimmter Permalink-Strukturen
8
DIBLOGMAND
Trackback vom 26. Oktober 2009, 15:34
Wordpress Permalinks... Am vergangenen Wochenende habe ich mich dazu entschieden meine Wordpress-Version auf den aktuellsten Stand zu bringen. Dabei fiel mir auf, dass ich das wund…
9
Linkstruktur geändert - Nicht spurlos
Pingback vom 21. Januar 2010, 23:14
ich die Linkstruktur geändert habe? Michael Wöhrer schreibt in einem Beitrag, dass sich die Linkstruktur durchaus negativ auf die Blog-Performance auswirken kann. Klingt …
10
Die richtige Permalinkstruktur | Peruns Weblog
Pingback vom 16. Februar 2010, 23:37
ist an sich nicht neu und Michael Wöhrer hat es bereits vor mehr als einem Jahr im Artikel WordPress Permalinks und die Performance beschrieben und mittlerweile gibt es in der off…
11
Der optimale Permalink - Aufschnur
Pingback vom 15. März 2010, 9:40
aus, also bleibt im Grunde nur das vollständige Datum oder die Artikel-Id. Übrigens wurde ein Performance-Leck in Wordpress entdeckt, welches ensteht, wenn für die Basis des Per…
12
Die optimale Permalink Struktur für Wordpress Blogs | Seoperlen.de SEO
Pingback vom 27. August 2010, 13:24
http://sw-guide.de/2009-02/wordpress-permalinks-und-die-performance/
13
interne umbauarbeiten | offroad 4 fun
Pingback vom 21. September 2010, 0:07
interessiert, weshalb ich die änderungen an der linkstruktur vorgenommen habe, findet ihr z.b. hier eine sehr ausführlichee erklärung
14
Wordpress Permalinks: Besser geht es nicht!
Pingback vom 19. November 2010, 4:25
http://sw-guide.de/2009-02/wordpress-permalinks-und-die-performance/
15
WordPress: Permalink-Struktur und Performance | WordPress & Webwork
Pingback vom 24. Juni 2011, 14:45
damals und eigentlich einige Zeit vorher (siehe hier und hier) war klar, dass man die Permalinkstruktur einer WordPress-Installation nicht mit einer
16
WordPress Ticker (12) | allow archive
Pingback vom 16. Juli 2011, 22:54
Artikel Permalinks und die Performance gehe ich auf neue Informationen über den Aufbau von Permalinks im Zusammenhang mit der
17
Der optimale Permalink › Aufschnur
Pingback vom 19. Januar 2012, 11:49
aus, also bleibt im Grunde nur das vollständige Datum oder die Artikel-Id. Übrigens wurde ein Performance-Leck in WordPress entdeckt, welches ensteht, wenn für die Basis des Per…
30 Comments:
1
Martin Hiegl
6. Februar 2009, 16:22
Wenn ich meine Permalinkstruktur ändere, dann laufen doch Links ins Leere, oder wird die alte Permalinkstruktur mitgespeichert für bestehende Artikel und ebenfalls weitergeleitet?
2
Michael (Author)
6. Februar 2009, 16:28
Links von externen Webseiten führen dann zu einem Fehler 404, das ist richtig. Hier hilft nur ein Eingriff per .htaccess.
3
Ruben
6. Februar 2009, 17:00
ohne weiter auf den Artikel eingehen zu wollen aber…
.. das ist nicht ernstgemeint oder?
…
4
Michael (Author)
6. Februar 2009, 17:11
Ruben, im Englischsprachigen wird von „permalink structure“ gesprochen, das WordPress-Übersetzungsteam hat es sich dabei wohl einfach gemacht und das 1:1 in „Struktur“ übersetzt. Im deutschen Sprachraum halte ich „Aufbau“ besser als Übersetzung weil eindeutiger. Ob das Wort ursprünglich nun aus dem Lateinischen oder Griechischen kommt, ist in diesem Zusammenhang egal.
5
Sergej Müller
6. Februar 2009, 17:30
@Martin
Kommt drauf an, inwieweit du die Permalink-Struktur veränderst. Schau mal, dieser Artikel von Michael ist auch unter
http://sw-guide.de/wordpress-permalinks-und-die-performance/(also ohne das Datum) erreichbar. WordPress ist da schlau und erkennt dennoch den Artikel mit scheinbar defektem Link, auch wenn die aktuelle Struktur der Permalinks ganz was anderes vorweist.Ich hatte mal in meinem Blog einen Artikel verfasst, wie – aus SEO-Sicht – ein perfekter Permalink aussehen soll: Optimaler Permalink in WordPress
6
Michael (Author)
6. Februar 2009, 17:51
Sergej, in den meisten Fällen wird dies bei geänderter Permalinkstruktur aber nicht funktionieren. Außerdem sollte man idealerweise und auch aus SEO-Gesichtspunkten beim Weiterleiten gleich den Redirection Header Code „301 Moved Permanently“ mitgeben (
[R=301]).Ich hatte übrigens auf Software Guide vor einiger Zeit mal die Permalink-Struktur geändert und dafür eine .htaccess-Regel geschrieben:
Die Änderung führte dank dem 301er zu keinen SEO-Nachteilen.
7
Sergej Müller
6. Februar 2009, 19:21
Michael, das ist absolut richtig, deswegen schrieb ich auch, hängt von der Art der Änderung des Permalink ab. Viele Anwender ziehen auch das Permalinks Migration Plugin zur Hilfe, wenn einem htaccess ein Fremdwort ist.
Sonst hatte ich mal auch von einem großen deutschsprachigen Magazin gehört, dass es ebenfalls Performance-Probleme nach der Umstellung der Permalinks gab. Als Lösung wurde auf PHP-Abfragen ausgewichen.
8
Michael
6. Februar 2009, 19:31
Da hatte ich ja Glück… mit /%year%/%monthnum%/%day%/%postname%/ komme ich auf 7000 Zeichen in meinen „rewrite_rules“. Ist das viel?
@Sergej
Deine Sicht als SEO, ist nun scheinbar nicht mehr all zu empfehlenswert.
9
Sergej Müller
6. Februar 2009, 19:46
@Michael #8
Was meinst du damit?
/%postname%/%post_id%/(schneller) vs./%post_id%/%postname%/(langsamer)?10
Michael
6. Februar 2009, 19:50
/e
Argh, ich habs heute mit dem Lesen…
Ja genau, das meine ich. WP empfiehlt genau das was du empfiehlst, als nicht empfehlenswert. Also %postname% vorne.
11
Stefan
6. Februar 2009, 20:38
Also ich verwende auf meinem Blog:
/%category%/%year%-%monthnum%/%postname%. Hat das nun Nachteile?Wenn ich die WordPress leute richtig verstehe, wenn sie sagen:
Dann startet meine Permalinkstruktur ja mit
%category%und das ist schlecht. Aber deswegen nun meine ganz mühsam aufgebaute Struktur der Links verändern – ich weiß nicht ob ich das will.12
Frank
6. Februar 2009, 20:56
Michael,
gibt’s denn irgend eine Erkenntnis welchen Performance-Impact das in der Praxis hat? Irgend eine Hausnummer die man beziffern kann?
Ich betreue einige größere Blogs von denen die meisten eine hier als schädlich genannte Permalink-Struktur haben. In diesen Größenregionen ist WordPress allgemein nicht gerade zimperlich was die Performance angeht, daher kann ich selbst schwer beurteilen was es für einen unterschied machen würde.
Weisst Du dazu mehr? Eigene Erfahrung oder ggf. was von anderen?
13
fred
7. Februar 2009, 9:35
Über das Thema habe ich mir noch nie Gedanken gemacht. Danke für den Artikel!
14
Klaus
7. Februar 2009, 9:40
Ich möchte die Tage auch mal mit einem Blog beginnen. Werde das beherzigen.
15
Frank
7. Februar 2009, 10:56
Das Verständnis was Ryan bzw. vor allem Otto sagen wollen, ist, dass man nicht willkürlich die Permalinkstruktur gestaltet. In einem Beispiel verdeutlicht heißt das, dass
%category%/%postname% ist recht schlecht, weil hier alle Inhalte der Kategorie geholt werden und dann erst der Name. Daher leuchtet auch ein, dass %post_id%/%postname% wesentlicher besser ist.
Stellt man nun aber sein Blog um, dann leitet WP den Beitrag im Grunde schon weiter, denn seit 2.5 ist dafür die neue API da. Aber, dies basiert auf den internen IDs bzw dem GUID aus der DB. Für Suchmaschinen ist das aber trotzdem ein Problem und so hilft nur die .htacces oder ein Plugins, was die Kompliziert der .htaccess umgeht, sei es das oben genannte Plugin oder Redirect Plugin.
16
Michael (Author)
7. Februar 2009, 12:21
@8 Michael:
Mit einem Zahlenwert als ersten Bestandteil des Permalinks bist Du auf der sicheren Seite.
Du kannst zum Testen mal folgenden Code in Dein Theme einbauen:
Damit wird Dir der Inhalt des Datenbankfeldes besser formatiert am Bildschirm ausgegeben. Sind dort pro Seite Einträge vorhanden wie oben anhand „testseite-1“ als Beispiel aufgeführt, so ist die Permalink-Struktur nicht optimal.
@12 Frank:
Genau beziffern kann ich das leider nicht. Aber es ist ja jetzt nicht so, dass WordPress extrem rechenaufwändig erstmal bei jedem Seitenaufruf die interne ID bestimmen muss, denn eben deswegen werden Zusatzinformationen in dem Datenbankfeld gespeichert um Performanceprobleme zu vermeiden.
Ich denke problematisch wird es vor allem nur dann, wenn viele Pages eingesetzt werden; in klassischen Blogs hat man aber fast nur Posts und nur wenige Pages (halt nur für Impressum, About, Kontakt, etc.) so dass ich mir hier keine Sorgen machen würde.
@11 Stefan:
Siehe meine Antwort an @12 Frank; wenn Du nur wenige Pages hast, würde ich nichts ändern.
@15 Frank:
So wie ich das verstanden habe, ist das nicht der Fall sondern war nur ein fiktives Beispiel; genau um dies zu vermeiden legt WordPress pro angelegter Page Zusatzinformationen in dem besagten Datenbankfeld an, siehe:
17
Michael
7. Februar 2009, 13:07
@16 Danke Michael, sieht gut aus bei mir.
Zieht WP aus diesem Feld auch die Informationen wann es eine 404 Seite anzeigen soll?
18
Stefan
7. Februar 2009, 17:26
@16 Danke für die Info. Ich habe den code mal auf einer Seite plaziert und ausgegeben was in der DB steht. Ist zwar ne ganze Menge, aber im Moment habe ich nur 12 statische Seiten und so ist das für mich dann wohl doch kein Problem.
Ab wieviel Seiten wird es denn eng? Ab 200 oder erst ab 1000 das ist doch die Frage oder?
19
Michael (Author)
7. Februar 2009, 19:41
@17 Michael, das kann ich mir jetzt nicht vorstellen, WP zeigt halt eine 404 an wenn kein Treffer gefunden wird.
@18 Stefan, eine genaue Zahl kann man da wohl nicht geben und ist mir auch nicht bekannt, in der Quelle ist die Rede von „ein paar Hundert Seiten“.
20
Sergej Müller
7. Februar 2009, 19:47
Ich glaube auch, dass man eine pauschale Zahl der Seiten nicht einfach so auf den Tisch der Tatsachen legen kann, da dabei einfach viel zu viele Faktoren wie Serverumgebung, Rechner, Zugriffszahlen, Auslastung, Blogausrühstung (Plugins & Co.) etc eine entscheidende Rolle spielen (können). So laufen 300 Seiten auch mit schlechtester Permalink-Struktur auf einem eigenen, perfekt konfigurierbaren Rechner astrein, auf einem Shared-Hosting geht die Kiste gleich in die Knie.
21
Michael
8. Februar 2009, 2:07
@19
Ja, das dachte ich auch, aber irgendwie ignorierte mein WP die htaccess Einträge für eine spezielle 404-Grafik(!). Zur Erklärung: Ich wollte verhindern, das Bildadressen in einem Unterordner /WP-root/smile/ eine WP 404 Seite erzeugen um die Last auf meinem Server zu reduzieren. WP (oder mein Server?) ignorierte aber die ursprüngliche Einstellung von mir und nun mach ichs via mod_rewrite, siehe hier:
http://www.greensmilies.com/20.....r-smilies/
22
Alex
8. Februar 2009, 9:07
Ich habe mir das gleich angewöhnt, im Blog Permalinks ausgeben zu lassen und zwar in der Form meinblog.de/Jahr/Monat/Post.
Suchmaschinenfreundliche Links in einem Blog sind für SuMas auch gern gesehen und leicht zu erkennende Inhalte, meiner Ansicht nach.
Ob es in SEO-Sicht negative Auswirkungen haben wird, wenn man die Permalinkstruktur plötzlich ändert, frage ich mich? Das mit Sicherheit und daher bin ich bei etwaigen Änderungen der Linkstruktur im Blog sehr vorsichtig.
23
Sergej Müller
8. Februar 2009, 10:10
Immer schön dran denken, Google beispielsweise nimmt nur max. 4 Keywords (nach TLD kommend) innerhalb des Permalink wahr und lässt diese ins Ranking einer Blogseite einfließen. Man kann sich leicht denken, welche Struktur daher ein Permalink haben muss, wenn man ein wenig für SuMas optimiert (was man sowieso mit sprechenden URLs angefangen hat).
24
Frank
8. Februar 2009, 12:09
Die obige Funktion kann helfen, so konnte man von ~8000 rules (~350KB) auf ~300 rules (~35KB) reduzieren.
Je nach Anwendung kann das helfen, es muss direkt ausgeprüft werden und hängt von der Definition der Permalinks ab.
Ich denke es ist einen Test wert, aber in einem Kundenprojekt, wo man nur mit Pages arbeitet hat es geholfen. Allerdings fahre ich dort auch noch andere Punkte für die Performance auf, die in diesem Thema keine Rollen spielen.
25
Alex
9. Februar 2009, 0:47
@Sergej Müller,
was ja bedeuten würde, dass man keine zu lange URLs im Blog haben sollte ode nur sinnvolle Keywordsmischungen nutzen. Das Google nur mit den ersten 4 Keywords arbeitet, ist mir gerade etwas entgangen oder ich habe es so genau nicht gewusst.
Dass kürzere URLs besser sind, das wusste ich bereits, nur eben diese Begrenzung auf 4 Keywords nicht.
26
Sergej Müller
9. Februar 2009, 9:04
Alex, ich hatte dazu mal einen Artikel verfasst, schau dir meinen Kommentar #5 an, da ist der Link zum Beitrag.
27
Martin Hiegl
9. Februar 2009, 9:56
Wow, vielen Dank für die Antworten und die interessante Diskussion! Ich glaube das Permalink Plugin ist perfekt für mich, da ich mir nichts durch Rumprobiererei im htaccess kaputt machen will (soll von Post-ID auf Post-Itel geändert werden). Schau ich mir mal genauer an. Leider bietet WordPress das noch nicht automatisch integriert an.
28
Tobias
10. Februar 2009, 18:40
das gut zu wissen, danke! :)
29
Hannes
2. März 2009, 21:43
Höchst interessante Ausführungen, die man schon näher betrachten sollte. Vor einen Bloganfänger kann das sicher sehr nützlich sein. Gut , wenn ich schon einige Jahre einen Blog habe und alles gut läuft würde ich das jetzt nicht umstellen, sowas kann schnell nach hinten losgehen.
30
shibumi
4. März 2009, 1:32
vielen dank für diese hinweise. ich nutze wordpress seit kurzem bin aber immer mehr dabei mich einzuarbeiten und ich bin für solche beiträge sehr dankbar. jetzt weiss ich auch, warum bei manchen blocks die urls schöner aussehen, ab jetzt bei meinem blog auch.
Die Kommentarmöglichkeit ist derzeit für diesen Artikel ausgeschaltet.