I juni 2025 föreläste jag om effektiv innehållsoptimering med Google Search Console och Apps Script på WTS FEST Berlin. Här hittar du mina presentationsbilder, en instruktionsvideo och mina Google Apps Scripts som jag använder för innehållsoptimering med Google Search Console-data. I det här praktiska föredraget lär du dig hur du använder Google Search Console-data tillsammans med Google Apps Script för att återoptimera innehåll, hitta nya idéer och automatisera vissa SEO-uppgifter för att spara tid.
Om du skapar helt nytt innehåll och ännu inte har Search Console-data rekommenderar jag att du tittar på hur man gör en sökordsanalys med betalda verktyg som till exempel Ahrefs. Om SEO är nytt för dig rekommenderar jag att du tar en titt på min guide till sökmotoroptimering.
Presentation
https://speakerdeck.com/katarinadahlin/wtsfest-berlin-25
Instruktionsvideo
Vem är Katarina Dahlin?
Katarina är Senior Growth Hacker och SEO-expert. Med över 6 års erfarenhet inom SEO och digital marknadsföring hjälper Katarina sina kunder att växa organiskt på ett effektivt sätt.
Läs också min intervju av Women in Tech SEO.

Hur du effektivt återoptimerar gammalt innehåll med Google Search Console och Apps Script
I det här praktiska föredraget lär du dig hur du använder Google Search Console-data tillsammans med Google Apps Script för att återoptimera innehåll, hitta nya idéer och automatisera vissa SEO-uppgifter för att spara tid.
Nytt innehåll vs. optimering av befintligt innehåll
Varför optimera befintligt innehåll?
→ Förbättra de vinnande sidorna
Om Google redan gillar din sida och rankar den högt är det lättare att få samma sida att ranka på long tail-sökord.
→ Fler sidor betyder inte mer organisk trafik.
Du behöver inte alltid nytt innehåll. 20 % av sidorna kan stå för 80 % av trafiken, leads och intäkterna.
→ Det kräver mindre arbete att optimera befintliga sidor än att skapa nya.
Innehållskvalitet spelar större roll idag än någonsin.
Jag ville hitta ett bra sätt att optimera gammalt innehåll.
Min process

Exportera all Search Console-data till ett kalkylblad
→ Kombinera sökord och landningssida
→ Använd verktyg som ‘Search Analytics for Sheets’ eller ‘Supermetrics’ för att hämta rådata.
Använd Google Apps Script i Google Sheets för att hämta mer data
→ Kontrollera om ord finns i innehållet
→ Importera metatitlar
Börja analysera datan direkt i kalkylbladet eller skapa en visuell Looker Studio-vy för optimeringsarbetet.
Optimera!
→ Hitta sökord som rankar bra men saknas i innehållet. Lägg till dem i innehållet.
→ Optimera metatitlar genom att lägga till sökord
→ Identifiera kannibalisering
Hämta Google Search Console-data
Google Search Console-data är fantastiskt för att hitta nya sökord och optimera gammalt innehåll, men det finns några problem med att enbart använda gränssnittet…
→ Filtrering utesluter data (sökfrågor, klick, visningar) av integritetsskäl. Till exempel var 35 % av frågorna på min blomsterblogg dolda.
→ Det är lite klumpigt att arbeta i.
→ Du kan bara exportera 1 000 sökfrågor åt gången.
Lösning: Exportera rådata från Google Search Console till ett Google-kalkylblad.
Använd verktyg som ‘Search Analytics for Sheets’ eller ‘Supermetrics’.
→ Search Analytics for Sheets är gratis upp till 25 000 rader.
→ Supermetrics kostar 29–399 € / månad, men med det här verktyget kan du enkelt exportera även annan data till Google Sheets, som Analytics-data eller annonsdata.
Båda verktygen fungerar bra och på liknande sätt! Se inställningarna i bilden nedan.

Ta rådata.
Filtrera inte ännu här, eftersom filtrering gör att information försvinner.
Kombinera sökfråga och landningssida.
Dimensioner: Sida, Fråga
Mätvärden: Klick, Visningar, CTR och Position
→ Nu har du den största datamängd du kan få via API:et.
Du kan nu redan:
→ Se alla sökord en sida rankar på
→ Filtrera enkelt utan att data går förlorad
→ Se klick, visningar och positioner per sökfråga och landningssida

