Skip to main content
4 min read

Site Search

See exactly what your visitors search for on your own website, so you can find content gaps and the queries that return nothing.

Overview

Site Search shows you the internal searches visitors run on your site — not what they typed into Google. The data is surfaced in your dashboard at app → open your website → Analytics → "Site Search" panel.

The panel is a sortable table of your top queries with:

  • Searches — how many times the query was run
  • % of searches — the query's share of all searches in the period
  • No-results — how many of those searches returned nothing

You also get a "No-results only" filter to isolate the queries that found nothing, and a page-URL filter to scope the table to searches run from a specific page.

Site Search is free on all plans.

Option A — Automatic URL detection (zero code)

If your search results page puts the query in a URL parameter, Zenovay captures it automatically. No code change is required — once the Zenovay tracking script is installed, it just works.

Zenovay reads the query from the page URL's querystring, checking these parameters in this exact precedence order:

  1. ?q=
  2. ?query=
  3. ?search=
  4. ?s= (this is WordPress's default search parameter)

The first non-empty parameter wins, and the captured value is capped at 256 characters.

Example search-result URLs that are captured automaticallyTEXT
https://example.com/search?q=blue+widgets
https://example.com/results?query=annual+report
https://example.com/?s=contact+form         (WordPress)
https://shop.example.com/search?search=running+shoes

As soon as a visitor lands on any of these URLs with the Zenovay tracker installed, the search term is recorded and appears in the Site Search panel — no extra setup.

WordPress sites work out-of-the-box: WordPress core uses ?s= for its search, which Zenovay detects automatically with no plugin or code change.

Option B — Manual tracking (SPA / JS search with no URL change)

Instant or AJAX search boxes often render results without changing the page URL. In that case, automatic detection has nothing to read, so call the public tracker API yourself when a search is committed:

Track a site searchJavaScript
zenovay.track('search', { query: 'user query', results_count: 12 });

Call this when the visitor submits or commits a search — for example in your search form's submit handler, or right after the results render:

  • query — the raw text the visitor searched for.
  • results_count — the number of results shown for that query.

Supplying results_count powers the zero-result insight — set it to 0 when nothing matched. The list of queries that return nothing is the highest-value SEO and content-gap signal you get from Site Search, so include results_count whenever you can.

React example

React onSubmit handlerJavaScript
function SearchBox() {
const [term, setTerm] = useState('');

const handleSubmit = async (e) => {
  e.preventDefault();
  const results = await searchApi(term);

  // Use the global zenovay object from the tracking script
  zenovay.track('search', {
    query: term,
    results_count: results.length, // 0 when nothing matched
  });

  renderResults(results);
};

return (
  <form onSubmit={handleSubmit}>
    <input value={term} onChange={(e) => setTerm(e.target.value)} />
    <button type="submit">Search</button>
  </form>
);
}

Viewing the data

To see your site-search data, open the website in the app and go to the Analytics tab, then the Site Search panel.

The table shows your top 200 queries by volume for the selected period, with these columns:

ColumnMeaning
SearchesNumber of times the query was run in the period
% of searchesThe query's share of all searches in the period
No-resultsHow many of those searches returned nothing

The "Find query" box searches your full search history for the selected period (server-side) — not just the rows shown — so a rarely-used query that isn't in the top 200 by volume is still found when you type it.

Other controls in the panel:

  • Sortable columns — click a column header to sort the table by that column.
  • "No-results only" toggle — show only the queries that returned nothing, so you can act on content gaps fast.
  • Page-URL filter — scope the table to searches that were run from a specific page.

Privacy

Visitors who send a Global Privacy Control or Do Not Track signal are not tracked, so their searches will not appear in the Site Search panel — this is by design.

Was this page helpful?