Metidos de lleno en época de rebajas, Google Ads ofrece un Script que se ejecuta cada hora y detiene de forma automática los anuncios de productos que están agotados en Shopify.
Atravesando una época de tantas compras como en la que estamos ahora mismo adentrados, es posible que veamos anuncios de productos que se ejecutan, pero el producto se encuentra agotado, lo que conlleva un presupuesto desperdiciado.
¿Cómo funciona?
Sigue las URL de todos los anuncios activos hasta la página de destino, dentro de ella, busca una determinada cadena de texto, por ejemplo “agotado”.
Si el producto está agotado, los anuncios se pausan y se deberán etiquetar con “detenido-agotado”.
Este Script también nos habilita de manera automática los anuncios que estén de nuevo en existencia.
Es decir, revisa absolutamente todos los anuncios que están con la etiqueta “En pausa – Detenido – Agostado” y si el producto nuevamente vuelve a estar disponible lo habilita.
Vale la pena que señalemos que si tienes un producto de múltiples variantes (color, tamaño, etc…), su URL lleva a una opción de no agotado¿Cómo configuramos el Script?
El Script nos permite varias opciones diferentes para configurarlo como se desee utilizar.
En la línea 16: ingresamos un elemento común de todas las campañas. Si queremos que este Script funcione en todas las campañas, deje esto en blanco.
Lo conveniente es ejecutar este Script en campañas donde los anuncios de un producto apuntan de forma directa a las URL de una página de producto, en lugar de una página de categoría u otra página del sitio web.
En la línea 19: aquí ingresamos un elemento común de todas las campañas que desea excluir. Si deseamos que el Script funcione en todas las campañas, dejaremos esto en blanco.
En la línea 22: introducimos un elemento html que podemos encontrar utilizando los detalles del elemento de inspección en la cadena de la página.
Por ejemplo “sold_out”.
En la línea 25: escribimos parte de la URL que identifica las páginas del producto. Esto es muy importante, el Script también escaneará las páginas de categorías y, si tiene un producto agotado, puede detener todos los anuncios que apuntan en dirección a ese producto.
Una vez que ya tengamos configurado el Script, tenemos que asegurarnos de haberlo configurado de manera correcta y que funcione de manera esperada y deseada.
Línea de comandos:
* [Scripts de Adwords] Pausar productos agotados
* *
* *
* *
* *
* *
* Versión: 1.0
* mantenido por Clicteq
* *
** /
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
// Especifique qué frase / palabra deben contener los nombres de campaña, use '' para ignorar
CAMPAIGN_CONTAINS = ''
// Especifique qué nombres de campaña de frase / palabra no deben contener, use '' para ignorar
CAMPAIGN_DOES_NOT_CONTAIN = ''
// Especifique el elemento html que identifica los elementos agotados
OUT_OF_STOCK_TEXT = '<span class = "sold_out"> Agotado </span>'
// Especifique el elemento de la URL que identifica las páginas del producto
DETAIL_PAGE_STRING = '/ productos /'
función createLabel (nombre) {
etiquetas var = AdWordsApp.labels (). withCondition ('LabelName =' + name)
if (labels.get (). totalNumEntities () == 0) {
AdWordsApp.createLabel (name.replace ('"', ''). Replace ('"', ''))
volver 0
}
más{
return labels.get (). next (). getId ()
}
}
función de análisis (elemento) {
volver '"' + elemento + '"'
}
función getActiveAds () {
if (CAMPAIGN_CONTAINS &&! CAMPAIGN_DOES_NOT_CONTAIN) {var query = 'Status = ENABLED AND CampaignName CONTAINS' + parse (CAMPAIGN_CONTAINS)}
de lo contrario si (! CAMPAIGN_CONTAINS && CAMPAIGN_DOES_NOT_CONTAIN) {var query = 'Estado = HABILITADO Y Nombre de campaña DOES_NOT_CONTAIN' + análisis (CAMPAIGN_DOES_NOT_CONTAIN)}
de lo contrario, si (CAMPAIGN_CONTAINS && CAMPAIGN_DOES_NOT_CONTAIN) {var query = 'Status = ENABLED AND CampaignName CONTAINS' + parse (CAMPAIGN_CONTAINS) + 'AND CampaignName DOES_NOT_CONTAIN' + parse (CAMPAIGN_DOES_NOT_CONTAIN)}
más si (! CAMPAIGN_CONTAINS &&! CAMPAIGN_DOES_NOT_CONTAIN) {var query = 'Status = ENABLED'}
devuelve AdWordsApp.ads (). withCondition (query) .get ()
}
función getPausedAds (labelName) {
return AdWordsApp.ads (). withCondition ('LabelNames CONTAINS_ANY' + '[' + labelName + ']'). get ()
}
función pauseAds (ads, labelName) {
Logger.log ('Comprobando anuncios habilitados ... Número de anuncios para verificar:' + ads.totalNumEntities ())
while (ads.hasNext ()) {
var ad = ads.next ()
var url = ad.urls (). getFinalUrl ()
var content = UrlFetchApp.fetch (url) .getContentText ()
if (url.search (DETAIL_PAGE_STRING) == -1) {continuar}
var isOutOfStock = content.search (OUT_OF_STOCK_TEXT)
if (isOutOfStock> -1) {
Logger.log (url + '' + 'FUERA DE STOCK')
ad.pause ()
ad.applyLabel (labelName.replace ('"', ''). replace ('"', ''))
}
}
}
función resumeAds (ads, labelName) {
Logger.log ('Comprobando anuncios detenidos ... Número de anuncios para verificar:' + ads.totalNumEntities ())
while (ads.hasNext ()) {
var ad = ads.next ()
var url = ad.urls (). getFinalUrl ()
var content = UrlFetchApp.fetch (url) .getContentText ()
var isOutOfStock = content.search (OUT_OF_STOCK_TEXT)
if (isOutOfStock == -1) {
Logger.log (url + '' + 'BACK IN STOCK')
ad.enable ()
var etiquetas = ad.labels (). withCondition ('LabelName =' + labelName) .get (). next (). remove ()
}
}
}
función main ()
{
var labelName = '"Paused - Agotado"'
var labelId = createLabel (labelName)
anuncios var = getActiveAds ()
pauseAds (anuncios, labelName)
if (labelId! = 0) {
var pausedAds = getPausedAds (labelName)
resumeAds (pausedAds, labelName)
}
}