Software Guide

Die besten Tipps, Anleitungen und Downloads

Ihre Werbung auf Software Guide

Sie möchten in dieser Box oder an anderer Stelle dieser Webseiten eine Werbung schalten? Sehen Sie sich dazu am besten einfach mal die verschiedenen Möglichkeiten an.


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.

Informationen zum Artikel:

Weiterblättern im Blog:

Trackbacks:

Was ist ein Trackback?

17 Trackbacks/Pings:

30 Comments:

Gravatar

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?

Gravatar

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.

Gravatar

3

Ruben

6. Februar 2009, 17:00

ohne weiter auf den Artikel eingehen zu wollen aber…

(auch “Struktur” genannt, vom engl. “structure”)

.. das ist nicht ernstgemeint oder?

Struktur von lat.: structura = ordentliche Zusammenfügung, Bau, Zusammenhang; bzw. lat.: struere = schichten, zusammenfügen

Gravatar

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.

Gravatar

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

Gravatar

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:

#---------------------------------------
# 26.05.2007: Permalink Struktur von "sw-guide.de/weblog/2007-05-26/Artikel"
# auf "sw-guide.de/2007-05/Artikel" geaendert.
#---------------------------------------
RewriteCond %{HTTP_HOST} ^.*sw-guide.*$ [NC]
RewriteRule ^weblog/200(5|6|7)-([0-9]{2})-([0-9]{2})/(.*)$ /200$1-$2/$4 [L,R=301]

Die Änderung führte dank dem 301er zu keinen SEO-Nachteilen.

Gravatar

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.

Gravatar

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.

Gravatar

9

Sergej Müller

6. Februar 2009, 19:46

@Michael #8
Was meinst du damit? /%postname%/%post_id%/ (schneller) vs. /%post_id%/%postname%/ (langsamer)?

Gravatar

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.

Gravatar

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:

For performance reasons, it is not a good idea to start your permalink structure with the category, tag, author, or postname fields.

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.

Gravatar

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?

Gravatar

13

fred

7. Februar 2009, 9:35

Über das Thema habe ich mir noch nie Gedanken gemacht. Danke für den Artikel!

Gravatar

14

Klaus

7. Februar 2009, 9:40

Ich möchte die Tage auch mal mit einem Blog beginnen. Werde das beherzigen.

Gravatar

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.

Gravatar

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:

<?php echo "\n" . '<pre>' . "\n";
print_r(get_option('rewrite_rules'));
echo "\n" . '</pre>';?>

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:

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.

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:

Otto then goes on to explain that this isn’t what WordPress actually does. Instead, when WordPress detects that you have an inefficient permalink structure, it stores extra rewrite rules in an option in the database, which it then refers to when presenting a page.

Gravatar

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?

Gravatar

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?

Gravatar

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”.

Gravatar

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.

Gravatar

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/

Gravatar

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.

Gravatar

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).

Gravatar

24

Frank

8. Februar 2009, 12:09

function filter_rewrite_attachment($content) {
	if ( !is_array($content) )
		return $content;

	foreach ($content as $key => $val) {
		if (strpos($val, 'attachment') !== false)
			unset($content[$key]);
		}

	return $content;
}

add_filter('page_rewrite_rules', 'filter_rewrite_attachment');
add_filter('post_rewrite_rules', 'filter_rewrite_attachment');

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.

Gravatar

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.

Gravatar

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.

Gravatar

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.

Gravatar

28

Tobias

10. Februar 2009, 18:40

das gut zu wissen, danke! :)

Gravatar

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.

Gravatar

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.

Blog-Kategorien

Volltextsuche

Neueste Artikel

Neueste Kommentare

Neueste Trackbacks/Pingbacks

Andere Projekte

Blogparade

dient als zentrale Anlaufstelle für Blog-Paraden bzw. Blog-Karnevals und andere von BloggerInnen veranstaltete Aktionen.

Mediadaten

Feed-Statistik:
Feedburner

Software Guide gibt es seit Dezember 2005 und es werden durchschnittlich 5 Blog- Beiträge/Monat veröffentlicht. Die Themenschwerpunkte sind in der Tagcloud ersichtlich. Mehr Infos...

Links

 

Nach oben

Wordpress

© 2005-2014 Software Guide | ISSN 1864-9599