Skip to content
Documentation

Search

The /search page searches every published page and blog post. Drafts never appear.

How it works

Search uses Postgres full-text search, so it runs inside your Supabase database with no extra service to set up. Each page and post keeps a search index that updates whenever it's saved.

Matches are ranked by where the words appear:

  • Posts: title first, then excerpt, then body.
  • Pages: title first, then body or meta description, then slug.

Results show the title with the matching words highlighted in a short snippet, 12 results per page.

Search syntax

The search box accepts the same syntax people use in web search:

QueryFinds
garden designResults containing both words
"garden design"The exact phrase
garden or patioEither word
garden -patio"garden" but not "patio"

URL parameters

ParameterDefaultLimits
qemptyUp to 120 characters
page11 to 200

For example: /search?q=garden&page=2.

Using search from the API

Search is the one API endpoint that works without a token:

BASH
curl "https://your-site.com/api/v1/public/search?q=garden"

It's limited to 120 requests per minute. MCP clients can use the search_published_content tool, which needs a token like every MCP call. See REST API.

If search returns nothing

The search index comes from a migration. If results are always empty, apply all migrations with npx supabase db push, or check the SQL templates screen for anything marked "not applied".