Search für Craft CMS: Findet alles, was deine Seite zeigt

Insights Übersicht

Search für Craft CMS: 
Findet alles, was deine Seite zeigt

image

Craft hat eine richtig gute eingebaute Suche. Wir haben sie trotzdem weitergedacht. Das Ergebnis heißt schlicht „Search“ und findet Seiten so, wie Besucher sie sehen: inklusive Blöcken, CKEditor-Text und verknüpften Einträgen.

Eine Besucherin tippt „Keynote Müller“ ins Suchfeld. Sie weiß genau, dass es die Seite gibt. Sie hat sie letzte Woche selbst gesehen. Die Suche antwortet trotzdem mit einem freundlichen „Keine Treffer“.

Der Grund ist selten Schlamperei. Meistens steckt der Name in einem Matrix-Block, in einem verknüpften Speaker-Eintrag oder tief im CKEditor. Die Seite zeigt den Text, aber gespeichert ist er woanders.

Genau hier setzt unser Plugin an. Search indexiert jede Seite so, wie deine Besucher sie sehen. Und es hält diesen Index von selbst aktuell.

Erst einmal: Hut ab vor der Craft-Suche

Wir arbeiten ausschließlich mit Craft CMS. Und wir sagen es gerne laut: Die native Suche ist genial. Sie ist eingebaut, braucht keinen externen Dienst und läuft vom ersten Tag an.

So funktioniert sie in Kürze:

Ein zentraler Suchindex
Craft schreibt Suchbegriffe beim Speichern eines Elements in eine eigene Tabelle. Titel, Slugs, Dateinamen und ähnliche Attribute sind automatisch dabei.

Felder per Opt-in
Jedes Feld hat die Option „Use this field’s values as search keywords“. Redaktion und Entwicklung entscheiden also bewusst, was durchsuchbar ist. Das ist sauber und datenschutzfreundlich.

Eine mächtige Abfragesprache
OR, Ausschluss mit -begriff, exakte Phrasen in Anführungszeichen, Wildcards mit * und gezielte Feldsuchen wie titel:konzert oder titel::konzert für exakte Werte.

Relevanz-Scoring
Jedes Ergebnis bekommt einen Score. Treffer im Titel zählen mehr, Teiltreffer weniger. Mit orderBy('score') stehen die besten Ergebnisse oben.

Erweiterbar
Über Events lassen sich Ergebnisse und Scores programmatisch anpassen.

Für viele Websites reicht das völlig. Die Craft-Suche ist allerdings elementbasiert. Sie sucht in Einträgen, Assets und Kategorien als einzelne Datensätze. Eine Website denkt aber in Seiten.

Und moderne Craft-Seiten sind Baukastensysteme: Matrix-Blöcke in Matrix-Blöcken, verknüpfte Speaker, eingebettete Einträge im CKEditor. Damit all das gefunden wird, muss jedes verschachtelte Feld einzeln für die Suche freigegeben sein. Bei verknüpften Elementen landen im Index der Seite nur deren Titel. Ändert sich ein verknüpfter Eintrag, weiß die Seite, die ihn anzeigt, davon zunächst nichts.

Das ist kein Fehler, sondern eine bewusste Architektur. Sie ist schlank und schnell. Wir wollten nur noch einen Schritt weiter gehen.

Was Search daraus macht

Search nimmt das starke Fundament von Craft und baut eine Suche obendrauf, die in Seiten denkt. Das Motto: Find pages by everything they show.

Eine Seite, ein Suchdokument

Jede Seite mit URL wird zu genau einem Dokument im Index. Darin landet alles, was die Seite zeigt:

  • die eigenen Felder und Attribute, etwa der Titel
  • Felder in Matrix-, Neo- und Content-Block-Feldern, egal wie tief verschachtelt
  • CKEditor-Text samt eingebetteter Einträge
  • durchsuchbare Inhalte aus verknüpften Einträgen, Kategorien und Assets, bis zu einer frei wählbaren Tiefe
  • SEO-Titel und -Beschreibung, wenn sie auf der Seite gesetzt sind

Automatisches Reindexing

Ändert jemand den Speaker-Eintrag von Frau Müller, folgt Search den Verknüpfungen zurück. Alle Seiten, die sie zeigen, werden im Hintergrund über die Craft-Queue neu indexiert. Niemand muss etwas neu speichern.

Zwei Editionen

