Case Study: WordPress Performance-Optimierung mittels Child-Theme

05.03.2021 1.626 Aufrufe Web & Co 5,00

Für meinen langjährigen Kunden Indigourlaub übernahm ich auch die Umsetzung der Websites für die zwei weiteren Eigenhäuser. Die Website für das Kleebauer Hof Retreat Center im Mühlviertel wurde dabei komplett neu erstellt, während die Webpräsenz für das Mountain Retreat Center im Chiemgau einem Relaunch unterzogen wurde um endlich Jimdo zu kündigen. Wie auch schon für den Webauftritt für die Son Manera Retreat Finca auf Mallorca war auch hier WordPress das CMS meiner Wahl.

Website des Kleebauer Hof Retreat Center
Website des Kleebauer Hof Retreat Centers

Der Kunde wünschte sich eine zeitgemäße Website, die möglichst kostenfreundlich und schnell umgesetzt werden kann. Da auch hier der Traffic primär über organische Suchergebnisse kommen sollte, stand SEO von Anfang an im Mittelpunkt.

Die Suche nach einem Theme beginnt

Es lohnt sich immer etwas Zeit in die Auswahl eines für das jeweilige Projekt passende WordPress Theme zu stecken. Man hat hier wirklich die Qual der Wahl: sowohl zwischen kostenlosen und kostenpflichtigen Themes als auch hinsichtlich dem „out of the box“ Funktionsumfang. Nach einigen Recherchen wurde ich auf das kostenlose Theme Palmeria aufmerksam, das mir – und besonders dem Kunden – hinsichtlich Aufbau sehr gut gefiel. Positiv zu erwähnen ist auch die volle Gutenberg Kompatibilität und die gute Integration des Plugins Hotel Booking Lite.
Negativ gestaltete sich der Blick auf die Performance via PageSpeed Insights:

PageSpeed Insights: Palmeria Theme
PageSpeed Insights: Palmeria Theme

Obwohl Labdaten nur die halbe Wahrheit sind: Man sieht, dass dieses Theme hinsichtlich Performance deutlichen Verbesserungsbedarf hat.

Performance-Optimierung mittels Child-Theme

Bei allen Änderungen an einem WordPress-Theme sollte immer ein Child-Theme verwendet werden. Nur dann ist sichergestellt, dass die Anpassungen bei einem Update des Parent-Themes nicht überschrieben werden. Nachfolgend werde ich alle von mir durchgeführten Performance-Optimierungen anführen.

Child-Theme Setup

Ein Child-Theme benötigt zumindest die Datei style.css im entsprechenden Child-Verzeichnis, in meinem Fall palmeria-child. In dieser Datei werden alle CSS-Anpassungen vorgenommen.

/*
Theme Name: Palmeria Child
Author: PIXELUTION.AT August F. Golser, BSc
Author URI: https://www.pixelution.at
Description: Palmeria Child Theme, created by PIXELUTION.AT
Template: palmeria
Version: 1.2.0
Text Domain: palmeria-child
*/Code-Sprache: CSS (css)

Alle Änderungen an der grundsätzlichen Template-Funktionalität werden in der Datei functions.php im Child-Verzeichnis vorgenommen. Hier müssen zunächst die Child-Styles registriert werden:

function add_child_styles() {
  $parent = 'palmeria-style';
  $theme = wp_get_theme();
  wp_enqueue_style($parent, get_template_directory_uri() . '/style.css',
    array(), $theme->parent()->get('Version')
  );
  wp_enqueue_style('palmeria-child-style', get_stylesheet_uri(),
    array($parent), $theme->get('Version')
  );
}
add_action('wp_enqueue_scripts', 'add_child_styles');Code-Sprache: PHP (php)

Font Awesome durch SVGs ersetzen

Palmeria lädt zwei Font Awesome Fonts mit gesamt satten 152 kB und knapp 2.800 CSS-Klassen. Ich habe Font Awesome komplett entfernt und durch SVGs ersetzt.

// Remove Font Awesome from Parent Theme
function remove_font_awesome() {
  wp_dequeue_style('font-awesome');
  wp_deregister_style('font-awesome');    
}
add_action('wp_enqueue_scripts', 'remove_font_awesome', 20);

// Remove Font Awesome from Getwid Plugin
function remove_getwid_styles($styles) {
  $styles_to_remove = ['fontawesome-free']; 
  $styles = array_diff($styles, $styles_to_remove);
  return $styles;
}
add_filter('getwid/blocks_style_css/dependencies',
  'remove_getwid_styles', 99);Code-Sprache: PHP (php)

Im nächsten Schritt müssen dann alle CSS-Referenzen auf Font Awesome überschrieben werden, beispielsweise für die Pfeilchen im Hauptmenü:

.main-navigation .menu-item-has-children > a:after {
  display: inline-block;
  content: '';
  width: .75rem;
  height: .75rem;
  background: url("%SVG%") 100% 50% no-repeat;
}Code-Sprache: CSS (css)

Die SVGs aller Font Awesome Icons findet man auf GitHub: FortAwesome/Font-Awesome. Diese können dann nach einer Komprimierung mit SVGOMG und Konvertierung mittels SVG to background-image Converter als Hintergrundbild eingebunden werden.

