> ## Documentation Index
> Fetch the complete documentation index at: https://help.chateea.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Script preventivo de seguimiento para Google Ads

> Instala un script en Google Ads que aplica la plantilla de seguimiento como respaldo de tu atribución.

El script de seguimiento preventivo es un respaldo para tu atribución de Google Ads. Si la plantilla de seguimiento UTM falla al capturar los datos, el script aplica automáticamente una plantilla de seguimiento a cada grupo de anuncios activo, con los nombres reales de la campaña, el grupo y el anuncio. Así los leads siguen llegando a Chateea con su origen correcto.

Se instala una sola vez dentro de tu cuenta de Google Ads y se ejecuta cada hora.

## Antes de empezar

* Configura primero el informe de Google Ads y la plantilla UTM. Mira [Configurar informes de Google Ads](https://help.chateea.com/docs/informes/configurar-informes-de-google-ads.md).
* Necesitas acceso de administrador a la cuenta de Google Ads.

## Instalar el script

**1. Abre tu cuenta de Google Ads**

Inicia sesión en Google Ads.

**2. Ve a Scripts**

Haz clic en **Herramientas y configuración → Acciones masivas → Scripts**. Si no ves **Herramientas y configuración**, cambia a la vista avanzada.

**3. Crea un script nuevo y pega el código**

Crea un script nuevo, borra el código que trae predefinido y pega el siguiente:

```javascript theme={null}
function main() {
    var TrackingTemplate = "{lpurl}?utm_source=adwords&utm_medium={AdName}&utm_campaign={CampaignName}&utm_content={AdGroupName}&utm_keyword={keyword}&utm_matchtype={matchtype}&campaign_id={campaignid}&ad_group_id={adgroupid}&ad_id={creative}";

    var _CAMPAIGN_CONTAINS = "";
    var _ADGROUP_CONTAINS = "";
    var STATUS = "ENABLED";

    if (TrackingTemplate.search(/{AdGroupName}|{CampaignName}|{AdName}/g) == -1) {
        Logger.log("Enter at least one of the {CampaignName} or {AdGroupName} or {AdName} parameter in the tracking template");
        return
    }

    if (TrackingTemplate.search("{AdGroupName}") > 0) {
        var adgroupIterator = {
            hasNext: function() {
                return false
            }
        }
        if (_ADGROUP_CONTAINS == "" && _CAMPAIGN_CONTAINS == "") {
            adgroupIterator = AdsApp.adGroups().withCondition("Status = " + STATUS).get();
        } else if (_ADGROUP_CONTAINS == "" && _CAMPAIGN_CONTAINS !== "") {
            adgroupIterator = AdsApp.adGroups().withCondition("CampaignName contains '" + _CAMPAIGN_CONTAINS + "'").withCondition("Status = " + STATUS).get();
        } else if (_ADGROUP_CONTAINS !== "" && _CAMPAIGN_CONTAINS !== "") {
            adgroupIterator = AdsApp.adGroups().withCondition("CampaignName contains '" + _CAMPAIGN_CONTAINS + "'").withCondition("Name contains '" + _ADGROUP_CONTAINS + "'").withCondition("Status = " + STATUS).get();
        } else if (_ADGROUP_CONTAINS !== "" && _CAMPAIGN_CONTAINS == "") {
            adgroupIterator = AdsApp.adGroups().withCondition("Name contains '" + _ADGROUP_CONTAINS + "'").withCondition("Status = " + STATUS).get();
        }

        if (!adgroupIterator.hasNext()) {
            Logger.log("No Campaigns/Adgroups matched with this condition");
            return
        }
        while (adgroupIterator.hasNext()) {
            var adgroup = adgroupIterator.next();
            var adgrouptemplate = TrackingTemplate.replace(/{AdGroupName}/g, adgroup.getName().replace(/\s/g, '%20'))
            if (TrackingTemplate.search("{CampaignName}") > 0) {
                adgrouptemplate = adgrouptemplate.replace(/{CampaignName}/g, adgroup.getCampaign().getName().replace(/\s/g, '%20'))
            }

            if (TrackingTemplate.search("{AdName}") > 0) {
                var adsIterator = adgroup.ads().get();
                while (adsIterator.hasNext()) {
                  var ad = adsIterator.next();
                  var adType = ad.getType();
                  var headline = "";

                  if (ad.getHeadline()) {
                    headline = ad.getHeadline();
                  } else if(ad.isType().expandedTextAd()) {
                    headline = ad.asType().expandedTextAd().getHeadlinePart1();
                  } else if(ad.isType().gmailImageAd()) {
                    headline = ad.asType().gmailImageAd().getName();
                  } else if(ad.isType().gmailMultiProductAd()) {
                    headline = ad.asType().gmailMultiProductAd().getHeadline();
                  } else if(ad.isType().gmailSinglePromotionAd()) {
                    headline = ad.asType().gmailSinglePromotionAd().getHeadline();
                  } else if(ad.isType().html5Ad()) {
                    headline = ad.asType().html5Ad().getName();
                  } else if(ad.isType().imageAd()) {
                    headline = ad.asType().imageAd().getName();
                  } else if(ad.isType().responsiveDisplayAd()) {
                    headline = ad.asType().responsiveDisplayAd().getShortHeadline();
                  } else if(ad.isType().responsiveSearchAd()) {
                    var headlines = ad.asType().responsiveSearchAd().getHeadlines();
                    if (headlines && headlines[0].text) {
                      headline = headlines[0].text;
                    }
                  }

                  Logger.log("Headline text : " + headline);

                  if (headline) {
                    adgrouptemplate = adgrouptemplate.replace(/{AdName}/g, headline.replace(/\s/g, '%20'))
                  } else {
                    adgrouptemplate = adgrouptemplate.replace(/{AdName}/g, ad.getId())
                  }
                }
            }
            adgroup.urls().setTrackingTemplate(adgrouptemplate);
            Logger.log(adgroup.getCampaign().getName() + " => " + adgroup.getName() + " => " + adgrouptemplate)
        }
    }
}
```

**4. Autoriza y revisa la vista previa**

Google Ads te pedirá autorizar el script, porque modifica tu cuenta. Antes de ejecutarlo, usa la **vista previa**: la mayoría de las campañas deben aparecer como correctas y con la página de destino encontrada.

**5. Ponle nombre y prográmalo**

Cierra el editor, cambia el nombre del script por uno reconocible y, en **Frecuencia**, elige **Cada hora**.

## Opciones del script

Al principio del código hay tres variables que puedes ajustar si no quieres aplicarlo a toda la cuenta:

| Variable | Para qué sirve | Valor predeterminado |
| - | - | - |
| `_CAMPAIGN_CONTAINS` | Aplicar el script solo a campañas cuyo nombre contenga este texto | Vacío (todas) |
| `_ADGROUP_CONTAINS` | Aplicar el script solo a grupos de anuncios cuyo nombre contenga este texto | Vacío (todos) |
| `STATUS` | Estado de los grupos de anuncios a los que se aplica | `ENABLED` (activos) |

> [!WARNING]
>
> No cambies la plantilla de seguimiento dentro del script. Debe coincidir con la plantilla UTM que usa Chateea para atribuir los leads.

## Preguntas frecuentes

> **Si ya tengo otro script, ¿se verá afectado?**
>
> Puede ser. Si otro script también modifica las plantillas de seguimiento o los parámetros UTM, uno puede sobrescribir al otro. Revisa qué hace cada script antes de activarlos juntos.

> **¿Por qué tengo que autorizarlo?**
>
> Porque el script se ejecuta dentro de tu cuenta de Google Ads y cambia la plantilla de seguimiento de tus grupos de anuncios. Revisa siempre la vista previa antes de ejecutarlo.

> **¿Reemplaza a la plantilla UTM de la cuenta?**
>
> No. Es un respaldo. Mantén la plantilla UTM configurada como se explica en [Configurar informes de Google Ads](https://help.chateea.com/docs/informes/configurar-informes-de-google-ads.md).

## Artículos relacionados

> **[Configurar informes de Google Ads](https://help.chateea.com/docs/informes/configurar-informes-de-google-ads.md)**
>
> Conecta tu cuenta y agrega la plantilla UTM.

> **[Solucionar problemas de Google Ads](https://help.chateea.com/docs/informes/solucionar-problemas-informes-de-google-ads.md)**
>
> Qué revisar si faltan datos.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.