(not set) & (organic) als Google Ads campagnenamen in GA4 oplossen

Tobias Pennings
September 29, 2024

Heb je problemen met (organic) of (not set) waarden die worden weergegeven voor Google Ads verkeer in Google Analytics 4? Ben je op zoek naar een snelle oplossing zonder te wachten op een update van Google? In dit blogartikel delen wij een handleiding om dit probleem op te lossen, geschreven door Jan Zdarsa. Om het script van Jan Zdarsa te vinden, verwijzen je ook graag naar zijn GitHub.

Heb jij last van dit probleem?

Sinds juni 2024 merkten wij, onze partner agencies en wereldwijd andere gebruikers van Google Analytics 4 een probleem op met de rapportage. Het probleem vindt plaats in de campagnenaam in het Acquisitierapport. Het toont waarden zoals (organic) of (not set) voor Google Ads verkeer in de campagnenamen.

Om je GA4 te controleren om te zien of dit gedrag van invloed is op jou, volg je deze stappen:

  1. Ga naar het 'Verkeersacquisitie' rapport
  2. Wijzig je dimensie van 'Standaard Kanaalgroep' naar 'Sessiebron/-medium'
  3. Filter op alle bezoekers vanuit 'google / cpc'
  4. Voeg 'Sessiecampagne' toe als secundaire dimensie

Zie je (organic) of (not set) waarden? Zo ja, dan heeft dit probleem ook betrekking op jou. Dit gedrag is van invloed op het meeste inkomende verkeer dat wordt ontvangen van Google Ads. Dit is een belangrijk probleem dat je niet mag negeren als je je Google Ads-campagnes effectief wilt analyseren.

Hoe los je dit op?

Overschrijf de bestemmings URL's handmatig

Zoals je in een van onze vorige blog-artikelen ook al gelezen hebt, is het van groot belang om UTM-parameters in je campagnes te gebruiken om een duidelijk overzicht van je verkeer in GA4 te creëren. Diezelfde aanpak geldt ook voor Google Ads. Alleen wordt dit probleem van Google Ads niet alleen opgelost door standaard UTM-parameters te gebruiken vanwege bezoekers die 'ad_user_data' in de cookiebanner weigeren of bezoekers die gepersonaliseerde ads in Google's My Ad Center uitgeschakeld hebben.

Scripts om UTM Tagging te overschrijven

Laat het Google Ads script, geschreven en gedeeld door Jan Zdarsa, het werk voor je doen. Het is eenvoudig te gebruiken en helpt je om de URL's van je campagnes van de juiste UTM-parameters te voorzien, zelfs als je de naam van je campagne verandert. Stel het in om elk uur te draaien om ervoor te zorgen dat je bestemming-URL's altijd up-to-date zijn. Zorg ervoor dat automatisch taggen is ingeschakeld. Als het systeem de campagnenaam niet kan vinden, gebruikt het de UTM-waarde in plaats van (organic) of (not set) bij automatisch taggen.

Let op! Google Ads scripts ondersteunen geen Demand Gen en Video campagnes.

Script: UTM-tagging voor individuele accounts

Hier is het script voor individuele accounts. Bekijk het GitHub-account om te checken of dit script nog up-to-date is.

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);
   }
 }
}

Script: UTM-tagging voor managersaccount

Heb je liever de managers-versie van het script waarmee je dit voor meerdere accounts tegelijkertijd kan beheren? Bekijk de GitHub-pagina om te checken of dit script nog up-to-date is.

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());
   }
 }
}

Hoe voeg je dit script toe aan Google Ads?