Automazione delle Parole Chiave Negative di Google Ads con l’AI

FlowHunt automatizza la gestione delle parole chiave negative su Google Ads con l’AI, aiutando le aziende a ridurre i costi, ottimizzare il budget pubblicitario e migliorare i risultati delle campagne in modo semplice.

Automazione delle Parole Chiave Negative di Google Ads con l’AI

Comprendere la Spesa per Parole Chiave Indesiderate

La spesa per parole chiave indesiderate si verifica quando i tuoi annunci compaiono nei risultati di ricerca che non corrispondono a ciò che vendi. Questo può esaurire rapidamente il budget, poiché ogni clic irrilevante costa denaro senza generare vendite. Ad esempio, se un’azienda che vende scarpe in pelle di alta gamma punta su keyword generiche come “comprare scarpe”, potrebbe ricevere clic da persone interessate a sneakers o sandali, prodotti che non offre. Questo disallineamento nel targeting può portare a sprechi pubblicitari e a un ROI più basso. Le aziende devono comprendere questo concetto per evitare perdite finanziarie inutili e concentrare il budget sulle keyword giuste.

Il Ruolo delle Parole Chiave Negative

Le parole chiave negative sono uno strumento essenziale in ogni campagna Google Ads. Permettono agli inserzionisti di escludere termini di ricerca specifici dal far scattare i loro annunci, assicurando che solo le ricerche pertinenti portino alla visualizzazione degli annunci. Ad esempio, usare parole chiave negative come “economico” o “sconto” può aiutare l’azienda di scarpe in pelle a evitare i clic di persone non interessate a prodotti di fascia alta. Definendo accuratamente una lista di parole chiave negative, le aziende possono ottimizzare la spesa pubblicitaria, ridurre i clic indesiderati e migliorare l’efficacia complessiva della campagna.

Utilizzare l’AI per la Gestione delle Parole Chiave

L’Intelligenza Artificiale (AI) sta rivoluzionando la gestione delle campagne Google Ads. Strumenti AI come FlowHunt sono progettati per raggruppare keyword, aiutando le aziende a identificare e organizzare parole chiave correlate in modo più efficace. Questa automazione semplifica il processo di individuazione sia delle keyword positive che negative, riducendo il lavoro manuale nella gestione delle campagne. La gestione delle keyword guidata dall’AI consente modifiche in tempo reale basate sui dati di performance, assicurando che la spesa pubblicitaria sia sempre ottimizzata per il massimo ROI.

Strategie per Ridurre la Spesa su Parole Chiave Indesiderate

Per ridurre la spesa su keyword indesiderate, le aziende dovrebbero adottare diverse strategie:

  • Aggiornare regolarmente la lista delle keyword per allinearsi ai trend di mercato e agli interessi dei consumatori.
  • Implementare una forte strategia di parole chiave negative ricercando e aggiornando costantemente i termini da escludere.
  • Monitorare e ottimizzare le campagne in base ai dati sulle performance.
  • Analizzare quali keyword portano vendite e quali no per perfezionare il targeting e massimizzare la spesa pubblicitaria.

Caso Studio: L’Approccio di PostAffiliatePro

PostAffiliatePro affrontava problemi con la spesa pubblicitaria mensile, faticando a ottenere il ROI desiderato dalle campagne Google Ads. Ha deciso di utilizzare l’AI per risolvere il problema. Integrando strumenti AI, ha automatizzato il processo di gestione delle keyword, identificando con maggiore precisione sia quelle positive che quelle negative. Questo cambiamento ha permesso di ottimizzare la spesa pubblicitaria, ridurre notevolmente i costi e migliorare l’efficienza delle campagne. La loro esperienza evidenzia i vantaggi della tecnologia AI nella gestione efficace della spesa per keyword. Le analisi di ogni nuova parola chiave vengono eseguite entro un’ora dalla prima impression della keyword. Questa rapidità aiuta ad intercettare le parole chiave negative prima che i visitatori possano cliccare sull’annuncio Google.

improved conversion rate Tasso di conversione migliorato (solo le ricerche rilevanti portano più vendite)

Risorse Aggiuntive

Per chi desidera approfondire la gestione efficace delle keyword e l’ottimizzazione tramite AI, consigliamo queste risorse:

Script Google Ads per Valutare Ogni Nuova Parola Chiave

Ecco lo script che eseguiamo ogni ora per valutare i cluster di keyword.

