WordPress-Performance-Optimierung ohne Plugin (functions.php, .htaccess & wp-config.php)

Thumbnail

In diesem Beitrag möchte ich dir zeigen, wie du mit kleinen Anpassungen in der functions.php Datei deines Themes die Performance deines WordPress-Blogs optimieren kannst. Es wird außerdem jeweils eine Optimierung in der .htaccess und wp-config.php Datei stattfinden.

Dabei kommst du komplett ohne den Einsatz von Plugins aus und sparen dir so eine unnötige Systembelastung. Schließlich sollte man nicht vergessen, dass auch ein installiertes Performance-Plugin seine Ressourcen fordert.

Ich habe für diesen Beitrag meine lokale Testumgebung angeschmissen, weil ich auf meinem Hauptblog Perfmatters* nutze und ich das Plugin nicht für den Test ausstellen wollte.

Welchen Zweck erfüllt die functions.php Datei?

Die functions.php Datei ist meiner Meinung nach das Herzstück eines Themes. Sämtliche Funktionen des Themes sind hier definiert. Thumbnail Größen, Farben, Widgets und vieles mehr finden hier Platz.

Dementsprechend musst du aufpassen, dass du keine Zeilen aus der Datei löschst, sondern streng nach Anleitung nur diverse Zeilen ganz unten hinzufügst.

Meistens gibt es sogar im Theme direkt einen Kommentar, welcher in etwa so lautet. Dann einfach die Code-Snippets darunter einfügen.

// Place your custom code right here

Lasst die Optimierungen beginnen!

Jetzt ist es leider so, dass in einer normalen WordPress-Installation ohne zusätzliche Performance-Plugins oder anderen Optimierungen einiges an Ballast mit installiert wird. Wir vergessen mal kurz Hello Dolly und Akismet und konzentrieren uns auf einige Funktionen, die für 99 % aller WordPress-Benutzer nicht interessant sind.

Ich gehe in diesem Beitrag auf die Funktionen Windows Live Writer, WP-Version, DNS-Prefetch, Emojis, Self-Pingbacks und WP-Embeds ein. Außerdem machen wir kleine Abstecher in die Bereiche Hotlinking und Post-Revisionen.

Windows Live Writer

Wusstest du, dass es standardmäßig in jeder WordPress-Installation eine eingebaute Schnittstelle für den Windows Live Writer gibt? Nein? Nun um ehrlich zu sein, ist nur das Hello Dolly Plugin sinnfreier, also ist das auch nicht verwunderlich. Allerdings gibt es diese Funktion bereits seit Version 2.3.1!

Das Programm hat im August 2012 sein letztes Major-Update bekommen (Hauptnummer wird erhöht). Der Support wurde bereits 2017 eingestellt, sodass keine weiteren Updates mehr veröffentlicht werden. Seitdem es Windows 10 gibt, bietet Microsoft nicht mal eine Downloadmöglichkeit an.

Das bedeutet für uns beide, dass wir den Link ohne Probleme entfernen können.

remove_action( 'wp_head', 'wlwmanifest_link' );

WP-Version

Solltest du eine normale WordPress Installation vorgenommen haben, wird immer automatisch die aktuelle Versionsnummer deiner Installation im Seitenquelltext angezeigt.

Dies ist nicht nur eine unnötige Anzeige, sondern in gewisser Weise auch ein Sicherheitsrisiko. Hacker haben so die Möglichkeit gezielt in Datenbanken nach Schwachstellen einer bestimmten WordPress-Version zu suchen, damit sie diese bei dir ausnutzen können.

Daher solltest du diese Ausgabe mit einem kurzen Eingriff in die functions.php Datei deines Themes unterbinden.

remove_action( 'wp_head', 'wp_generator' );

DNS-Prefetch

Das DNS-Prefetching ist per se eine sehr gute Sache, die normalerweise einen Geschwindigkeitsboost im Seitenaufbau nach sich zieht. Dabei wird die Domain bereits im Vorfeld aufgelöst, ohne dass bereits Ressourcen geladen werden.

