Usage
Search Tracking
ProTrack 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:
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:
- Dashboard - Site Searches card shows popular queries
- Searches Page - Full query list with search counts
Insights from Search Data
Popular Searches
Identify what visitors search for most frequently:
Zero-Result Searches
Queries with zero results indicate content gaps:
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);
}
}
Debounce Instant Search
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'
});
}