Wir hängen Pagefind als festen Schritt in die Build-Kette, nicht als nachträgliches Skript.
Auf dieser Website ist es Schritt drei von sechs: erst wird das CSS kompiliert, dann bekommt jede
h2
und h3
eine stabile ID, und erst danach läuft
pagefind --site dist
über die fertigen Seiten. Die Reihenfolge ist kein Detail: Ohne die Anker vorher kennt der Index
keine Sprungziele, und die Suche könnte nur auf ganze Seiten verlinken.
Indexiert wird nur, was zählt. Der durchsuchbare Bereich ist mit
data-pagefind-body
am Hauptinhalt ausgezeichnet — Topbar, Footer und die Palette selbst bleiben draußen, sonst
meldet jede Seite denselben Rahmen als Treffer. Die Runtime liegt auf demselben Host wie die
Website. Das ist der Grund, warum unsere
Content-Security-Policy ohne Ausnahme
für einen Fremdhost auskommt und die Suche keine Einwilligung braucht.
Die Oberfläche bauen wir selbst. Pagefind bringt fertige UI-Komponenten mit; wir nutzen
stattdessen die JavaScript-API und rendern die Treffer in unsere Command-Palette. Sie mischt
Navigationsziele und Volltexttreffer in einer Liste, zeigt den Textausschnitt mit hervorgehobenem
Suchbegriff und springt beim Auswählen direkt in den passenden Abschnitt. Getippt wird mit
120 Millisekunden Verzögerung gesucht, angezeigt werden die sechs besten Treffer, und veraltete
Antworten werden verworfen, wenn die nächste Eingabe schneller war.
Geladen wird die Bibliothek erst, wenn jemand die Palette öffnet — beim normalen Seitenaufruf
kostet die Suche null Byte. Das ist Absicht: Die Startseite steht bei
PageSpeed Insights mobil auf 100/100/100/100, und
eine Suche, die immer mitlädt, würde genau daran knabbern. Fällt der Import aus, läuft die Palette
ohne Volltext weiter — die Navigation bleibt bedienbar.