Daher entfällt beim eigentlichen Laden der Schritt des Auflösens von Domain zu IP und die gewünschten Ressourcen werden direkt geladen. Standardmäßig wird die Domain s.w.org aufgelöst. Das können wir getrost ausschalten, sofern wir eine Installation bei einem extra Hoster vorgenommen haben und keine Plugins wie Jetpack etc. darauf zugreifen.

remove_action( 'wp_head', 'wp_resource_hints', 2 );

Übrigens! Wie bereits erwähnt ist die Idee hinter DNS-Prefetching bzw. auch Preconnecting eine sehr feine und nützliche Sache. Daher solltest du dir für externe bzw. kritische Ressourcen überlegen, ob du diese Optimierung nicht durchführen willst.

Du kannst auch ohne Plugin diverse Ressourcen wie oben beschrieben laden. Dazu schreiben wir einfach eine eigene kleine Funktion, die mit höchster Priorität (0) die Anfragen in den Quellcode schreibt. Nach jeder Zeile lasse ich einen Zeilenumbruch mit \n durchführen, damit der Quellcode übersichtlicher bleibt.

Wichtig ist nur, dass du dir ganz sicher bist, welche Ressourcen du vorher laden solltest bzw. bei welchen Domains du die DNS-Anfrage vorher auflösen solltest. Mir fallen spontan Google Fonts und Google Analytics ein. Dazu kommen eventuell Google Ads, Font Awesome etc. Ich denke du verstehst was ich meine.

function mwde_dns_prefetch() {
   echo "<link rel='dns-prefetch' href='//fonts.googleapis.com' />\n";
   echo "<link rel='dns-prefetch' href='//fonts.gstatic.com' />\n";
}
add_action( 'wp_head', 'mwde_dns_prefetch', 0 );

Emojis

Seit WordPress 4.2 kannst du Emojis verwenden. Klar sie sehen vielleicht gut aus, aber eigentlich ist das nur ein unnötiges Skript (1 Request / im Front-End 18,5 KB groß), welches auf jeder Seite geladen wird.

Wie oft benutzt du wirklich Emojis in deinen Beiträgen und wie oft wird diese Ressource unnötig geladen? Mithilfe des folgenden Code-Snippets werden keine Skripte im Front-End und im Back-End geladen.

remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );

Self-Pingbacks

Pingbacks sind sicherlich eine gute Idee gewesen. Sehr grob gesagt, geht es darum, dass WordPress Installationen untereinander kommunizieren, sofern auf Posts verlinkt wird.

Das funktioniert nicht nur bei externen Seiten, sondern auch untereinander auf deiner eigenen Website. Du hast vielleicht schonmal gesehen, dass unter einem Artikel von dir ein Kommentar von deinem Blog mit einem Link zu einem anderen deiner Artikel war? Das ist ein Pingback gewesen!

Um diese Funktion auszustellen und damit auch Systemressourcen zu sparen, musst du folgende Funktion in deine functions.php Datei einfügen.

function mwde_disable_self_pingbacks( $links ) {
	foreach ( $links as $l => $link )
        if ( 0 === strpos( $link, get_option( 'home' ) ) )
            unset($links[$l]);
}
add_action( 'pre_ping', 'mwde_disable_self_pingbacks' );

WP-Embeds

Seit Version 2.9 gibt es die oEmbed-Funktion in WordPress. Damit kannst du externe Ressourcen wie Tweets, aber auch eigene Beiträge direkt in deinem Beitragseditor anzeigen lassen. Du generierst sozusagen eine Live-Vorschau der Inhalte.

Möglich sind inzwischen Embeds von Facebook, Instagram, Reddit, SoundCloud, Spotify, TikTok, Tumblr, Twitter, Vimeo, WordPress, YouTube und vielen mehr.

