
PPC AI Agent med automatisk håndtering af negative søgeord
Automatisér negative søgeord i Google Ads med FlowHunt's PPC AI Agent. Ekskludér irrelevante søgninger, reducer spildt annoncebudget og forbedr konverteringer m...
FlowHunt automatiserer Google Ads negative søgeordshåndtering med AI, så virksomheder kan reducere omkostninger, optimere annonceforbrug og forbedre kampagneresultater uden besvær.
Uønsket forbrug på søgeord opstår, når dine annoncer vises i søgeresultater, der ikke matcher det, du sælger. Dette kan hurtigt tømme dit budget, da hvert irrelevant klik koster penge uden at føre til et salg. For eksempel, hvis en virksomhed, der sælger eksklusive lædersko, målretter brede søgeord som “køb sko”, kan de tiltrække klik fra folk, der er interesseret i sneakers eller sandaler – produkter, de ikke tilbyder. Denne uoverensstemmelse i søgeords-målretning kan føre til spildt annonceforbrug og lavere ROI. Virksomheder skal forstå dette for at undgå unødvendige økonomiske tab og fokusere deres budget på de rette søgeord.
Negative søgeord er et vigtigt værktøj i enhver Google Ads-kampagne. De gør det muligt for annoncører at udelukke specifikke søgetermer fra at udløse deres annoncer, så kun relevante søgninger fører til annoncevisninger. For eksempel kan brug af negative søgeord som “billig” eller “rabat” hjælpe læderskovirksomheden med at undgå klik fra personer, der ikke er interesseret i premium-produkter. Ved nøje at udarbejde en liste over negative søgeord kan virksomheder optimere deres annonceforbrug, reducere uønskede klik og øge kampagnens samlede effektivitet.
Kunstig intelligens (AI) ændrer måden, annoncører håndterer Google Ads-kampagner på. AI-værktøjer som FlowHunt er udviklet til søgeordsgruppering og hjælper virksomheder med at identificere og organisere relaterede søgeord mere effektivt. Denne automatisering gør det lettere at finde både positive og negative søgeord og mindsker det manuelle arbejde med kampagnestyring. AI-drevet søgeordshåndtering muliggør realtidsændringer baseret på performance-data, så annonceforbruget løbende optimeres for bedst mulig ROI.
For at reducere uønsket forbrug på søgeord bør virksomheder følge flere strategier:
PostAffiliatePro stod over for udfordringer med deres månedlige annonceforbrug og havde svært ved at opnå den ønskede ROI fra deres Google Ads-kampagner. De besluttede at bruge AI til at løse dette problem. Ved at inddrage AI-drevne værktøjer automatiserede de deres søgeordshåndtering og identificerede både positive og negative søgeord mere præcist. Denne ændring gjorde det muligt at optimere annonceforbruget, betydeligt reducere omkostninger og øge kampagneeffektiviteten. Deres erfaring fremhæver fordelene ved at bruge AI-teknologi til effektivt at styre forbruget på søgeord. Analyser af hvert nyt søgeord udføres inden for en time fra første visning af søgeordet. Hastigheden hjælper med at fange negative søgeord, før besøgende kan klikke på Google-annonce.
For dig, der vil lære mere om effektiv søgeordshåndtering og AI-optimering, kan du med fordel udforske disse ressourcer:
Her er vores script, som vi kører hver time for at evaluere søgeordsklynger.
Dette script har til formål at automatisere flere opgaver relateret til håndtering af Google Ads-kampagner. Det interagerer med Google Sheets for konfiguration og indstillinger og udfører operationer på Google Ads-konti, såsom analyse af søgetermer, tilføjelse eller udelukkelse af søgeord, samt integration med FlowHunt API’en for avanceret AI-baseret søgeordsklyngedannelse.
main()
. Denne funktion åbner Google Sheets-dokumentet angivet i spreadsheetURL
og henter nødvendige konfigurationsindstillinger som apiKey
, country
, language
m.fl.minimumMatch
-kriterium.callFlowHuntApi()
til at kommunikere med FlowHunt API for bl.a. at hente workspace-id’er og danne søgeordsklynger.For at implementere dette script skal brugeren:
Glem ikke at indsætte det rigtige link til dit Google Sheet-dokument. Resten er vores magi. Vi identificerer søgeord, der tilhører kampagnen, og automatiserer håndteringen af søgeord (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øgeord forhindrer dine annoncer i at blive vist for irrelevante søgninger, hvilket reducerer spildt forbrug og forbedrer kampagnens ROI ved kun at fokusere på de mest relevante forespørgsler.
AI-værktøjer som FlowHunt analyserer realtids søgerdata, identificerer irrelevante søgeord og opdaterer automatisk dine kampagner med negative søgeord, hvilket sparer tid og øger effektiviteten.
Forvent højere konverteringsrater, reduceret annonceforbrug på irrelevante klik og mere effektive kampagner, da AI kontinuerligt optimerer dine søgeordslister og målretning.
Du skal forbinde din Google Ads-konto, konfigurere indstillinger i et Google Sheet og implementere det medfølgende script for at aktivere automatiseret søgeordshåndtering drevet af FlowHunts AI.
Viktor Zeman er medejer af QualityUnit. Selv efter 20 år som leder af virksomheden er han først og fremmest softwareingeniør med speciale i AI, programmatisk SEO og backend-udvikling. Han har bidraget til adskillige projekter, herunder LiveAgent, PostAffiliatePro, FlowHunt, UrlsLab og mange flere.
Klar til at maksimere din Google Ads ROI? Opdag hvordan AI-drevet automatisering håndterer dine negative søgeord og optimerer annonceforbruget.
Automatisér negative søgeord i Google Ads med FlowHunt's PPC AI Agent. Ekskludér irrelevante søgninger, reducer spildt annoncebudget og forbedr konverteringer m...
Lær hvorfor søgeterm-isolering er afgørende for at optimere PPC-annoncer. Opdag hvordan du kan målrette højtydende søgetermer, øge ROI, reducere omkostninger og...
Denne arbejdsgang automatiserer søgeordsforskning ved at generere en detaljeret tabel over relaterede søgeord til din målsætning, inklusive vigtige SEO-målinger...