Built with Chinaski

Site Search

Built sites include a working search page at /search/ — generated per language at build time, backed by a static JSON index, and searched entirely in the visitor’s browser. This page covers how it works and how it stays current.

How it works

  • The builder writes a search index<language>/search-index.json — containing every published page and post in that language: the entry type, title, absolute URL, and an excerpt (the author’s excerpt when supplied; otherwise a 160-character summary generated from the body).
  • The search page (rendered from search.tt, with your theme’s header and footer) loads that index client-side and matches the visitor’s q= query locally — no server round-trip, no search backend, nothing to configure.

What’s searchable

  • Published pages and posts, per language. Each index entry carries the title, result URL, and excerpt — so what matches is exactly what a visitor reads in the listing.
  • Indexes are scoped by language: a search under a language’s /search/ never surfaces results in another language (consistent with the per-language output model).
  • Excerpts come from the author’s own excerpt field when set, else the auto-generated summary — the same text used in listings and feeds, so search previews match what a click-through shows.

Always current

The index is regenerated on every build — incremental builds too — so the search results reflect exactly the content that was last promoted. Publish, rebuild, and search sees it.

Utility-page details

  • /search/ pages are marked noindex by the builder, so they never appear in sitemaps or crawler listings.
  • The service worker (PWA) also pre-caches the search page per language, so search renders from cache offline — matching queries against the bundled index.
  • The header’s search form targets the same /search/ URL with a q= parameter, in every language vhost.

The admin area has its own search surfaces — the Library’s block search, the documents listing search, and the API’s /api/search endpoint for scripts — but those search the database and are administered. The public search page is the built one described here.