Hämta mer data med Google Apps Script för bättre analys
Vad är Google Apps Script?
→ Google Apps Script är ett skriptspråk som kan automatisera vissa uppgifter i Google Sheets och spara tid på manuellt arbete.
Så här använder jag det tillsammans med Google Search Console-data:
1. Identifiera kannibalisering
Identifiera kannibalisering genom att kombinera sökord och landningssida.
→ Sortera efter frågor
→ Titta på sida, visningar och position
→ Vilken sida presterar bäst?
Överväg att:
→ kombinera sidornas innehåll
→ ta bort de sämre presterande sidorna
→ om du inte kan ta bort sidor (t.ex. produktsidor), lägg till interna länkar till den bäst presterande sidan.
2. Optimera metatitlar
Det enklaste sättet att förbättra rankningar är att optimera metatitlar.
→ Skrapa och importera metatitlar med Google Apps Script eller Screaming Frog.
→ Sortera efter landningssida för att hitta sökord att lägga till i dina titlar.
Metatitelkontroll Apps Script del 1.
Det här Apps Script-skriptet hämtar metatiteln till kolumn I från URL:en i kolumn A i Google Sheet.
function importMetaTitle() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
const startRow = Number(PropertiesService.getScriptProperties().getProperty('lastProcessedRowMetaTitle')) || 2; // Start at saved row or row 2
const chunkSize = 100; // Process 100 rows per run
Logger.log(`Starting from row: ${startRow}`);
for (let i = startRow; i <= lastRow && i < startRow + chunkSize; i++) {
const url = sheet.getRange(i, 1).getValue();
if (!url) continue; // Skip empty URL cells
try {
// Fetch the URL and allow non-200 responses without throwing an exception
const response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
const responseCode = response.getResponseCode();
// If the response code is not 200, record the error code in column I and continue to the next row
if (responseCode !== 200) {
sheet.getRange(i, 9).setValue("Error: " + responseCode);
continue;
}
// Get the HTML content and extract the tag
const htmlContent = response.getContentText();
const titleMatch = htmlContent.match(/<title[^>]*>([^<]+)<\/title>/i);
if (titleMatch && titleMatch[1]) {
const metaTitle = titleMatch[1].trim();
sheet.getRange(i, 9).setValue(metaTitle);
} else {
sheet.getRange(i, 9).setValue("No title found");
}
} catch (e) {
sheet.getRange(i, 9).setValue("Error: " + e.message);
}
}
// Save progress: update the next starting row or clear progress if complete
const nextRow = startRow + chunkSize;
if (nextRow <= lastRow) {
PropertiesService.getScriptProperties().setProperty('lastProcessedRowMetaTitle', nextRow);
Logger.log(`Saved progress. Next start row: ${nextRow}`);
} else {
PropertiesService.getScriptProperties().deleteProperty('lastProcessedRowMetaTitle');
Logger.log('Processing complete or reached row limit!');
}
}</code></pre>
Metatitelkontroll Apps Script del 2.
Det här Apps Script-skriptet återställer skript 1 så att det börjar hämta titlar från rad 2 igen istället för där det senast slutade.
// Reset the meta title progress to start the script from row 2
function resetMetaTitleProgress() {
PropertiesService.getScriptProperties().deleteProperty('lastProcessedRowMetaTitle');
Logger.log('Meta title progress has been reset. The script will start from row 2.');
}
// Check the saved meta title progress to see where the script left off
function checkMetaTitleProgress() {
const progress = PropertiesService.getScriptProperties().getProperty('lastProcessedRowMetaTitle');
Logger.log('Meta title - Last processed row: ' + (progress || 'None (reset or not started yet)'));
}
3. Hitta frågor till din FAQ-sektion
Hitta vanliga frågor för att optimera för hjälpsamt innehåll.
→ Lägg till frågan som en H2-rubrik i ditt innehåll och försök synas i ett featured snippet eller i “Folk frågar också”-sektionen.
4. Kontrollera om du använder sökordet i ditt innehåll
För att ranka bra i sökresultaten är det viktigt att inkludera sökord i ditt innehåll som matchar de termer folk söker på.
→ Finns sökordet som rankar på position 5–30 på sidan?
Om inte, lägg till det på sidan! Det är en lättplockad frukt 🍎
Att lägga till välrankade men saknade sökord i innehållet hjälper dem att ranka bättre.
→ fungerar på sökord med lägre konkurrens
→ du får fler long tail-sökord att ranka bättre
Hur du kontrollerar om sökordet finns på sidan med Google Apps Script
Hur du bygger Google Apps Script
→ Be ChatGPT skapa Google Apps Script åt dig — förklara bara vad du vill göra.
→ Testa skriptet och anpassa det efter dina behov — be ChatGPT göra ändringar!
Exempelprompt att börja med:
Skapa ett Google Apps Script som kontrollerar om sökordet i kolumn B finns i kolumn A på samma rad, och lägg till resultatet i kolumn G som not found eller found.
Du kan också använda mitt Google Apps Script för att kontrollera om sökordet finns på sidan eller inte. Anpassa det med ChatGPT om du kontrollerar andra kolumner eller vill ha resultatet i en annan kolumn.
Det här skriptet är också tvådelat. Det första skriptet kontrollerar om sökordet finns på sidan och fortsätter från nästa rad där det senast slutade. Det andra skriptet återställer startraden så att kontrollen börjar om från rad 2.
Google Apps Script för att kontrollera om sökordet finns på sidan del 1.
Kör det här skriptet för att kontrollera om sökordet i kolumn B finns på sidan i kolumn A. Resultaten läggs till i kolumn G som Found eller Not found. Det kontrollerar 100 rader per körning och fortsätter från nästa rad när skriptet körs igen.
function checkKeywordInPage() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
const maxRows = 8000; // Limit to 8000 rows
const startRow = Number(PropertiesService.getScriptProperties().getProperty('lastProcessedRow')) || 2; // Start at saved row or row 2
const chunkSize = 100; // Process 100 rows per run
Logger.log(`Starting from row: ${startRow}`);
for (let i = startRow; i <= lastRow && i < startRow + chunkSize && i <= maxRows; i++) {
const url = sheet.getRange(i, 1).getValue();
const keyword = sheet.getRange(i, 2).getValue().toLowerCase(); // Convert keyword to lowercase
try {
// Use muteHttpExceptions to handle non-200 responses without throwing an error
const response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
const responseCode = response.getResponseCode();
// If URL returns a 404 error, mark it and skip keyword checking.
if (responseCode === 404) {
sheet.getRange(i, 7).setValue("404");
continue;
}
const content = response.getContentText().toLowerCase(); // Convert page content to lowercase
// Replace spaces in the keyword with optional hyphen regex pattern
const modifiedKeyword = keyword.replace(/\s+/g, '[-\\s]*');
const keywordRegex = new RegExp(modifiedKeyword, 'i'); // Case-insensitive regex for the modified keyword
if (keywordRegex.test(content)) {
sheet.getRange(i, 7).setValue("Found");
} else {
sheet.getRange(i, 7).setValue("Not Found");
}
} catch (e) {
sheet.getRange(i, 7).setValue("Error: " + e.message);
}
}
// Save progress
const nextRow = startRow + chunkSize;
if (nextRow <= lastRow && nextRow <= maxRows) {
PropertiesService.getScriptProperties().setProperty('lastProcessedRow', nextRow);
Logger.log(`Saved progress. Next start row: ${nextRow}`);
} else {
PropertiesService.getScriptProperties().deleteProperty('lastProcessedRow'); // Reset when done
Logger.log('Processing complete or reached row limit!');
}
}
function resetProgress() {
// Manually reset the progress
PropertiesService.getScriptProperties().deleteProperty('lastProcessedRow');
Logger.log('Progress has been reset.');
}
Google Apps Script för att kontrollera om sökordet finns på sidan del 2.
Det här skriptet återställer det första skriptet så att det börjar om från rad 2.
// Reset the progress to start the script from row 2
function resetProgress() {
PropertiesService.getScriptProperties().deleteProperty('lastProcessedRow');
Logger.log('Progress has been reset. The script will start from row 2.');
}
// Check the saved progress to see where the script left off
function checkProgress() {
const progress = PropertiesService.getScriptProperties().getProperty('lastProcessedRow');
Logger.log('Last processed row: ' + (progress || 'None (reset or not started yet)'));
}
Bygg Google Apps Script steg för steg
→ Hitta Apps Script under Tillägg i Google Sheets.
→ Skapa ett nytt skript.
→ Börja från tom mall och lägg till skriptet.
→ Kör skriptet!
→ Se resultatet om sökordet finns på sidan eller inte.
→ Ta de ord som saknas och lägg till dem på den rankande sidan 📈







Skapa en visuell Looker Studio-vy för dina vanligaste filter
En egen sida per filter. Exempel på filtervyer:
→ Endast varumärkessökningar
→ Varumärkessökningar exkluderade
→ Produktsidor
→ Kategorisidor
→ Bloggsidor
→ FAQ-sökningar
→ Sökord eller ämnen
Lägg till möjlighet att filtrera inne i Looker Studio-vyn.
Följ klick och visningar (data direkt från Google Search Console).
Ha din sökord + landningssida-data med klick, visningar, CTR, position och Found/Not found-data.
Uppdatera data efter behov: var 28:e dag, var 3:e månad eller var 6:e månad.
Exempel på en av mina filtervyer.
Sammanfattning
Förbättra de vinnande sidorna genom att återoptimera med Google Search Console-data.
Exportera all möjlig data till ett Google-kalkylblad.
Kombinera sökfråga + landningssida.
Verktyg:
→ Supermetrics
→ Search Analytics for Sheets.
Hämta mer data med Apps Scripts och optimera!
→ metatitlar
→ kontrollera om ett sökord finns på sidan
Bygg ett Looker Studio för innehållsoptimering.
→ filtervyer för olika innehållskluster eller sidtyper
Tack för att du läste ända hit!
/ Katarina