Resolver (no establecido) & (orgánico) como nombres de campaña de Google Ads en GA4

Tobias Pennings
29 de septiembre de 2024

¿Tienes problemas con los valores (orgánico) o (no establecido) mostrados para el tráfico de Google Ads en Google Analytics 4? ¿Buscas una solución rápida sin esperar a una actualización de Google? En este artículo del blog, compartimos una guía para solucionar este problema, escrita por Jan Zdarsa. Para encontrar el script de Jan Zdarsa, consulta también su GitHub.

¿Sufres este problema?

Desde junio de 2024, nosotros, nuestras agencias colaboradoras y otros usuarios de Google Analytics 4 de todo el mundo hemos detectado un problema con los informes. El problema tiene lugar en el nombre de la campaña en el Informe de Adquisición. Muestra valores como (orgánico) o (no establecido) para el tráfico de Google Ads en los nombres de campaña.

Para comprobar si este comportamiento afecta a tu GA4, sigue estos pasos:

  1. Ir al informe "Adquisición de tráfico
  2. Cambia tu dimensión de "Grupo de canales por defecto" a "Fuente/Medios de la sesión".
  3. Filtrar todos los visitantes de 'google / cpc'
  4. Añade "Campaña de sesión" como dimensión secundaria

¿Ves valores (orgánicos) o (no fijados)? Si es así, este problema también te afecta. Este comportamiento afecta a la mayoría del tráfico entrante recibido de Google Ads. Se trata de un problema importante que no debes ignorar si quieres analizar eficazmente tus campañas de Google Ads.

¿Cómo lo solucionas?

Sobrescribir manualmente las URL de destino

Como también has leído en uno de nuestros artículos anteriores del blog, es muy importante utilizar parámetros UTM en tus campañas para crear una visión clara de tu tráfico en GA4. El mismo enfoque se aplica también a Google Ads. Sólo que este problema de Google Ads no se resuelve únicamente utilizando parámetros UTM estándar, debido a los visitantes que rechazan "ad_user_data" en el banner de cookies o a los visitantes que han desactivado los anuncios personalizados en Mi Centro de Anuncios de Google.

Scripts para anular el Etiquetado UTM

Deja que el script de Google Ads, escrito y compartido por Jan Zdarsa, haga el trabajo por ti. Es fácil de usar y te ayuda a proporcionar a las URL de tus campañas los parámetros UTM correctos, incluso si cambias el nombre de tu campaña. Configúralo para que se ejecute cada hora para asegurarte de que tus URL de destino están siempre actualizadas. Asegúrate de que el etiquetado automático está activado. Si el sistema no puede encontrar el nombre de la campaña, utilizará el valor UTM en lugar de (orgánico) o (no configurado) en el etiquetado automático.

¡Atención! Los scripts de Google Ads no son compatibles con las campañas Demand Gen y Video.

Guión: Etiquetado UTM para cuentas individuales

Aquí tienes el script para cuentas individuales. Consulta la cuenta de GitHub para comprobar si este script sigue actualizado.

function main() {
 Logger.log("Processing account: " + AdsApp.currentAccount().getCustomerId());
 // Process each campaign type with error handling
 tryHandleCampaigns(AdsApp.campaigns(), "Standard & Others");
 tryHandleCampaigns(AdsApp.shoppingCampaigns(), "Shopping");
 tryHandleCampaigns(AdsApp.performanceMaxCampaigns(), "Performance Max");
 // tryHandleCampaigns(AdsApp.videoCampaigns(), "Video");
 Logger.log("Processing completed for account: " + AdsApp.currentAccount().getCustomerId());
}

function tryHandleCampaigns(campaignIteratorFunction, campaignType) {
 try {
   handleCampaigns(campaignIteratorFunction, campaignType);
 } catch (e) {
   Logger.log("Error processing " + campaignType + " campaigns: " + e.message);
 }
}

function handleCampaigns(campaignIteratorFunction, campaignType) {
 var campaignIterator = campaignIteratorFunction
                           .withCondition('Status != REMOVED')
                           .get();
 while (campaignIterator.hasNext()) {
   var campaign = campaignIterator.next();
   try {
     var trackingTemplate = "{lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={_campaign}&utm_id=" + campaign.getId();
     campaign.urls().setTrackingTemplate(trackingTemplate);
     // Set custom parameters or perform other universal actions here
     campaign.urls().setCustomParameters({campaign: encodeURIComponent(campaign.getName())});
   } catch (e) {
     Logger.log("Error processing campaign " + campaign.getId() + " in " + campaignType + ": " + e.message);
   }
 }
}

Guión: Etiquetado UTM para cuenta de administrador

¿Prefieres la versión manager del script que te permite gestionar esto para varias cuentas simultáneamente? Consulta la página de GitHub para comprobar si este script sigue actualizado.

function main() {
 const accountSelector = AdsManagerApp.accounts().withLimit(50); // Adjust the limit as needed
 accountSelector.executeInParallel('processAccount', 'allFinished');
}

function processAccount() {
 var account = AdsApp.currentAccount();
 Logger.log("Processing account: " + account.getCustomerId());
 // Process each campaign type with error handling
 tryHandleCampaigns(AdsApp.campaigns(), "Standard & Others");
 tryHandleCampaigns(AdsApp.shoppingCampaigns(), "Shopping");
 tryHandleCampaigns(AdsApp.performanceMaxCampaigns(), "Performance Max");
 // tryHandleCampaigns(AdsApp.videoCampaigns(), "Video");
 // Return a result that you can use later in allFinished (optional)
 return account.getCustomerId();
}

function tryHandleCampaigns(campaignIteratorFunction, campaignType) {
 try {
   handleCampaigns(campaignIteratorFunction, campaignType);
 } catch (e) {
   Logger.log("Error processing " + campaignType + " campaigns: " + e.message);
 }
}

function handleCampaigns(campaignIteratorFunction, campaignType) {
 var campaignIterator = campaignIteratorFunction
                           .withCondition('Status != REMOVED')
                           .get();
 while (campaignIterator.hasNext()) {
   var campaign = campaignIterator.next();
   try {
     var trackingTemplate = "{lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={_campaign}&utm_id=" + campaign.getId();
     campaign.urls().setTrackingTemplate(trackingTemplate);
     // Set custom parameters or perform other universal actions here
     campaign.urls().setCustomParameters({campaign: encodeURIComponent(campaign.getName())});
   } catch (e) {
     Logger.log("Error processing campaign " + campaign.getId() + " in " + campaignType + ": " + e.message);
   }
 }
}

// This function is optional but allows you to handle any results after all accounts are processed
function allFinished(results) {
 for (var i = 0; i < results.length; i++) {
   var result = results[i];
   if (result.getStatus() === 'OK') {
     Logger.log("Successfully processed account: " + result.getCustomerId());
   } else {
     Logger.log("Failed to process account: " + result.getCustomerId() + " with error: " + result.getError());
   }
 }
}

¿Cómo se añade este script a Google Ads?