· Aggiornato il · 9 min di lettura

Script Google Ads per la pulizia automatica dei termini di ricerca (due versioni)

Uno script che mette in negativo tutte le ricerche che non contengono le parole decise da te, in due versioni: con l'elenco delle parole da salvare scritto dentro il codice, oppure caricato su un foglio Google quando le parole sono centinaia.

Script Google Ads per la pulizia automatica dei termini di ricerca (due versioni)

A cosa serve questo script?

Una delle attività che ritengo sempre utile in un account Google Ads è quella di analizzare i termini di ricerca e, soprattutto, di mettere in negativo quelle ricerche che non sono in target.

Non a caso l'analisi dei termini di ricerca è uno dei controlli fissi quando faccio un’analisi sistematica dell’account.

Se ci pensa già l'algoritmo, quando serve?

Va precisato che, grazie al broad match e alla corrispondenza generica, questa attività viene svolta in modo abbastanza buono dall’algoritmo. Tuttavia, in alcuni account o per talune campagne l’algoritmo non è sufficiente.

Se poi decidiamo di lavorare sulle campagne di brand protection con CPC manuale, perdiamo tale funzionalità e dobbiamo lavorare manualmente per escludere tutti quei termini che non sono del brand.

Il buon Floris de Schrijver, grande esperto e “spacciatore” di diversi script utilissimi (qui trovate la sua libreria, sia gratuita che premium), ne ha rilasciato anche uno in grado di escludere tutto ciò che NON contiene una determinata parola/frase.

Lo script funziona bene, ma purtroppo ha il limite di una sola parola/frase. Così, ho deciso di armarmi di pazienza e di chiedere aiuto al mio amico ChatGPT. Dopo parecchi tentativi, ci sono riuscito.

Lo script è ideale per pulire le campagne di brand o quelle shopping che vogliamo far lavorare solo su specifiche chiavi di ricerca. Anche se per queste ultime preferisco usare le campagne con i diversi livelli di priorità.

Quale delle due versioni ti serve?

Nel tempo ho pubblicato lo script in due momenti diversi, e in questa pagina trovi entrambe le varianti. Fanno esattamente la stessa cosa: escludono tutte le query che NON contengono almeno una delle parole che hai deciso di salvare. Cambia solo dove tieni quell’elenco di parole.

Nella prima versione l’elenco sta dentro il codice, in una variabile. È la scelta giusta quando le parole da salvare sono poche e stabili: il brand, qualche variante di scrittura, due o tre nomi di modello. Incolli lo script, scrivi le parole tra apici separate da virgole e hai finito.

La seconda versione, quella che all’epoca avevo chiamato v3, legge invece l’elenco da un foglio Google. Ci sono arrivato per necessità. Avevo l’esigenza di ripulire rapidamente una campagna Shopping con un elenco di oltre 200 parole da NON escludere: gestire oltre 200 parole separate da virgole e apici non è semplicissimo e, soprattutto, lo script non girava. Avevo superato il limite. Ho quindi interpellato nuovamente GPT e ora la lista si carica in un foglio Google separato, senza limiti di parole.

In breve, la regola che uso io:

  • Poche parole, che non cambiano mai → prima versione, elenco dentro il codice.
  • Molte parole, o parole che cambiano spesso → versione con il foglio Google. Il vantaggio in più è che per aggiornare l’elenco non devi riaprire il codice dello script: apri il foglio, aggiungi una riga e basta. Cosa che, volendo, può fare anche il cliente.

Un’ultima differenza da tenere a mente: la versione con foglio Google non è case-sensitive, quindi non fa distinzione tra maiuscole e minuscole.

Cosa bisogna configurare prima di lanciarlo?

Ma torniamo allo script. Nella prima versione basta inserire i seguenti dati:

  • Le parole che devono contenere le query da NON escludere;
  • Il minimo numero di impression che una query deve avere in una settimana per essere esclusa;
  • Il numero minimo di clic che una query deve avere in una settimana per essere esclusa;
  • Il nome della lista di keyword negative da escludere, che deve essere già creata, altrimenti lo script darà errore;
  • Il nome della campagna su cui deve girare.

Nella versione con foglio Google i dati da compilare sono gli stessi, con una sola differenza: al posto dell’elenco delle parole indichi l’URL del foglio e il nome della scheda. Li trovi elencati più sotto, insieme al codice. Tieni presente che lì i valori di partenza che trovi scritti nel codice sono più alti: 10 impression e 1 clic.

Ogni quanto va fatto girare?