Solltest du diese Funktion aktiv nutzen, dann deaktiviere sie nicht. Solltest du sie nicht nutzen, solltest du sie umgehend deaktivieren. Du sparst dir einen zusätzlichen Request (1,7 KB groß), der auf jeder Seite geladen wird.

function mwde_deregister_wpembed(){
	wp_dequeue_script( 'wp-embed' );
}
add_action( 'wp_footer', 'mwde_deregister_wpembed' );

Hotlinking

Hotlinking ist so eine Sache. Deine vielleicht mit mühsamer Arbeit selbst erstellten Bilder werden einfach auf wildfremden Internetseiten eingebaut. Allerdings werden sie nicht einfach nur heruntergeladen, sondern werden direkt von deinem Server verlinkt.

Das verbraucht nicht nur Traffic, sondern auch Systemressourcen. Klar erst einmal hört sich das nach nicht viel an, allerdings darf man auch nicht vergessen, dass Bilder (gerade eigens erstellte) auch ein besonderes wirksames Medium sind und es um Copyright geht.

Um Hotlinking zu unterbinden, kannst du folgenden Code-Snippet für deine .htaccess Datei nutzen. Bitte beachte nur, dass du die Domain beispielseite.de anpasst.

Falls du noch keine .htaccess Datei hast, solltest du schnellstmöglich eine anlegen. Dort hast du die Möglichkeit automatische Umleitungen (gerade für SEO wichtig) und vieles mehr einzurichten.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)beispielseite.de/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|bmp|zip|rar|mp3|flv|swf|xml|php|png|css|pdf)$ - [F]

Post-Revisionen

WordPress speichert aus Gründen der Bequemlichkeit jeden Entwurf in der Datenbank, welchen du abgespeichert hast. Das Gleiche gilt im Übrigen natürlich auch für Updates eines bereits veröffentlichten Posts. Dadurch kannst du zwar schnell zu einer früheren Version deines Posts zurückkehren, allerdings müllt das deine Datenbank zu.

So kann es durchaus vorkommen, dass für einen einzigen WordPress-Post 10 verschiedene Versionen zwischengespeichert werden. Daher solltest du die Anzahl der maximal möglichen Revisionen begrenzen und dir gleichzeitig angewöhnen nicht so viel zu speichern. Glaube mir, ich hatte das gleiche Problem.

Diese Änderung musst du allerdings in der wp-config.php Datei vornehmen. Wichtig ist hierbei, dass du den Snippet wie im Screenshot zu sehen vor der Stopp-Meldung der WordPress-Entwickler einbaust.

wp-config.php Datei
define( 'WP_POST_REVISIONS', 5 );

Es gibt natürlich weitere Anpassungsmöglichkeiten in der wp-config.php Datei. Dazu zählt unter anderem die Änderung des Upload-Verzeichnisses, die Deaktivierung der automatischen Updates oder dem Verbieten von Dateiänderungen durch den WordPress-Editor im Adminbereich.

Das war es dann auch schon wieder. Sofern du alles eingetragen hast, kannst du auf Datei aktualisieren klicken und die Seite im Front-End neu laden. Anschließend öffnen wir den Quelltext.

Wie du klar erkennen kannst, sind sämtliche unnötigen Informationen aus dem Quellcode entfernt und 2 DNS-Prefetching-Einträge sind dazugekommen.

Ich hoffe, du hattest Spaß mit dem Beitrag und er hat dir gefallen. Vielen Dank für deine Aufmerksamkeit – dein Maurice!

Maurice Woitzyk

Maurice Woitzyk

Total posts created: 99
Hallo! Ich bin Maurice. Ich komme aus dem wunderschönen Magdeburg und wenn ich nicht gerade in CS:GO verzweifle, vertreibe ich mir meine Zeit mit meinem Blog und Web Design/Web Development.

Leave a reply

Your email address will not be published. Required fields are marked *