
PPC AI-agent med automatisering av negative søkeord
Automatiser negative søkeord i Google Ads med FlowHunts PPC AI-agent. Ekskluder irrelevante søk, reduser bortkastet annonsebudsjett og forbedre konverteringer m...
FlowHunt automatiserer håndtering av negative søkeord i Google Ads med AI, og hjelper bedrifter å kutte kostnader, optimalisere annonsebudsjett og forbedre kampanjeresultater uten anstrengelse.
Uønsket søkeordforbruk oppstår når annonsene dine vises i søkeresultater som ikke samsvarer med det du selger. Dette kan raskt tømme budsjettet ditt, ettersom hvert irrelevant klikk koster penger uten å føre til et salg. For eksempel, hvis et firma som selger eksklusive skinnsko retter seg mot brede søkeord som “kjøp sko”, kan de tiltrekke klikk fra personer som er interessert i joggesko eller sandaler, som ikke er det de tilbyr. Denne feiljusteringen i søkeordmålretting kan føre til bortkastede annonsekostnader og lavere ROI. Bedrifter må forstå dette konseptet for å unngå unødvendige økonomiske tap og fokusere budsjettet på de riktige søkeordene.
Negative søkeord er et essensielt verktøy i enhver Google Ads-kampanje. De lar annonsører ekskludere spesifikke søkebegreper fra å utløse annonsene sine, slik at bare relevante søk fører til annonsevisninger. For eksempel kan bruk av negative søkeord som “billig” eller “rabatt” hjelpe skinnskofirmaet å unngå klikk fra personer som ikke er interessert i premiumprodukter. Ved å nøye utarbeide en liste over negative søkeord kan bedrifter optimalisere annonseforbruket, redusere uønskede klikk og øke kampanjens totale effektivitet.
Kunstig intelligens (AI) endrer måten annonsører håndterer Google Ads-kampanjer på. AI-verktøy som FlowHunt er laget for søkeordgruppering, og hjelper bedrifter med å identifisere og organisere relaterte søkeord mer effektivt. Denne automatiseringen forenkler prosessen med å finne både positive og negative søkeord, og reduserer det manuelle arbeidet som kreves for å håndtere kampanjer. AI-drevet søkeordhåndtering gir mulighet for sanntidsendringer basert på resultatdata, noe som sikrer at annonseforbruket kontinuerlig optimaliseres for best mulig ROI.
For å kutte ned på uønsket søkeordforbruk bør bedrifter ta i bruk flere strategier:
PostAffiliatePro hadde utfordringer med sine månedlige annonseutgifter og slet med å få den ROI-en de ønsket fra Google Ads-kampanjene sine. De bestemte seg for å bruke AI for å løse dette problemet. Ved å ta i bruk AI-drevne verktøy automatiserte de søkeordhåndteringen sin og identifiserte både positive og negative søkeord mer nøyaktig. Denne endringen gjorde det mulig for dem å optimalisere annonseforbruket, redusere kostnadene betydelig og forbedre kampanjeeffektiviteten. Deres erfaring fremhever fordelene med å bruke AI-teknologi for å håndtere søkeordforbruk effektivt. Analyser av hvert nytt søkeord kjøres innen en time fra første visning av søkeordet. Hastigheten hjelper til å fange negative søkeord før besøkende kan klikke på Google-annonsen.
For de som ønsker å lære mer om effektiv søkeordhåndtering og AI-optimalisering, vurder å utforske disse ressursene:
Her er vårt skript, som vi kjører hver time for å evaluere søkeordklynger.
Dette skriptet har som mål å automatisere flere oppgaver relatert til håndtering av Google Ads-kampanjer. Det samhandler med Google Sheets for konfigurasjon og innstillinger, og utfører operasjoner på Google Ads-kontoer, som å analysere søketermer, legge til eller ekskludere søkeord, samt integrere med FlowHunt API for avansert AI-søkeordgruppering.
main()
. Denne funksjonen åpner Google-arket angitt av spreadsheetURL
, henter nødvendige konfigurasjonsinnstillinger som apiKey
, country
, language
og andre.minimumMatch
-grense.callFlowHuntApi()
for å samhandle med FlowHunt API for ulike oppgaver, inkludert henting av arbeidsområde-ID og gruppering av søkeord.For å ta i bruk dette skriptet må brukere:
Ikke glem å angi den faktiske lenken til Google-arket ditt. Resten er vår magi. Vi identifiserer søkeord som tilhører kampanjen og automatiserer håndteringen av søkeord (både negative og positive).
//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;
}
Negative søkeord forhindrer at annonsene dine vises for irrelevante søk, reduserer bortkastede kostnader og forbedrer kampanjens ROI ved å fokusere kun på de mest relevante søkeordene.
AI-verktøy som FlowHunt analyserer sanntids søkedata, identifiserer irrelevante søkeord og oppdaterer automatisk kampanjene dine med negative søkeord, noe som sparer tid og øker effektiviteten.
Forvent økt konverteringsrate, reduserte annonsekostnader på irrelevante klikk og mer effektive kampanjer ettersom AI kontinuerlig optimaliserer søkeordlister og målretting.
Du må koble din Google Ads-konto, konfigurere innstillinger i et Google-ark og distribuere det medfølgende skriptet for å aktivere automatisert søkeordhåndtering drevet av FlowHunts AI.
Viktor Zeman er medeier av QualityUnit. Selv etter 20 år som leder av selskapet, er han fortsatt først og fremst en programvareingeniør, med spesialisering innen AI, programmatisk SEO og backend-utvikling. Han har bidratt til en rekke prosjekter, inkludert LiveAgent, PostAffiliatePro, FlowHunt, UrlsLab og mange flere.
Klar til å maksimere din Google Ads ROI? Oppdag hvordan AI-drevet automatisering håndterer dine negative søkeord og optimaliserer annonsebudsjettet.
Automatiser negative søkeord i Google Ads med FlowHunts PPC AI-agent. Ekskluder irrelevante søk, reduser bortkastet annonsebudsjett og forbedre konverteringer m...
Lær hvorfor søkeordsisolering er avgiktig for å optimalisere PPC-annonser. Oppdag hvordan du kan målrette høytytende søkeord, øke ROI, redusere kostnader og for...
FlowHunts GoogleSearch-komponent forbedrer chatbotens nøyaktighet ved å bruke Retrieval-Augmented Generation (RAG) for å få tilgang til oppdatert kunnskap fra G...