# 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:&#x20;

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

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

<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&#x20;

```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). &#x20;

**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:&#x20;

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

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

<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&#x20;

```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.&#x20;

**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.&#x20;

<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&#x20;

```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. &#x20;

#### Verificación&#x20;

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

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

**IMPORTANTE**:&#x20;

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.`&#x20;

<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.&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://academy.gopersonal.ai/developers/google-analytics/search.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
