Skip to content

Commit

Permalink
GA4: Fix ecommerce tracking of searches without query
Browse files Browse the repository at this point in the history
The GA4 ecommerce tracking for search results doesn't currently work if
the user is searching for an empty query, as the check for whether the
`ga4-search-query` data attribute is present uses loose Javascript
boolean logic (i.e. returning false for an empty string).

This amends it to strictly check for `null` instead (data attribute not
present at all), and adds some tests for the search ecommerce data being
properly set with the query present and absent.
  • Loading branch information
csutter committed Oct 18, 2024
1 parent 17d4719 commit 80a89f2
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ window.GOVUK.analyticsGa4 = window.GOVUK.analyticsGa4 || {};
var element = data.element
var resultsId = data.resultsId
var isClickEvent = data.event !== undefined
var isSearchResult = element.getAttribute('data-ga4-search-query')
var isSearchResult = element.getAttribute('data-ga4-search-query') !== null

var ecommerceSchema = new window.GOVUK.analyticsGa4.Schemas().ecommerceSchema()
var DEFAULT_LIST_TITLE = 'Smart answer results'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -629,6 +629,36 @@ describe('GA4 core', function () {
expect(builtEcommerceObject).toEqual(expectedEcommerceObject)
})

it('tracks variant and term for search results', function () {
resultsParentEl.setAttribute('data-ga4-search-query', 'search term')
resultsParentEl.setAttribute('data-ga4-ecommerce-variant', 'upside-down')

expectedEcommerceObject.search_results.term = 'search term'
expectedEcommerceObject.search_results.sort = 'upside-down'

var builtEcommerceObject = GOVUK.analyticsGa4.core.ecommerceHelperFunctions.populateEcommerceSchema({
element: resultsParentEl,
resultsId: 'result-count'
})

expect(builtEcommerceObject).toEqual(expectedEcommerceObject)
})

it('tracks variant and term for search results even when query is blank', function () {
resultsParentEl.setAttribute('data-ga4-search-query', '')
resultsParentEl.setAttribute('data-ga4-ecommerce-variant', 'upside-down')

expectedEcommerceObject.search_results.term = undefined
expectedEcommerceObject.search_results.sort = 'upside-down'

var builtEcommerceObject = GOVUK.analyticsGa4.core.ecommerceHelperFunctions.populateEcommerceSchema({
element: resultsParentEl,
resultsId: 'result-count'
})

expect(builtEcommerceObject).toEqual(expectedEcommerceObject)
})

it('the ecommerce items array is limited to a maximum of 15,000 UTF-16 code units', function () {
var innerHTML = ''
var ecommerceItems = []
Expand Down

0 comments on commit 80a89f2

Please sign in to comment.