← TilbageBestil gratis audit →
N-gram Script til Google Ads
Identificér mønstre i dine søgetermer – find nye negativer og muligheder.
Hvad er N-gram analyse?
En N-gram analyse opdeler søgetermer i kombinationer af 1, 2 eller 3 ord (unigrams, bigrams, trigrams) og viser, hvilke kombinationer der driver trafik – og hvilke der koster penge uden konverteringer. Det er en af de mest effektive måder at rydde op i dit søgetermrapport og finde nye negative søgeord.
Konfiguration
MIN_IMPRESSIONS
Min. visninger (standard: 10)MIN_COST
Min. forbrug (standard: 5)DATE_RANGE
Periode (standard: LAST_30_DAYS)MAX_NGRAM_SIZE
1-3 ord kombinationer (standard: 3)
Sådan bruger du scriptet
- 1Kopiér scriptet nedenfor
- 2Gå til Google Ads → Bulk Actions → Scripts
- 3Klik "+ New script" og indsæt koden
- 4Klik "Preview" for at teste – ingen ændringer foretages
- 5Justér MIN_IMPRESSIONS og MIN_COST efter behov
- 6Resultaterne vises i Google Sheets via linket i scriptet
ngram-analysis-google-ads.js
// N-gram Analysis Script for Google Ads
// ========================================
// Identifies patterns in search terms (1, 2 and 3 word combinations)
// and shows cost, clicks, impressions and conversions per n-gram.
//
// Output: Google Sheets (link generated on first run)
// Author: Online Markedsføring (online-markedsføring.com)
// Version: 1.0 | 2025
var CONFIG = {
MIN_IMPRESSIONS: 10, // Minimum impressions for an n-gram to appear
MIN_COST: 5, // Minimum spend in account currency
DATE_RANGE: 'LAST_30_DAYS', // LAST_7_DAYS / LAST_30_DAYS / LAST_90_DAYS / THIS_MONTH / LAST_MONTH
SHEET_NAME: 'N-gram Analysis',
MAX_NGRAM_SIZE: 3, // 1 = unigrams, 2 = bigrams, 3 = trigrams
INCLUDE_SEARCH_PARTNERS: false,
};
function main() {
var spreadsheet = getOrCreateSpreadsheet();
var sheet = getOrCreateSheet(spreadsheet, CONFIG.SHEET_NAME);
sheet.clearContents();
var headers = [
'N-gram', 'Type', 'Impressions', 'Clicks', 'Cost', 'Conversions',
'CTR (%)', 'CPC', 'Conv. Rate (%)', 'Cost/Conv.'
];
sheet.getRange(1, 1, 1, headers.length).setValues([headers]).setFontWeight('bold');
var ngramData = {};
var query = 'SELECT search_term_view.search_term, metrics.impressions, ' +
'metrics.clicks, metrics.cost_micros, metrics.conversions ' +
'FROM search_term_view ' +
'WHERE segments.date DURING ' + CONFIG.DATE_RANGE + ' ' +
'AND metrics.impressions > 0';
var rows = AdsApp.search(query);
while (rows.hasNext()) {
var row = rows.next();
var searchTerm = row['search_term_view.search_term'].toLowerCase();
var impressions = parseInt(row['metrics.impressions']) || 0;
var clicks = parseInt(row['metrics.clicks']) || 0;
var cost = (parseInt(row['metrics.cost_micros']) || 0) / 1000000;
var conversions = parseFloat(row['metrics.conversions']) || 0;
var words = searchTerm.split(/\s+/).filter(function(w) { return w.length > 0; });
for (var n = 1; n <= CONFIG.MAX_NGRAM_SIZE; n++) {
for (var i = 0; i <= words.length - n; i++) {
var ngram = words.slice(i, i + n).join(' ');
var type = n === 1 ? 'Unigram' : n === 2 ? 'Bigram' : 'Trigram';
if (!ngramData[ngram]) {
ngramData[ngram] = {
type: type,
impressions: 0, clicks: 0, cost: 0, conversions: 0
};
}
ngramData[ngram].impressions += impressions;
ngramData[ngram].clicks += clicks;
ngramData[ngram].cost += cost;
ngramData[ngram].conversions += conversions;
}
}
}
var outputRows = [];
for (var ngram in ngramData) {
var d = ngramData[ngram];
if (d.impressions < CONFIG.MIN_IMPRESSIONS || d.cost < CONFIG.MIN_COST) continue;
var ctr = d.impressions > 0 ? (d.clicks / d.impressions * 100).toFixed(2) : 0;
var cpc = d.clicks > 0 ? (d.cost / d.clicks).toFixed(2) : 0;
var convRate = d.clicks > 0 ? (d.conversions / d.clicks * 100).toFixed(2) : 0;
var costPerConv = d.conversions > 0 ? (d.cost / d.conversions).toFixed(2) : '—';
outputRows.push([
ngram, d.type, d.impressions, d.clicks,
d.cost.toFixed(2), d.conversions.toFixed(1),
ctr, cpc, convRate, costPerConv
]);
}
// Sort by cost descending
outputRows.sort(function(a, b) { return parseFloat(b[4]) - parseFloat(a[4]); });
if (outputRows.length > 0) {
sheet.getRange(2, 1, outputRows.length, headers.length).setValues(outputRows);
}
// Auto-resize columns
for (var col = 1; col <= headers.length; col++) {
sheet.autoResizeColumn(col);
}
Logger.log('N-gram analysis complete. ' + outputRows.length + ' n-grams found.');
Logger.log('Spreadsheet: ' + spreadsheet.getUrl());
}
function getOrCreateSpreadsheet() {
var files = DriveApp.getFilesByName('Google Ads N-gram Analysis');
if (files.hasNext()) {
return SpreadsheetApp.open(files.next());
}
return SpreadsheetApp.create('Google Ads N-gram Analysis');
}
function getOrCreateSheet(ss, name) {
var sheet = ss.getSheetByName(name);
if (!sheet) {
sheet = ss.insertSheet(name);
}
return sheet;
}Brug for hjælp til Google Ads optimering?
Online Bureau tilbyder gratis audit og professionel PPC-rådgivning.