Una volta a settimana. Entrambe le versioni valutano i termini di ricerca dei 7 giorni precedenti, quindi una pianificazione settimanale è la cadenza naturale: farlo girare più spesso significherebbe rivalutare in buona parte gli stessi dati.

Quali limiti bisogna conoscere prima di usarlo?

Alcune considerazioni aggiuntive:

Non impostare un numero di impression troppo basso. 5 in una settimana significa meno di un’impression al giorno. Secondo me, meno sarebbe troppo.

Le liste di keyword negative possono contenere fino a 5000 parole. In caso di campagne che girano con keyword generiche e che generano un alto numero di impression, la lista negativa raggiungerà velocemente le 5.000 parole e lo script non funzionerà più. Se la campagna genera molte impression, ti consiglio quindi di alzare le soglie minime di clic e impression.

Può essere usato sia in campagne di rete di ricerca che su campagne shopping standard. Ovviamente, non funziona sulle PMax.

Versione 1: l’elenco delle parole dentro il codice

Questa è la versione da cui sono partito, quella che estende lo script originale di Floris de Schrijver per accettare più parole invece di una sola. L’elenco si scrive nella variabile exclusions, con ogni parola o frase tra apici singoli e separata da una virgola.

/* 
	GIUSEPPE SCOLLO AUTOMATIC EXCLUSION OF QUERIES - Credit to Floris de Schrijver - https://library.flowboost.co/
	The script was originally created by Floris, but it worked with only a single query. I've updated it, and now it works with all the variants you want.
	The scripts exclude queries that match the conditions below in the last 7 days. Therefore, you can run them every week.

	Instructions for modification:

	Var exclusions = insert the queries you don't want to be excluded. Use commas to separate the individual queries and write each query in single quotes.
	Var impressions = insert the minimum number of impressions required for a query to be excluded.
	Var clicks = insert the minimum number of clicks required for a query to be excluded.
	Var listName = insert the name of the negative keyword list you have already created.
	Var campaignName = insert the name of the campaign that the script should work with.
  */  
  
var exclusions = ['query1', 'word1 word2', 'the query 3', 'another query' ];
var impressions = 5; // threshold on impressions
var clicks = 0; // threshold on clicks
var listName = "NO BRAND"; // name negative keyword list
var campaignName = "Campaign Brand Protection"; // name of the campaign

function main() {
  var searchQueryReport = AdWordsApp.report(
    'SELECT Query, Clicks, Impressions, Cost ' +
    'FROM SEARCH_QUERY_PERFORMANCE_REPORT ' +
    'WHERE CampaignName = "' + campaignName + '" AND Clicks >= ' + clicks + ' AND Impressions >= ' + impressions +
    ' DURING LAST_7_DAYS');

  var negativeKeywordList = AdWordsApp.negativeKeywordLists().withCondition('Name = "' + listName + '"').get().next();

  var rows = searchQueryReport.rows();
  while (rows.hasNext()) {
    var row = rows.next();
    var query = row.Query;
    if (!shouldExcludeQuery(query, exclusions)) {
      negativeKeywordList.addNegativeKeyword("[" + query + "]");
    }
  }
}

function shouldExcludeQuery(query, exclusions) {
  for (var i = 0; i < exclusions.length; i++) {
    if (query.indexOf(exclusions[i]) !== -1) {
      return true;
    }
  }
  return false;
}

Versione 2: l’elenco su un foglio Google

Questa è la versione da usare quando le parole da salvare sono tante o le devi aggiornare di frequente.

Prima di incollare il codice, prepara il foglio: crea un nuovo foglio Google e scrivi in colonna A, una parola per riga, le parole da NON escludere. Poi copia l’URL del foglio e annota il nome della scheda (Foglio1, Sheet1 o come l’hai rinominata).

Nello script vanno poi compilate queste variabili:

  • exclusionsSpreadsheetUrl: l’URL del foglio Google;
  • exclusionsSheetName: il nome della scheda del foglio;
  • impressions e clicks: le soglie minime per analizzare le query;
  • listName: il nome della lista di keyword negative, che deve già esistere;
  • campaignName: il nome della campagna da monitorare.
