SR
Usage

Search Tracking

Pro

Track site search queries to understand what visitors are looking for.


Site search tracking reveals what your visitors are looking for, helping you improve content and navigation.

trackSearch()

Track search queries programmatically:

window.insights.trackSearch(query, resultsCount)

Parameters:

ParameterTypeRequiredDescription
querystringYesSearch query (max 255 chars)
resultsCountnumberNoNumber of results found

Example:

// After performing a search
const query = searchInput.value;
const results = performSearch(query);

window.insights.trackSearch(query, results.length);

Integration Examples

Basic Search Form

document.querySelector('#search-form').addEventListener('submit', function(e) {
    const query = document.querySelector('#search-input').value;

    // Track the search
    window.insights.trackSearch(query);
});

Craft Search Integration

Track Craft's native search:

{# In your search results template #}
{% set query = craft.app.request.getParam('q') %}
{% set results = craft.entries.search(query).all() %}

<script>
document.addEventListener('DOMContentLoaded', function() {
    window.insights.trackSearch(
        {{ query|json_encode|raw }},
        {{ results|length }}
    );
});
</script>

Algolia Integration

search.on('render', function() {
    const query = search.helper.state.query;
    const hits = search.helper.lastResults.nbHits;

    if (query) {
        window.insights.trackSearch(query, hits);
    }
});

Viewing Search Data

Search analytics appear in:

  1. Dashboard - Site Searches card shows popular queries
  2. Searches Page - Full query list with search counts

Insights from Search Data

Identify what visitors search for most frequently:

QuerySearchesResults
pricing2453
documentation18912
api1568

Zero-Result Searches

Queries with zero results indicate content gaps:

QuerySearchesResults
refund policy450
enterprise320
integrations280

Consider creating content for these topics.

Best Practices

Normalize Queries

Searches should automatically be trimmed. For additional normalization:

function trackNormalizedSearch(query, results) {
    // Remove extra whitespace
    const normalized = query.trim().replace(/\s+/g, ' ');

    if (normalized) {
        window.insights.trackSearch(normalized, results);
    }
}

For search-as-you-type interfaces, debounce tracking:

let searchTimeout;

searchInput.addEventListener('input', function() {
    clearTimeout(searchTimeout);

    searchTimeout = setTimeout(function() {
        const query = searchInput.value;
        if (query.length >= 3) {
            performSearch(query);
            window.insights.trackSearch(query);
        }
    }, 500);
});

Track Result Clicks

Combine search tracking with event tracking:

function trackResultClick(query, resultUrl) {
    window.insights.trackEvent('search_result_click', {
        category: 'search'
    });
}

Copyright © 2026 Samuel Reichör