Questo script mira ad automatizzare diversi compiti legati alla gestione delle campagne Google Ads. Interagisce con Google Sheets per la configurazione e le impostazioni, e svolge operazioni sugli account Google Ads come analisi dei termini di ricerca, aggiunta o esclusione di keyword e interfacciamento con l’API FlowHunt per il clustering AI avanzato delle parole chiave.

Google Sheet to manage script settings Foglio Google per la gestione delle impostazioni dello script

Negative keywords automatically applied to Ad groups Parole chiave negative applicate automaticamente ai gruppi di annunci

Funzione Principale

  • La logica di controllo principale è contenuta nella funzione main(). Questa apre il documento Google Sheets specificato da spreadsheetURL, recupera le impostazioni di configurazione come apiKey, country, language e altri parametri.
  • Inizialmente, il sistema cerca di aggiungere eventuali nuove keyword positive al cluster FlowHunt. Se ci riesce, procede ad analizzare eventuali termini di ricerca non assegnati.

Analisi Keyword

  • Analisi delle parole non assegnate: La funzione scorre tutti i gruppi di annunci dell’account Ads contrassegnati da una specifica etichetta. Recupera i termini di ricerca da Google Ads che non sono attualmente mirati e che hanno avuto almeno una impression.
  • Il sistema utilizza l’API di FlowHunt per trovare keyword simili a quella analizzata, filtrandole in base a un parametro minimumMatch specificato.
  • I termini di ricerca che soddisfano i criteri vengono aggiunti come keyword positive, oppure segnati come negative se non raggiungono la soglia minima, aggiornando il Google Sheet e le campagne Google Ads di conseguenza.

Integrazione con FlowHunt

  • Interazione API: Lo script si basa sulla funzione callFlowHuntApi() per interagire con l’API FlowHunt per varie attività, tra cui il recupero degli ID workspace e il clustering delle keyword.
  • Aggiunta delle Keyword al Cluster: Questa funzione invia le keyword positive a FlowHunt per il clustering, così che siano informate dai dati delle query live di Google Ads.
  • Le keyword aggiunte e quelle negative vengono registrate in fogli separati per un monitoraggio continuo e una revisione.

Utilizzo

Per implementare questo script, gli utenti devono:

  • Fornire un URL valido di Google Sheets e assicurarsi che i fogli necessari (“Settings”, “AddedKW”, “NegativeKW”) siano presenti.
  • Configurare il Google Sheet con la chiave API di FlowHunt, i codici paese e le altre impostazioni operative corrette.
  • Assicurarsi che lo script sia eseguito in un ambiente Google Ads Script con i permessi API necessari abilitati.

Add script to your Google Ads in menu Tools -> Bulk Actions -> Scripts Aggiungi lo script al tuo Google Ads dal menu Strumenti -> Azioni collettive -> Script.

Non dimenticare di inserire il link reale al tuo documento Google Sheet. Al resto pensiamo noi. Identifichiamo le keyword che appartengono alla campagna e automatizziamo la gestione delle parole chiave (sia negative che positive).

Script Google Ads per Gestire Automaticamente le Parole Chiave Negative

//Global variables
var spreadsheetURL;
var spreadsheet;
var sheetSettings; 
var sheetAddedKW;
var sheetNegativeKW;
var apiKey;
var labelName;
var country;
var language;
var location;
var urlsCount;
var minimumMatch;
var workspaceId;

function main() {
    // Provide the Google Sheets URL here
  spreadsheetURL = "https://docs.google.com/spreadsheets/d/....... FULL URL TO GOOGLE SHEET";
  spreadsheet = SpreadsheetApp.openByUrl(spreadsheetURL);
  sheetSettings = spreadsheet.getSheetByName("Settings"); 
  sheetAddedKW = spreadsheet.getSheetByName("AddedKW");
  sheetNegativeKW = spreadsheet.getSheetByName("NegativeKW");
  apiKey = getSettingValue("FlowHuntAPIkey")
  labelName = getSettingValue("LabelName")
  country = getSettingValue("CountryCode")
  language = getSettingValue("LanguageCode")
  location = getSettingValue("Location")

  urlsCount = getSettingValue("TopUrlsCount")
  minimumMatch = getSettingValue("MinimumMatch")
  workspaceId = getWorkspaceId()
  
  if (workspaceId.length < 10) {
    Logger.log("Failed to load workspace id from FlowHunt, check API key");
    return;
  }
  
  Logger.log("FlowHunt WorkspaceId: " + workspaceId);
  
  if (addPositiveKWsToCluster() == 0) {
    // Analyze new keywords just if all positive keywords added already
    analyzeNotAssignedWords();
  }
}

