(no establecido) y (orgánico) a medida que se resuelven los nombres de las campañas de Google Ads en GA4

Tobias Pennings
29 de septiembre de 2024

¿Tienes problemas con los valores (orgánicos) o (no definidos) que se muestran para el tráfico de Google Ads en Google Analytics 4? ¿Buscas una solución rápida sin esperar una actualización de Google? En esta entrada de blog, compartimos una guía para resolver este problema, escrita por Jan Zdarsa . Para encontrar el script de Jan Zdarsa, consulta también su GitHub .

¿Estas experimentando este problema?

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

Para comprobar su GA4 y ver si este comportamiento le está afectando, siga estos pasos:

  1. Ir al informe 'Adquisición de tráfico'
  2. Cambie su dimensión de 'Grupo de canales predeterminado' a 'Fuente/Medio de la sesión'
  3. Filtrar todos los visitantes de 'google/cpc'
  4. Añadir 'Campaña de sesión' como dimensión secundaria

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

¿Cómo se resuelve esto?

Sobrescribir manualmente las URL de destino

Como habrá leído en uno de nuestros artículos anteriores del blog, es fundamental usar parámetros UTM en sus campañas para obtener una visión general clara de su tráfico en GA4. El mismo enfoque se aplica a Google Ads. Sin embargo, este problema de Google Ads no se soluciona solo con el uso de parámetros UTM estándar, debido a que los visitantes rechazan "ad_user_data" en el banner de cookies o 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 etiquetar las URL de tu campaña con los parámetros UTM correctos, incluso si cambias el nombre. Configúralo para que se ejecute cada hora y asegúrate de que tus URL de destino estén siempre actualizadas. Asegúrate de que el etiquetado automático esté habilitado. Si el sistema no encuentra el nombre de la campaña, usará el valor UTM en lugar de "orgánico" o "no configurado" para el etiquetado automático.

¡Atención! Los scripts de Google Ads no son compatibles con las campañas de generación de demanda ni de vídeo .

Guión: Etiquetado UTM para cuentas individuales

Aquí está el script para cuentas individuales. Consulta la cuenta de GitHub para ver si está 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");
 
 // Optioneel: Video campagnes
 // 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 existingTrackingTemplate = campaign.urls().getTrackingTemplate();
     
     // Controleer of de nieuwe parameters al bestaan
     var newParams = "utm_source=google&utm_medium=cpc&utm_campaign={_campaign}&utm_id=" + campaign.getId();
     
     if (!existingTrackingTemplate || !existingTrackingTemplate.includes(newParams)) {
       var newTrackingTemplate = existingTrackingTemplate
         ? existingTrackingTemplate + (existingTrackingTemplate.includes('?') ? '&' : '?') + newParams
         : "{lpurl}?"+newParams;
       
       campaign.urls().setTrackingTemplate(newTrackingTemplate);
       
       Logger.log("Tracking template updated for campaign " + campaign.getName());
     } else {
       Logger.log("Tracking template already contains required parameters for campaign " + campaign.getName());
     }
     
     // Stel aangepaste parameters in
     campaign.urls().setCustomParameters({campaign: encodeURIComponent(campaign.getName())});
   } catch (e) {
     Logger.log("Error processing campaign " + campaign.getId() + " in " + campaignType + ": " + e.message);
   }
 }
}

Script: Etiquetado UTM para la cuenta del administrador

¿Prefieres la versión de administrador del script, que te permite administrar varias cuentas a la vez? Consulta la página de GitHub para ver 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 agregar este script a Google Ads?