WordPress: Die Suche und Suchergebnisse optimieren

Alexander Trust, den 6. Mai 2021
Wordpress - Wallpaper
Wordpress – Wallpaper

Habt Ihr schon einmal das Gefühl gehabt, dass die WordPress-Suche unheimlich langsam ist? Dies kann viele Gründe haben. Wir wollen Euch in diesem Artikel zweierlei zeigen: Einmal, wie Ihr die Suchergebnisse optimieren könnt, beispielsweise indem Ihr sie optisch hervorhebt. Wir wollen Euch aber auch zeigen, wie Ihr die Suche deutlich beschleunigen könnt, indem Ihr unnütze Abfragen aus der Suche entfernt.

WordPress-Suche beschleunigen

Derzeit entwickle ich für Macnotes ein neues Thema, das ausschließlich AMP nutzt, damit die Website für den Google-Bot, und andere sowohl auf dem Desktop als auch am Smartphone oder Tablet die gleichen Resultate liefert. Diese Konsistenz soll auf Dauer dafür sorgen, dass ich Änderungen an der Website besser mit Erfolgen bei Google in Einklang bringen kann.

In meiner lokalen Entwicklungsumgebung ist mir neulich aufgefallen, wie langsam die Suche ist, und also habe ich mich daran begeben, die Ursache zu finden, und die Suche letzten Endes zu beschleunigen. Ein Plug-in, das Euch dabei behilflich sein kann, ist „Query Monitor“ von John Blackbourn. Ihr solltet es aber vor allem in Entwicklungsumgebungen einsetzen, weil es seinerseits einige Ressourcen nutzt und so die Seite selbst verlangsamen kann.

Tablepress-Ergebnisse verlangsamen die Suche ungemein

Query Monitor (QM) zeigt Euch unter anderem PHP-Fehler an, es fängt aber auch die Datenbankabfragen ab und stellt fest, wie lange sie dauern. Ihr könnt auf diese Weise auch die Abfragen nachverfolgen und so über ein Datenbank-Tool wie Sequel Ace noch einmal nachstellen.

Dabei habe ich zum Beispiel rausgefunden, dass WordPress mit installiertem Tablepress folgende Abfrage startet, wenn Ihr nach „iphone 12“ sucht:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND (((wp_posts.post_title LIKE '%iphone%')
OR (wp_posts.post_excerpt LIKE '%iphone%')
OR (wp_posts.post_content LIKE '%iphone%')
OR (wp_posts.post_content REGEXP '[table “” not found /]
?)(9|10|11|13|14|44|45|50)([]"' /])')) AND ((wp_posts.post_title LIKE '%12%') OR (wp_posts.post_excerpt LIKE '%12%') OR (wp_posts.post_content LIKE '%12%') OR (wp_posts.post_content REGEXP '[table “” not found /]
?)(1|2|3|5|7|10|11|13|14|17|19|20|21|23|30|32|39|41|43|44|47|50|51|55|57|58|59|60)([]"' /])'))) AND wp_posts.post_type IN ('post', 'page', 'attachment', 'buch', 'event', 'firma', 'person', 'plattform', 'produkt') AND (wp_posts.post_status = 'publish') ORDER BY (CASE WHEN wp_posts.post_title LIKE '%iphone 12%' THEN 1 WHEN wp_posts.post_title LIKE '%iphone%' AND wp_posts.post_title LIKE '%12%' THEN 2 WHEN wp_posts.post_title LIKE '%iphone%' OR wp_posts.post_title LIKE '%12%' THEN 3 WHEN wp_posts.post_excerpt LIKE '%iphone 12%' THEN 4 WHEN wp_posts.post_content LIKE '%iphone 12%' THEN 5 ELSE 6 END), wp_posts.post_date DESC LIMIT 0, 10;

Mal abgesehen von generell ziemlich vielen Zeilen, fallen sofort zwei ins Auge, nämlich die mit dem „REGEXP“. Das sind Suchabfragen, die explizit von Tablepress stammen.

Ja und dann habe ich einfach mal ausprobiert, wie lange die Suche mit und ohne diese Zeilen dauert. In der Entwicklungsumgebung waren das 13,7 Sekunden mit Tablepress-Ergebnissen versus 1,39 Sekunden ohne. Es würde zwar auf dem Webserver wegen mehr RAM und Ressourcen, etc. nicht dermaßen auseinander driften, aber es ist trotzdem ein unnötiger Ballast.

Denn ich nutze Tabellen nur innerhalb von Texten und in den Texten selber kommen die Suchwörter „hoffentlich“ auch vor. Also habe ich mich entschieden, WordPress nicht mehr die Tablepress-Tabellen zu durchsuchen.

Ihr fügt dazu folgenden Befehl in die „functions.php“ ein:

add_filter( 'tablepress_wp_search_integration', '__return_false' );

Unnötige Bestandteile entfernen

Tablepress ist aber nicht das Einzige, das ich aus der Suche entferne. Ihr selbst könnt Euch überlegen, welche Beitragstypen (Post Type) Bestandteil der Suche sein sollen. Wenn Ihr beispielsweise für einen „Custom Post Type“ gar kein Archiv habt und stattdessen die Inhalte dahinter mehr wie in einem Glossar nutzt, kann es sich auch lohnen, diese aus der Suche zu entfernen.

Ebenfalls macht es in meinen Augen zum Beispiel keinen Sinn, die „Attachments“ durchsuchen zu lassen. Ich nutze Bilder, PDFs oder Audiodateien und Videos ebenfalls innerhalb von Beiträgen, und entsprechend kann ich sie aus der Suche rausfiltern.

Das könnt Ihr wie folgt tun:

 add_action( 'init', 'sn_exclude_from_search_results' );
function sn_exclude_from_search_results() {
	global $wp_post_types;
	$wp_post_types['attachment']->exclude_from_search = true;
}

Suchwörter hervorheben

Noch etwas finde ich persönlich sehr hilfreich, und zwar das optische Hervorheben von Suchwörtern. So kann man den Kontext um das Gesuchte schneller in den Blick nehmen. Dazu ist natürlich ein bisschen CSS notwendig. Also füge ich entsprechend eine Klasse zu den Suchworten hinzu. Das klappt folgendermaßen:

function sn_highlight_title() {
  $title = get_the_title();
  $keys = implode('|', explode(' ', get_search_query()));
  $title = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">

Ähnliche Nachrichten

Zugehörige Produkte