Google Fonts lokal einbinden

Die Website verwendet zwei Google Fonts mit insgesamt drei Schnitten, die direkt in das Theme eingebunden wurden. Ein hilfreiches Tool hierfür ist beispielsweise der Google Webfonts Helper. Das CSS für die Schriften sollte im <head> der Seite möglichst weit oben und inline eingefügt werden. Weiters sollte die CSS-Eigenschaft font-display auf swap gesetzt werden.

<style>
  @font-face {
    font-family: 'Libre Baskerville';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: local(''),
         url('%FONT_PATH%/lb-400.woff2') format('woff2'),
         url('%FONT_PATH%/lb-400.woff') format('woff');
  }
</style>Code-Sprache: HTML, XML (xml)

Damit die Schriften nicht auch noch von externen Quellen geladen werden, benötigen wir noch eine Ergänzung in der functions.php:

function remove_parent_fonts() {
  wp_dequeue_style('palmeria-fonts');
  wp_deregister_style('palmeria-fonts');   
}
add_action('wp_enqueue_scripts', 'remove_parent_fonts', 20);Code-Sprache: PHP (php)

Preconnects & Preloads

Mittels preconnect kann bereits sehr früh im Ladevorgang eine Verbindung zu wichtigen Third-Party-Quellen aufgebaut werden, damit die Assets von dort so schnell als möglich geladen werden können. Dank preload können einzelne Assets gezielt priorisiert werden, damit diese dann schneller zur Verfügung stehen.
Beim Kleebauer Hof wurden diese Resource Hints für Tracking-Tools und die Schriften verwendet.

<link rel="preconnect" href="https://www.googletagmanager.com">
<link rel="preconnect" href="https://www.google-analytics.com">
<link rel="preload" href="%FONT_PATH%/lb-400.woff2" as="font" crossorigin>Code-Sprache: HTML, XML (xml)

Tags im <head> einfügen

Um die vorher angeführten Optimierungen im <head> der Seite einzufügen, verwendet man am besten einen Hook in der functions.php:

function palmeria_head() {
  // Preconnects
  $output =  '<link rel="preconnect" %ATTRIBUTES%>';
  // Preloads  
  $output .= '<link rel="preload" %ATTRIBUTES%>';
  // Inline Styles
  $output .= '<style>';
  $output .= file_get_contents('%CSS_PATH%/fonts.css');
  $output .= '</style>';
  echo $output;
}
add_action('wp_head', 'palmeria_head', -1000);Code-Sprache: PHP (php)

Nach diesen Optimierungen sollte der Blick auf PageSpeed Insights schon deutlich erfreulicher ausfallen!

PageSpeed Insights: Kleebauer Hof
PageSpeed Insights: Kleebauer Hof

Empfohlene Performance-Plugins

Um die Performance noch weiter zu steigern empfehle ich folgende Plugins:

Autoptimize

Ich verwende Autoptimize hauptsächlich für das Zusammenfügen und Minimieren von JavaScript- und CSS-Dateien. Es bietet auch Funktionalitäten um CSS gezielt inline auszugeben um somit Rendering-blockierendes CSS zu verhindern. Alle zusammengefügten JS-Dateien erhalten das Attribut „defer“ und blockieren somit nicht mehr den Seitenaufbau.

Smush

Das Komprimieren von Bildern ist ein wichtiger Hebel um viele Kilobytes oder sogar Megabytes einzusparen. Smush komprimiert automatisch alle bestehenden und neu hochgeladenen Bilder.

Assets Manager

Jedes aktivierte Plugin wird standardmäßig mit allen dazugehörigen Scripts und Styles auf allen Seiten geladen – unabhängig davon ob auf den jeweiligen Seiten überhaupt Funktionen des Plugins genutzt werden. Der WordPress Assets Manager ermöglicht eine gezielte Steuerung welche Plugins bzw. Assets auf welchen Seiten geladen werden sollten. Das macht sich bezahlt, denn oft hat man den Slider nur auf der Startseite, das Kontaktformular nur auf der Kontaktseite, die Lightbox nur auf der Galerieseite, usw.

WordPress Assets Manager
Das Plugin „Contact Form 7“ wird nur auf Seiten mit Kontaktformular geladen

Comet Cache

Ein Caching-Plugin sollte bei WordPress sowieso nie fehlen. Ich habe einige getestet und habe in letzter Zeit sehr gerne Comet Cache verwendet. Das Plugin überzeugt durch gute Performance und einfache Handhabung: „Einfach aktivieren“ reicht in den allermeisten Fällen.

Happy Optimizing!

Dieser Beitrag hat einige Möglichkeiten aufgezeigt, die Performance von WordPress drastisch zu verbessern, ohne dabei zu sehr ins Detail zu gehen. Für weitere Fragen bzgl. WordPress Performance-Optimierung kontaktiere mich via PIXELUTION.AT oder direkt hier über mein Kontaktformular.

Beitrag bewerten

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne 5,00 von 5 Sternen nach 7 Bewertungen.

Beitrag kommentieren

Du hast Anmerkungen zum Beitrag?
In den Kommentaren ist der optimale Platz dafür!

Kommentar verfassen

Kommentar verfassen