> For the complete documentation index, see [llms.txt](https://academy.gopersonal.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://academy.gopersonal.ai/developers/google-analytics/search.md).

# Search

Para el seguimiento de búsquedas, se deben enviar eventos en tres momentos clave: cuando el usuario realiza una búsqueda, cuando se muestran los resultados y cuando interactúa con ellos.

**1. Búsqueda realizada**

Cuando el usuario ejecuta una búsqueda, se debe enviar el evento **`search`**, incluyendo:

* `search_term`: término buscado
* `search_results_count`: cantidad de resultados obtenidos
* `search_type`: tipo de búsqueda
* `search_id`: identificador de la búsqueda
* `occasion_search`: indicador de búsqueda por ocasión (si aplica)

Opciones de envío:

***SDK de Gopersonal:***\
`trackGopersonalSearch(query, resultsCount, searchType, searchId, occasionSearch)`

***SDK de Search (embeded):***\
Se envía automaticamente si analytics habilitado.

<figure><img src="/files/LA7NOEp4Yoybt4gjAADD" alt="" width="375"><figcaption></figcaption></figure>

Si gtag disponible en el sitio usar gtagFunction, si gtag no disponible usar dataLayer. En caso de que sea algo custom usar customDataLayerFunction donde recibirá los valores

```typescript
{'type' : 'search',
'query' : query,
'search_type' : search_type,
'results_count' : resultsCount,
'search_id' : search_id,
'occasion_search' : occasion_search
}
```

y deberá transformar al formato esperado y hacer dataLayer.push(parsedObject).

**2. Visualización de resultados**

Cuando se muestran los resultados de búsqueda, se debe enviar el evento **`view_item_list`**, incluyendo:

* `item_list_name`: `'Gopersonal - Search Results'`
* `items`: listado de productos mostrados (formateados para GA4)

Opciones de envío:

***SDK de Gopersonal:***\
`trackGopersonalSearchResults(products)`

***SDK de Search (embeded):***\
Se envía automaticamente si analytics habilitado.

<figure><img src="/files/LA7NOEp4Yoybt4gjAADD" alt="" width="375"><figcaption></figcaption></figure>

Si gtag disponible en el sitio usar gtagFunction, si gtag no disponible usar dataLayer. En caso de que sea algo custom usar customDataLayerFunction donde recibirá los valores

```typescript
{
  'type' : 'search_results',
  'products' : products,
}
```

y deberá transformar al formato esperado y hacer dataLayer.push(parsedObject).\
**OBS**: products ya cuenta con el formato esperado por GA4.

**3. Click en un resultado**

Cuando el usuario hace click en un producto desde los resultados de búsqueda, se debe enviar el evento **`select_item`**, incluyendo:

* `item_list_name`: `'Gopersonal - Search Results'`
* `items`: producto seleccionado (formateado para GA4)

***SDK de Gopersonal:***\
`trackGopersonalSearchResultClick(product)`

***SDK de Search (embeded):***\
Se envía automaticamente si analytics habilitado.

<figure><img src="/files/LA7NOEp4Yoybt4gjAADD" alt="" width="375"><figcaption></figcaption></figure>

Si gtag disponible en el sitio usar gtagFunction, si gtag no disponible usar dataLayer. En caso de que sea algo custom usar customDataLayerFunction donde recibirá los valores

```typescript
{
  'type' : 'product_click',
  'product' : product,
}
```

y deberá transformar al formato esperado y hacer dataLayer.push(parsedObject).\
**OBS**: product ya cuenta con el formato esperado por GA4.

#### Verificación

Es posible verificar que los eventos se estén enviando correctamente desde la consola del navegador, inspeccionando el objeto `dataLayer`.

<figure><img src="/files/mu7wxHCLHsTRczqojphz" alt=""><figcaption></figcaption></figure>

**IMPORTANTE**:

Pueden existir implementaciones personalizadas de GA4. En estos casos, aunque los eventos aparezcan en `dataLayer`, es posible que no se envíen correctamente a GA4.

{% hint style="warning" %}
Como parte de la verificación se debe corroborar que los eventos se envían de igual manera que los otros eventos en el sitio.
{% endhint %}

Si los eventos difieren se debe enviar usando customDataLayerFunction en caso de embeded o a través del sdk de Gopersonal usando `trackGopersonalToDataLayer.`

<figure><img src="/files/oPGEmhpojKHDgzZOUSXy" alt=""><figcaption></figcaption></figure>

**OBS**: Al usar `trackGopersonalToDataLayer` es necesario usar la función parseItemsForGA4 para llevar a un formato esperado por GA4.