function analyzeNotAssignedWords() {
  Logger.log("*** START Checking not assigned keywords");
  
  // Iterate through all ad groups in the account
  var adGroupsIterator = AdsApp.adGroups().get();
  
  while (adGroupsIterator.hasNext()) {
    var adGroup = adGroupsIterator.next();
    var groupName = adGroup.getId() + " - " + adGroup.getName();
    if (hasLabel(adGroup, labelName)) {
      // Get the search terms for the current ad group ordered by clicks in the last X days
      var searchTermsQuery = "SELECT Query FROM SEARCH_QUERY_PERFORMANCE_REPORT " +
        "WHERE AdGroupId = " + adGroup.getId() +
        " AND QueryTargetingStatus = \"NONE\" " +
        "DURING TODAY";

      var searchTermsIterator = AdsApp.report(searchTermsQuery).rows();
      var adGroupKeywords = [];
      while (searchTermsIterator.hasNext()) {
        var searchTerm = searchTermsIterator.next();
        var searchTermText = searchTerm["Query"].trim();
        var similarQueries = getSimilarQueries(groupName, searchTermText)
        var filteredSimilarQueries = getFilteredSimilarQueries(similarQueries);
        if (filteredSimilarQueries.length > 0) {
          var keywordOperation = adGroup.newKeywordBuilder().withText("[" + searchTermText + "]").build();
          if (keywordOperation.isSuccessful()) {
            adGroupKeywords.push(searchTermText);
            var rowData = [groupName, searchTermText, new Date(), "ADDING AS POSITIVE, REVIEW!", JSON.stringify(filteredSimilarQueries)];
            sheetAddedKW.appendRow(rowData);
          } else {
            Logger.log("Failed to add keyword as positive:" + searchTermText)
          }
        } else {
          // add to negative
           adGroup.createNegativeKeyword("[" + searchTermText + "]");
          Logger.log("Excluded search term in ad group '" + groupName + "': " + searchTermText);
          var rowData = [groupName, "[" + searchTermText + "]", new Date(), JSON.stringify(similarQueries)];
          sheetNegativeKW.appendRow(rowData);
        }
      }
      if (adGroupKeywords.length > 0) {
        //Add all keywords in the list to FlowHunt Cluster
        addKeywordsToFlowHunt(groupName, adGroupKeywords);
      }
    }
  }
  Logger.log("*** FINISHED Checking not assigned keywords");
}

function getSimilarQueries(groupName, query) {
  result = callFlowHuntApi("/serp/serp/cluster/query_intersections?workspace_id="+workspaceId, "POST", {
    "query": query,
    "country": country,
    "language": language,
    "location": location,
    "group_name": groupName,
    "live_mode": true,
    "max_position": urlsCount
  });
  Logger.log(result)
  if (result.status=="SUCCESS") {
    return JSON.parse(result.result);
  }
  return []
}

function getFilteredSimilarQueries(similarQueries) {
  filtered = [];
  for (var i=1; i<similarQueries.length; i++){
    if (similarQueries[i].count>=minimumMatch) {
      filtered.push(similarQueries[i]);
    }
  }
  return filtered;
}

function addPositiveKWsToCluster() {
  Logger.log("*** START Checking new campaign keywords");
  // Iterate through all ad groups in the account
  var adGroupsIterator = AdsApp.adGroups().get();
  var processedKWs = sheetAddedKW.getDataRange().getValues();
  var processedKWsMap = {};
  var rowsAdded = 0;
  
  for (var i = 1; i < processedKWs.length; i++) { // Start at 1 to skip header row if exists
    var groupName = processedKWs[i][0];
    var keyword = processedKWs[i][1];
    processedKWsMap[groupName + '|' + keyword] = true;
  }
  
  while (adGroupsIterator.hasNext()) {
    var adGroup = adGroupsIterator.next();
    var groupName = adGroup.getId() + " - " + adGroup.getName();
    if (hasLabel(adGroup, labelName)) {
      var keywordsIterator = adGroup.keywords().get();
      var adGroupKeywords = [];
      while (keywordsIterator.hasNext()) {
        var keyword = keywordsIterator.next();
        if (keyword.isEnabled()) {
          var key = groupName + '|' + keyword.getText();
          if (!processedKWsMap[key]) {
            adGroupKeywords.push(keyword.getText());
            var rowData = [groupName, keyword.getText(), new Date(), "Already present in campaign"];
            sheetAddedKW.appendRow(rowData);
            processedKWsMap[key] = true; 
          }
        }
      }
      if (adGroupKeywords.length > 0) {
        //Add all keywords in the list to FlowHunt Cluster
        addKeywordsToFlowHunt(groupName, adGroupKeywords);
      } else {
        Logger.log("No new keywords in Group: " + groupName);
      }
      rowsAdded = rowsAdded + adGroupKeywords.length
    }
  }
  Logger.log("*** FINISHED Checking new campaign keywords");
  return rowsAdded;
}