Lite läuft direkt auf deiner bestehenden Datenbank. Pro legt für größere Websites und mehr redaktionelle Kontrolle nach.

Du kannst mit Lite starten und später auf Pro wechseln. Index, Facetten und Templates bleiben dabei erhalten.

Für Marketeers: Endlich steuern, was gefunden wird

Suche ist kein Technik-Detail. Sie ist das Gespräch, das deine Besucher mit deiner Website führen. Wer sucht, weiß schon, was er will. Das sind deine heißesten Leads.

  • Facetten wie im Onlineshop
     Filtern nach Kategorie, Speaker, Standort oder Datum, mit Live-Zählern. Auch Werte aus Blöcken und verknüpften Einträgen funktionieren als Facette.
  • Synonyme (Pro)
    Deine Zielgruppe sagt „Gig“, deine Redaktion schreibt „Konzert“? Kein Problem: konzert, gig, show als Synonymgruppe anlegen, fertig. Ohne Rebuild, sofort wirksam.
  • Gepinnte Ergebnisse (Pro)
    Bei „Tickets“ soll die Ticketseite ganz oben stehen? Dann pinne sie. Das Template kann gepinnte Treffer sogar als „Empfohlen“ markieren.
  • Such-Analytics (Pro)
    Sieh, wonach Menschen suchen, pro Site und Zeitraum. Besonders wertvoll: die Suchen ohne Treffer. Das ist deine fertige Content-Roadmap.
  • Datenschutz inklusive
    Geloggt werden nur Suchbegriff, Site und Trefferzahl. Nichts über die Person.
  • Eigene Rechte
    Jeder Pro-Bereich hat eine eigene Berechtigung. Die Redaktion pflegt Synonyme und Pins, ohne an die Systemeinstellungen zu kommen.
  • Mehrsprachig
    Jede Site wird separat indexiert und in ihrer eigenen Sprache durchsucht.

Für Techniker: In fünf Minuten zur ersten Suche

Voraussetzungen: Craft CMS 5.9+ und PHP 8.2+. Installation wie gewohnt:

composer require contentreactor/craft-search
php craft plugin/install cr-search
php craft cr-search/setup

Das Setup geht auch per Klick unter Search → Setup. Danach liefert der Results-Endpoint sofort eine funktionierende Suchseite. Wer mag, ersetzt die Basis-Templates oder baut die Suche direkt mit Twig ein:

{{ crSearchForm({ facets: ['speakers'] }) }}

{% set results = craft.crSearch.search({ q: craft.app.request.getParam('q') }) %}
{% for entry in results.elements %}
 <h3>{{ entry.title }}{% if results.isPinned(entry) %} · Empfohlen{% endif %}</h3>
{% endfor %}

Was Entwicklerherzen höher schlagen lässt:

  • Facetten als Konfiguration. In config/cr-search.php definierst du Facetten als Pfade zu Feld- und Attribut-Handles, auf Wunsch gezielt in Blöcke eines bestimmten Entry Types.
  • Datenbank oder Elasticsearch. Lite nutzt einen FULLTEXT-Index auf MySQL. Auf PostgreSQL wird jede Site in ihrer Sprache durchsucht, mit Stemming und Stopwörtern (etwa de → german_unaccent). Pro wechselt per Einstellung auf Elasticsearch. Facetten, Templates und GraphQL bleiben gleich.
  • Headless-ready. Eine crSearch-GraphQL-Query und JSON per Accept: application/json. Ergebnisse respektieren die Leserechte des Schemas.
  • Events überall. EVENT_BEFORE_SEARCH und EVENT_AFTER_SEARCH verändern Queries und Ergebnisse, etwa für Caching. EVENT_DEFINE_INDEXABLE steuert, was in den Index kommt. Eigene Index-Typen registrierst du über EVENT_REGISTER_INDEX_TYPES.
  • CLI für Deployments. cr-search/index/rebuild und cr-search/index/clear, optional pro Site.

Fazit: Gutes Fundament, Spitzenprodukt obendrauf

Die Craft-Suche ist ein großartiges Fundament: eingebaut, schnell, flexibel. Search macht daraus eine Suche, die Seiten so findet, wie Menschen sie sehen. Sie bleibt von selbst aktuell, und das Marketing kann sie endlich selbst steuern.

Und Frau Müllers Keynote? Die steht jetzt ganz oben. Vielleicht sogar gepinnt.

Jetzt ausprobieren:

Fragen? support@contentreactor.com