/* 
	GIUSEPPE SCOLLO AUTOMATIC EXCLUSION FROM QUERY BRAND v3 + GOOGLE SHEET
	copyright by giuseppescollo.it
	CREDIT TO - Floris de Schrijver - for the original script i modified

	Instructions
	1.Create the Google Spreadsheet
	Create a new Google Spreadsheet and enter the exclusion keywords in column A, one per row.
	Name the sheet (e.g., Sheet1) and copy the Spreadsheet URL for script configuration.
	
	2.Script in Google Ads.
	Configure the following variables:
	- exclusionsSpreadsheetUrl: insert the Google Spreadsheet URL.
	- exclusionsSheetName: specify the sheet name (e.g., Sheet1).
	- impressions and clicks: set minimum thresholds for analyzing queries.
	- listName: enter the name of the negative keyword list.
	- campaignName: specify the name of the campaign to monitor.
*/ 

var exclusionsSpreadsheetUrl = 'SPREADSHEET URL'; // insert the Google Spreadsheet URL
var exclusionsSheetName = 'Foglio1'; // specify the sheet name (e.g., Sheet1 or Foglio1)
var impressions = 10; // set minimum thresholds impression for analyzing queries 
var clicks = 1; // set minimum thresholds clic impression for analyzing queries 
var listName = "NO BRAND"; // name of the negative keyword list
var campaignName = "CAMPAIGN NAME"; //  name of the campaign to monitor
function main() {
  var exclusions = loadExclusionsFromSpreadsheet(); // Carica esclusioni da Google Spreadsheet
  
  var searchQueryReport = AdWordsApp.report(
    'SELECT Query, Clicks, Impressions, Cost ' +
    'FROM SEARCH_QUERY_PERFORMANCE_REPORT ' +
    'WHERE CampaignName = "' + campaignName + '" AND Clicks >= ' + clicks + ' AND Impressions >= ' + impressions +
    ' DURING LAST_7_DAYS'
  );

  var negativeKeywordList = AdWordsApp.negativeKeywordLists()
    .withCondition('Name = "' + listName + '"')
    .get()
    .next();

  var rows = searchQueryReport.rows();
  while (rows.hasNext()) {
    var row = rows.next();
    var query = row.Query;
    if (!shouldExcludeQuery(query, exclusions)) {
      negativeKeywordList.addNegativeKeyword("[" + query + "]");
    }
  }
}

function loadExclusionsFromSpreadsheet() {
  var spreadsheet = SpreadsheetApp.openByUrl(exclusionsSpreadsheetUrl);
  var sheet = spreadsheet.getSheetByName(exclusionsSheetName);
  var data = sheet.getRange('A:A').getValues(); // Supponendo che le parole siano nella colonna A
  var exclusions = data.map(function(row) { return row[0]; }).filter(String); // Rimuove eventuali righe vuote
  return exclusions;
}

function shouldExcludeQuery(query, exclusions) {
  var lowerCaseQuery = query.toLowerCase(); // Converti la query in minuscolo
  for (var i = 0; i < exclusions.length; i++) {
    if (lowerCaseQuery.indexOf(exclusions[i].toLowerCase()) !== -1) { // Confronto case-insensitive
      return true;
    }
  }
  return false;
}

Gli altri script che ho scritto per Google Ads li trovi raccolti qui.

Buona esclusione!

Domande frequenti

A cosa serve questo script per Google Ads?

A mettere in negativo automaticamente tutte le ricerche che non contengono le parole che decidi tu. È pensato per le campagne di brand protection e per le Shopping che devono lavorare solo su chiavi specifiche.

Quale delle due versioni dello script conviene usare?

Se le parole da salvare sono poche e stabili, quella con l'elenco scritto dentro il codice, che si compila in un minuto. Se sono molte o cambiano spesso, quella che legge l'elenco da un foglio Google: l'ho scritta proprio perché con oltre 200 parole dentro il codice lo script non girava più.

Come si prepara il foglio Google per lo script di esclusione query?

Crei un nuovo foglio Google, scrivi le parole da non escludere in colonna A, una per riga, poi copi l'URL del foglio e il nome della scheda nelle variabili exclusionsSpreadsheetUrl ed exclusionsSheetName.

Funziona sulle campagne Performance Max?

No. Va bene su rete di ricerca e su Shopping standard.

Quante parole può contenere la lista di keyword negative?

Fino a 5.000. Su campagne con keyword generiche e molte impression il tetto si raggiunge in fretta, e da lì lo script smette di funzionare: conviene alzare le soglie minime di clic e impression.

Che soglia di impression conviene impostare?

Non troppo bassa: cinque impression in una settimana vogliono dire meno di una al giorno, e sotto quella soglia il dato non è significativo.

Serve saper programmare per usarlo?

No: si incolla nell'account e si compilano le variabili in cima. Lo script nasce da uno di Floris de Schrijver, esteso con l'aiuto di ChatGPT per accettare più parole invece di una sola.

← Torna al blog