Haben Sie Probleme mit (organischen) oder (nicht eingestellten) Werten, die für Google Ads-Traffic in Google Analytics 4 angezeigt werden? Sind Sie auf der Suche nach einer schnellen Lösung, ohne auf ein Update von Google zu warten? In diesem Blogartikel stellen wir Ihnen eine von Jan Zdarsa geschriebene Anleitung zur Lösung dieses Problems vor. Das Skript von Jan Zdarsa finden Sie auch auf seinem GitHub.
Leiden Sie unter diesem Problem?
Seit Juni 2024 haben wir, unsere Partneragenturen und weltweit andere Nutzer von Google Analytics 4 ein Problem mit dem Reporting festgestellt. Das Problem liegt in den Kampagnennamen im Akquisitionsbericht. Es zeigt Werte wie (organisch) oder (nicht eingestellt) für Google Ads Traffic in den Kampagnennamen an.
Gehen Sie folgendermaßen vor, um zu prüfen, ob Ihr GA4 von diesem Verhalten betroffen ist:
- Zum Bericht 'Verkehrserfassung' gehen
- Ändern Sie Ihre Dimension von 'Standard-Kanalgruppe' auf 'Sitzungsquelle/Medien'.
- Filter auf alle Besucher von 'google / cpc'
- Sitzungskampagne" als sekundäre Dimension hinzufügen
Sehen Sie (organische) oder (nicht eingestellte) Werte? Wenn ja, sind auch Sie von diesem Problem betroffen. Dieses Verhalten betrifft den meisten eingehenden Verkehr, der von Google Ads empfangen wird. Dies ist ein wichtiges Problem, das Sie nicht ignorieren sollten, wenn Sie Ihre Google Ads-Kampagnen effektiv analysieren möchten.
Wie kann man das lösen?
Manuelles Überschreiben der Ziel-URLs
Wie Sie bereits in einem unserer früheren Blogartikel gelesen haben, ist es sehr wichtig, UTM-Parameter in Ihren Kampagnen zu verwenden, um einen klaren Überblick über Ihren Traffic in GA4 zu erhalten. Der gleiche Ansatz gilt auch für Google Ads. Allerdings lässt sich dieses Problem bei Google Ads nicht nur durch die Verwendung von Standard-UTM-Parametern lösen, da Besucher, die "ad_user_data" im Cookie-Banner ablehnen, oder Besucher, die personalisierte Anzeigen in Googles My Ad Center deaktiviert haben.
Skripte zum Aufheben der UTM-Kennzeichnung
Lassen Sie das Google Ads-Skript, das von Jan Zdarsa geschrieben und zur Verfügung gestellt wurde, die Arbeit für Sie erledigen. Es ist einfach zu verwenden und hilft Ihnen, die URLs Ihrer Kampagnen mit den richtigen UTM-Parametern zu versehen, auch wenn Sie den Namen Ihrer Kampagne ändern. Stellen Sie es so ein, dass es stündlich ausgeführt wird, um sicherzustellen, dass Ihre Ziel-URLs immer aktuell sind. Stellen Sie sicher, dass die automatische Kennzeichnung aktiviert ist. Wenn das System den Kampagnennamen nicht finden kann, verwendet es bei der automatischen Kennzeichnung den UTM-Wert anstelle von (organisch) oder (nicht festgelegt).
Bitte beachten Sie! Google Ads-Skripte unterstützen keine Demand Gen- und Video-Kampagnen.
Skript: UTM-Tagging für einzelne Konten
Hier ist das Skript für einzelne Konten. Überprüfen Sie das GitHub-Konto, um zu sehen, ob das Skript noch aktuell ist.
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);
}
}
}
Skript: UTM-Tagging für Manager-Konto
Bevorzugen Sie die Manager-Version des Skripts, die es Ihnen ermöglicht, dies für mehrere Konten gleichzeitig zu verwalten? Prüfen Sie auf der GitHub-Seite, ob dieses Skript noch aktuell ist.
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());
}
}
}
Wie kann man dieses Skript zu Google Ads hinzufügen?