function addKeywordsToFlowHunt(GroupName, adGroupKeywords) {
  requests = []
  adGroupKeywords.forEach(function(keyword) {
    requests.push(
        {
          "query": keyword,
          "country": country,
          "language": language,
          "location": location,
          "group_name": GroupName,
          "count_urls": 30
        }
      );
    });
  callFlowHuntApi("/serp/serp/cluster/add_queries?workspace_id="+workspaceId, "POST", {"requests":requests});
}

function getSettingValue(settingName) {
    var data = sheetSettings.getDataRange().getValues();
    for (var i = 0; i < data.length; i++) {
        if (data[i][0] === settingName) {
            return data[i][1];
        }
    }
    return null;
}
  
function getWorkspaceId() {
  result = callFlowHuntApi("/auth/me", "GET")
  if (result !== null) {
    return result.api_key_workspace_id;
  }
}

function callFlowHuntApi(endpoint, method, requestBody) {
    var url = "https://api.flowhunt.io/v2" + endpoint;
    var headers = {
        "Api-Key": apiKey,
        "Content-Type": "application/json"
    };
    var options = {
        "method" : method,  // or "post", "put", etc.
        "headers" : headers,
        "payload": JSON.stringify(requestBody)
    };
    
    try {
        var response = UrlFetchApp.fetch(url, options);
        var responseData = JSON.parse(response.getContentText());
        Logger.log(responseData);
        return responseData;
    } catch (e) {
        Logger.log("An error occurred: " + e.message);
    }
    return null;
}

function hasLabel(adGroup, labelName) {
  var labels = adGroup.labels().get();
  while (labels.hasNext()) {
    var label = labels.next();
    if (label.getName() === labelName) {
      Logger.log("Processing Adgroup " + adGroup.getName());
      return true;
    }
  }
  return false;
}

Domande frequenti

Perché le parole chiave negative sono importanti in Google Ads?

Le parole chiave negative impediscono che i tuoi annunci vengano mostrati per ricerche irrilevanti, riducendo gli sprechi di budget e migliorando il ROI delle campagne grazie al focus sulle query più pertinenti.

Come automatizza l’AI la gestione delle parole chiave negative?

Strumenti AI come FlowHunt analizzano i dati di ricerca in tempo reale, individuano keyword irrilevanti e aggiornano automaticamente le tue campagne con parole chiave negative, facendo risparmiare tempo e aumentando l’efficienza.

Quali risultati posso aspettarmi dall’automazione delle parole chiave negative con l’AI?

Aspettati un aumento dei tassi di conversione, una riduzione della spesa pubblicitaria su clic irrilevanti e campagne più efficienti, perché l’AI ottimizza continuamente le tue liste di keyword e il targeting.

Come configuro l’automazione di FlowHunt per i miei Google Ads?

Dovrai collegare il tuo account Google Ads, configurare le impostazioni in un foglio Google Sheet e implementare lo script fornito per abilitare la gestione automatica delle keyword tramite l’AI di FlowHunt.

Viktor Zeman è co-proprietario di QualityUnit. Anche dopo 20 anni alla guida dell'azienda, rimane principalmente un ingegnere del software, specializzato in IA, SEO programmatica e sviluppo backend. Ha contribuito a numerosi progetti, tra cui LiveAgent, PostAffiliatePro, FlowHunt, UrlsLab e molti altri.

Viktor Zeman
Viktor Zeman
CEO, Ingegnere IA

Automatizza Google Ads con l’AI

Pronto a massimizzare il ROI delle tue campagne Google Ads? Scopri come l’automazione AI gestisce le tue parole chiave negative e ottimizza la spesa pubblicitaria.

Scopri di più