Zoekintentie bepalen d.m.v. app scripts
Afgelopen week raakte ik met Bouke van den Berg aan de praat over de juiste zoekintentie bepalen, dure tools en alternatieve oplossingen. Tijdens ons gesprek liet hij zien hoe hij met beperkte developer skills een heel eind is gekomen d.m.v. app scripts in Google sheets. Daar heeft hij namelijk iets slims in elkaar geknutseld. D.m.v. een Google sheets add-on, importeert hij de data uit Google search console en vervolgens zorgt Google app scripts voor het bepalen van de juiste zoekintentie.
Een kleine waarschuwing vooraf, het Google app script is grotendeels ontwikkeld door chatGPT. Bij de output blijft het dus belangrijk om zelf kritisch te denken. Uit eigen onderzoek blijkt dat de foutmarge van de output miniem is, maar niet 0. Goed om te weten: dure fancy tools hebben het m.b.t. zoekintentie bepalen in de Nederlandse taal ook niet altijd bij het juiste eind. Het voordeel? Ons menselijk brein blijft belangrijk đ
Wat ga je leren?
Hoe achterhaal je zonder dure tools makkelijk en snel de zoekintentie van een grote hoeveelheid zoekwoorden? Het kan met een App Script voor Google Sheets waarmee ChatGPT per zoekwoord de zoekintentie bepaalt. In deze handleiding deel ik het door mij met behulp van ChatGPT gegenereerde script en leg ik uit hoe je deze gebruikt.
Met dit stappenplan lees je hoe je een door ChatGPT gegenereerd script in Google Sheets gebruikt om van zoekwoorden de zoekintentie te achterhalen. Dit gaan we van a tot z doen. Dat wil zeggen:
- Je gaat in Google Sheets zoekwoorden opvragen met de Search Analytics for Sheets plugin.
- Je gaat de door ChatGPT gegenereerde code toevoegen in App Scripts.
- Je gaat het script uitvoeren om de zoekintentie van je zoekwoorden te achterhalen.
Tot slot lees je meer over het volgende:
- Eventuele aanpassingen die je aan het script kunt doen om het meer op maat te maken voor je behoeftes.
- Hoe ik tot mijn prompt ben gekomen voor het script dat door ChatGPT is gegenereerd.
Stap 1: zoekwoorden opvragen in Google Sheets
Voor deze stap heb je nodig:
- Een Google-account (gratis).
- Met datzelfde Google account toegang tot de Search Console-omgeving van de website waarvan je van de zoekwoorden de zoekintentie wil achterhalen (gratis).
- De plugin âSearch Analytics for Sheetsâ (ook gratis).
Search Analytics for Sheets plug-in installeren
- Ga naar sheets.new om een nieuw Google Spreadsheet aan te maken.
- Druk in het menu op âUitbreidingenâ, ga naar âAdd-onsâ en druk daar op âAdd-on toevoegenâ.
- Zoek op âSearch Analytics for Sheetsâ, druk op de plug-in en daarna op âInstallerenâ.
- Druk op âDoorgaanâ en selecteer daarna het Google-account waarvoor je de plug-in wilt gebruiken.
- Druk opnieuw op âDoorgaanâ en geef de toestemmingen waarom Search Analytics vraagt.
Je hebt nu de Search Analytics for Sheets-plug-in geĂŻnstalleerd voor Google Sheets. Met deze plug-in kan je makkelijk gegevens opvragen vanuit Google Search Console. Het handige aan deze plug-in is dat je zo meer gegevens kan opvragen dan als je dat zelf via Search Console doet.
Stap 2: Data opvragen met Search Analytics for Sheets
De plug-in is geĂŻnstalleerd. Het is nu tijd om de zoekwoorden op te vragen waarvan je de zoekintentie wilt opvragen.
- Open het spreadsheet dat je bij het installeren van de plug-in hebt aangemaakt (of open een nieuwe, dat maakt niet uit).
- Druk op âUitbreidingenâ, ga met de muis naar âSearch Analytics for Sheetsâ.
- Er verschijnt een nieuw menu. Druk op âOpen sidebarâ om de plug-in te openen.
- Je krijgt nu een venster te zien met een aantal mogelijkheden:
- Verified Site: de site waarvan je de zoekwoorden wil opvragen.
- Date Range: de periode waarvan je de zoekwoorden wil opvragen.
- Search Type: âDefault (Web)â is voor reguliere zoekresultaten, maar je kan bijvoorbeeld ook zo de gegevens van Google Images achterhalen.
- Group by: geeft aan hoe je de resultaten wil groeperen. Wil je de resultaten per zoekwoord, landingspagina, land? Het is helemaal aan jou (maar voor de zoekintentie kiezne we voor âQueryâ + âPageâ + âCountryâ.
- Filter By: Wanneer we de zoekwoordanalyse voor ĂŠĂŠn land willen uitvoeren (omdat de site op ĂŠĂŠn land is gericht, bijvoorbeeld Nederland, of wanneer we voor de verschillende landen individuele zoekwoordanalyses willen maken), zet het filter dan op âCountry equals nldâ. Indien we alle landen in ĂŠĂŠn keer willen betrekken in de analyse, stel dan geen filter in.
- Aggregation Type: op âDefault(auto)â laten staan.
- Rows returned: hoeveel resultaten wil je ontvangen? Voor deze analyse, die ter voorbeeld dient, vragen we 100 resultaten op. Het kan ook meer, met een limiet van 25.000 resultaten.
- Results Sheets: âActive sheetâ.
- Include fresh data (laat onaangevinkt, want recente data is wel leuk, maar onbetrouwbaar).
Nu je weet wat elke keuze betekent, vragen we de data op die we nodig hebben. In dit geval wil ik van de afgelopen 12 maanden weten wat in Nederland de 100 zoekwoorden zijn met de meeste clicks en weten welke pagina hoorde bij het zoekwoord. Dit betekent dat we de sidebar instellen als hiernaast. Je kunt dit aantal zelf natuurlijk aanpassen. Voor dit voorbeeld houden we 100 zoekwoorden aan.
Daarna kun je de data opvragen en krijg je in het werkblad de resultaten te zien. Je kunt de sidebar afsluiten. Op naar de volgende stap!
Stap 3: code toevoegen in Google App Scripts
Je hebt net met de Search Analytics for Sheets-plug-in de zoekwoorden opgevraagd waarvan je de zoekintentie wil achterhalen. Om dit te doen, ga je in App Scripts een code toevoegen die ik met ChatGPT heb gegenereerd. App Scripts is een makkelijke manier om scripts los te laten op je spreadsheets. Het kan taken voor je automatiseren die handmatig veel meer tijd kosten. In dit geval gaan we een script uitvoeren die met behulp van ChatGPT van alle zoekwoorden in kolom A de zoekintentie gaat achterhalen. Ga je dit handmatig aan ChatGPT vragen, dan kost dat veel meer tijd.
Over de API van ChatGPT
Wat je, ter aanvulling op de benodigdheden van stap 1, nodig hebt voor deze stap is een API-sleutel voor ChatGPT. Die maak je zelf via ââhttps://platform.openai.com/api-keys. Als je nog geen account hiervoor hebt, kun je die zelf aanmaken. Het gebruik van de API van ChatGPT kost geld. Om de API te kunnen gebruiken, moet je daarom een creditcard koppelen aan je account. Dat kan op https://platform.openai.com/settings/organization/billing/payment-methods. Vervolgens moet je een limiet instellen voor de kosten die je bereid bent te maken. Wees gerust: het opvragen van de zoekintentie van een grote lading zoekwoorden zal je misschien een cent of 10 kosten. zeker als je de âgpt-4oâ gebruikt. Die is beter, sneller en goedkoper dan âgpt-4â.
Bij âUsageâ kan je je gebruik van de API in de gaten houden. Je kunt ook daar de limiet aanpassen, als je dat wilt.
Een API-sleutel genereren
Om straks het App Script te gebruiken, heb je een API-sleutel nodig. Die kan je genereren op https://platform.openai.com/api-keys. Je drukt daar op âCreate new secret keyâ, geeft âm vervolgens een naam en drukt op âCreate secret keyâ.Je ziet dan de sleutel. Kopieer deze en bewaar âm ergens. Let op: je kunt deze sleutel maar 1 keer zien.
Stap 4: App Script aanmaken en uitvoeren
Je hebt nu een API-sleutel om de API van ChatGPT te gebruiken. Eerder heb je de zoekwoorden opgevraagd waarvan je de zoekintentie wil achterhalen. Je gaat nu het app script toevoegen dat je straks gaat gebruiken om van de door jou opgevraagde zoekwoorden de zoekintentie op te vragen.
- Open het spreadsheet waarin de zoekwoorden staan.
- Ga naar âUitbreidingenâ en druk op âApp scriptsâ.
- Er opent een nieuw scherm. Dat ziet er zo uit.
- Hier in GitHub vind je het script dat je nodig hebt om de zoekintentie te achterhalen. Open het document en kopieer de gehele inhoud.
- Plak het script in App Scripts. Dat ziet er dan zo uit:
- Plak nu op de eerste regel van de code je API-sleutel tussen de apostrofjes.
- Druk op het icoon voor âProject opslaanâ (links naast de button met âUitvoerenâ).
- Druk nu op de knop met âUitvoerenâ.
- Je krijgt nu een pop-up voor âAutorisatie vereistâ.
- Druk op âRechten controlerenâ.
- Selecteer het Google-account dat je toestemming moet geven. Zorg dat dit hetzelfde acocunt is als eerder.
- Je krijgt nu een melding met âGoogle heeft deze app niet geautoriseerdâ. Dat is niet erg. Druk op âGeavanceerdâ en daarna op âGa naar ânaam projectâ (onveilig)â.
- Druk nu in het nieuwe scherm op âToestaanâ.
- Het script start nu met het bepalen van de zoekintenties van elk zoekwoord uit kolom A. Ga naar het tabblad met het spreadsheet om de voortgang te volgen.
- Als je het niet eerder hebt gedaan, kun je nu kolom H een naam geven. Bijvoorbeeld: âZoekintentieâ.
Eventuele aanpassingen aan het script
Het script dat je gebruikt voor het achterhalen van de zoekintentie, kun je zelf in app scripts aanpassen. Of met behulp van ChatGPT natuurlijk. Je kunt bijvoorbeeld het nummer aanpassen van de kolom waarin het zit, en wel op deze regel:
var resultColumn = 8; // Kolom H (de 8e kolom) voor zoekintenties
Wat je ook kunt aanpassen, is het prompt waarmee je de zoekintentie probeert te achterhalen. Het gaat om dit stuk code:
var prompt = `Je bent SEO-specialist die van een zoekwoord de zoekintentie moet bepalen. Bestudeer het zoekwoord, analyseer welk zoekgedrag er achter kan zitten en bepaal of de zoekintentie informationeel, transactioneel, commercieel of navigerend is. Geef als antwoord alleen: informationeel, transactioneel, commercieel of navigerend. Zoekwoord: ${zoekwoord}`;
Wat mogelijke aanpassingen die mij te binnen schieten, zijn bijvoorbeeld een instructie om de woorden âinformationeelâ, âtransactioneelâ, âcommercieelâ en ânavigerendâ altijd in kleine letters te schrijven. Dit omdat ik merk in het voorbeeld, dat de woorden soms wel en niet met een hoofdletter beginnen. Dat is natuurlijk makkelijk te veranderen met een âsearch and replaceâ opdracht, maar kan op deze manier ook getackled worden. Je kan dan bijvoorbeeld dit prompten:
var prompt = `Je bent SEO-specialist die van een zoekwoord de zoekintentie moet bepalen. Bestudeer het zoekwoord, analyseer welk zoekgedrag er achter kan zitten en bepaal of de zoekintentie informationeel, transactioneel, commercieel of navigerend is. Geef als antwoord alleen: informationeel, transactioneel, commercieel of navigerend. Schrijf het door jou gekozen woord altijd alleen in kleine letters. Zoekwoord: ${zoekwoord}`;
Een andere aanpassing kan âm zitten in dat bij twijfel in intentie, meerdere intenties worden geselecteerd. Belangrijk is natuurlijk dat je bij ChatGPT altijd zelf de output toetst om te kijken of het klopt. Met het toevoegen van deze stap laat je ChatGPT dit voor een deel doen. Op die manier maakt het een voorselectie van de zoekwoorden waarvan het niet zeker weet wat de zoekintentie is. Je kan dan bijvoorbeeld dit prompten:
var prompt = `Je bent SEO-specialist die van een zoekwoord de zoekintentie moet bepalen. Bestudeer het zoekwoord, analyseer welk zoekgedrag er achter kan zitten en bepaal of de zoekintentie informationeel, transactioneel, commercieel of navigerend is. Geef als antwoord alleen: informationeel, transactioneel, commercieel of navigerend. Schrijf het door jou gekozen woord altijd alleen in kleine letters. Zoekwoord: ${zoekwoord}.
Twijfel je over de zoekintentie? Kies in dat geval twee zoekintenties waar tussen je twijfelt en geef ze allebei terug, met tussen de twee woorden een forward slash. Doe dit alleen bij grote twijfel, niet bij lichte twijfel.`;
Ben je klaar met je prompt? Sla het script op en druk op âUitvoerenâ om het resultaat te testen. Zie je in je spreadsheet dat de uitkomsten niet naar wens zijn? Je kunt het script in App Script op elk moment stoppen. Scheelt weer onnodige API-kosten. Voorbeeld:
Hoe heb ik dit gemaakt & disclaimer
Het script dat je hebt gebruikt om de zoekintentie te achterhalen, heb ik met behulp van ChatGPT gegenereerd. Dit komt omdat ik zelf absoluut geen programmeur ben. In de basis ben ik een copywriter en creatieve SEO-specialist, die vooral paginainhoudelijk kijkt hoe het geoptimaliseerd kan worden. Ik ben tevreden over hoe het script werkt en hoe hij zoekintenties classificeert. Mijn inschatting is dat 80 tot 90 van de 100 zoekwoorden juist zijn geclassificeerd. Zoals altijd geldt met ChatGPT dat je altijd de output moet toetsen, maar dit script doet voorwerk dat je veel tijd kan besparen bij het (zo goed als gratis, want minimale API-kosten) bepalen van zoekintenties op grote schaal.
Toch heb ik me het afgelopen jaar met behulp van ChatGPT wegwijs gemaakt in de wereld van het programmeren. Zo heb ik met behulp van scripts veel werk weten te automatiseren, zoals het maandelijks opvragen van hetzelfde soort data voor maandrapportages van mijn opdrachtgevers. Ook heb ik met behulp van ChatGPT een tool ontwikkeld waarmee we SEO-geoptimaliseerde teksten genereren in de tone of voice van onze opdrachtgevers. Deze tool is sinds een paar maanden bij ons verplicht en we merken dat we sneller teksten schrijven die minstens zo goed presteren.
Gebruikte prompt
Het gesprek zelf kan ik niet delen, omdat ik daar vertrouwelijke informatie heb gedeeld (overigens kan mijn data niet voor trainingsdoeleinden worden gebruikt). Maar ik kan wel de onderdelen van het gesprek delen over hoe het script tot stand is gekomen.
Mijn vraag was:
Ik wil in een nieuwe kolom weten welke zoekintentie het zoekwoord uit kolom A heeft: informationeel, transactioneel, commercieel of navigerend.
Ik wil dit doen door ChatGPT de inhoud van de cel te laten lezen. Dit wil ik doen door middel van een app script.
Dit is de api sleutel:
[api-sleutel]
Ik weet niet of het van pas komt, maar hieronder een stukje tekst over hoe ik de api van ChatGPT in een eigen php tool heb laten werken:
$url = 'https://api.openai.com/v1/chat/completions';
$requestData = [
"model" => gpt-4o,
"messages" => [["role" => "user", "content" => $prompt]],
"temperature" => floatval($data['temperature']),
"top_p" => floatval($data['topP']),
"max_tokens" => 4096
];
Toelichting
Zoals je kunt lezen, heb ik een stuk code gebruikt dat ik al had die duidelijk maakt hoe de API werkt. Dat scheelt een boel gezeur met de API werkend krijgen. Voor mij als niet-programmeur (ik codeer alleen m.b.v. ChatGPT en ben zonder dit helemaal nergens) was het een gedoe om de API werkend te krijgen. Dit stuk code scheelde mij dus veel tijd, want ChatGPT wist zo meteen wat de vereisten voor de API waren. Het script werkte meteen. Vervolgens heb ik nog wel om een aanpassing gedaan waarmee ik niet tot het einde van het uitvoeren van het script hoefde te wachten om de output te zien, maar dat elke cel los van de anderen werd geĂźpdatet. Dat deed ik met deze prompt:
Optimalisaties
Ik heb deze code geschreven voor een app script in Google Sheets. Nu zie ik pas de zoekintenties als alle zoekwoorden zijn gecheckt op zoekintentie. Ik wil dat ik, als de zoekintentie van een zoekwoord is bepaald, ik dat meteen te zien krijg in de bijbehorende cel in kolom J.
Ik heb deze prompt gegeven aan de o1-preview die eerst nadenkt voordat hij met output komt. Voordat de output kwam, was dit het gedachteproces van o1-preview:
Probleemomschrijving
De gebruiker heeft een probleem met de weergave van zoekintenties in Google Sheets, waarbij zoekintenties pas zichtbaar zijn na verwerking van alle zoekwoorden.
Analyseren en verzamelen
Het script haalt gegevens op uit een Google Sheet en bepaalt de zoekintentie voor elk zoekwoord met de OpenAI API, door resultaten in specifieke kolommen in te voeren en tussen de aanvragen een korte pauze in te lassen.
Herzien van zoekgedrag
Ik heb de zoekterm in overweging genomen, onderzocht welke zoekopdrachten erbij horen, en vastgesteld dat de zoekintentie informatief is.
Definieer zoekobject
Ik ben bezig met het definiĂŤren van het zoekobject door relevante termen te selecteren en het zoekconcept te beschrijven. Dit helpt bij het richten van de zoekopdracht.
Oplossen van updates
Ik denk na over het toevoegen van SpreadsheetApp.flush() binnen de loop om ervoor te zorgen dat de spreadsheet in realtime wordt bijgewerkt terwijl het script draait.
Updater databereiken
Ik denk erover om SpreadsheetApp.flush() toe te voegen na het instellen van de waarde in de cel, zodat alle wijzigingen onmiddellijk worden doorgevoerd.
Nieuwe output
Een heel denkproces (ik denk dat gpt-4 dit ook prima had gekund, maar ja: toch leuk om een nieuwe functie uit te proberen?) dat ervoor zorgde dat de volgende regel op de juiste plek werd toegevoegd in het script:
SpreadsheetApp.flush(); // Forceer het toepassen van de wijziging
Laatste aanscherping
De basis van het script werkte meteen naar behoren. Dat wil zeggen: van zoekwoorden kwam ik de zoekintentie te weten. Zoals je net kon lezen, heb ik een paar aanscherpingen moeten doen om de werking meer naar mijn zin te krijgen. met het toevoegen van de flush functie als meest concrete.
Ik merkte, bij het achterhalen van meer zoekintenties, dat het script na een minuut of 6 stopt. De uitvoertijd zit dan aan zijn limiet. Maar ik weet nog niet van alle zoekwoorden de intentie. Draai ik het script opnieuw, dan begint hij van voor af aan. Willen we niet natuurlijk. Dus: ChatGPT, zeg maar hoe we dit oplossen!
Redenatie ChatGPT 4-o1
Ga verder met de uitvoering
Ik werk aan een script om te voorkomen dat Google Apps Script de intentwaarden overschrijft bij onderbrekingen, door te hervatten waar het is gestopt en doorgaan met de volgende onbekende waarden zonder bestaande intents te verwijderen.
Phrases analyseren
Ik ben bezig met het aanpassen van de âbepaalZoekintentieâ functie om alleen onvolledige of onbekende intenties in kolom H te verwerken, bestaande intenties intact te laten en voort te zetten waar gestopt is na een time-out.
Aanpassen van de scriptinstructie
Ik verkent de optie om de gehele gegevensbereik, inclusief de resultaatkolom, te lezen en vervolgens alleen de lege rijen te verwerken, rekening houdend met de uitvoeringstijdslimieten van Apps Script.
Data selecteren
Ik onderzoek manieren om alleen de kolommen A en H te selecteren in Google Sheets, waarbij ik meerdere methoden verken om dit efficiĂŤnt te doen.
Aantrekken van gegevens
Ik ben bezig met het ophalen van gegevens uit kolom A en kolom H van een sheet. Dit doe ik door de waarden te lezen en ze geleidelijk aan te trekken.
Nieuwe intenties verwerken
Ik ben bezig met het schrijven van een script om nieuwe zoekintenties te verwerken zonder bestaande intenties te overschrijven. Dit betekent dat als een intentie leeg is, ik deze verder analyseer en update.
Uitkomst
Uitkomst is dat het script nu helemaal naar mijn zin is. Als hij stopt met uitvoeren, omdat de uitvoertijd aan zijn limiet zit, gaat hij verder waar hij gebleven was wanneer ik opnieuw op âUitvoerenâ druk. Het resultaat is dit definitieve script (dat jij ook van begin af aan heb gebruikt).
Afronding en disclaimer
Hopelijk is het je gelukt om aan de hand van deze instructie mijn door ChatGPT gegenereerde script te draaien in App Scripts. En ben je hoop ik wat wijzer geworden over hoe je ChatGPT hiervoor kunt gebruiken en, net zo belangrijk, hoe je ChatGPT gebruikt om te schaven aan de output. Net zo lang tot het naar je wens is.
Tot slot nogmaals een disclaimer die ik wil geven: controleer altijd handmatig de output van ChatGPT. Het is een taalmodel dat je een rol van SEO-specialist kan laten aanmaken, maar het is en blijft een taalmodel. Geen SEO-specialist.
Vragen? Ik help je graag verder in de SEO Mastermind community.