SEO-audits zijn waardevol maar tijdrovend. Een handmatige audit van Google Search Console kost gemiddeld 2 tot 4 uur per maand: data exporteren, filteren, analyseren, prioriteren en een actieplan schrijven. Met n8n en Claude automatiseer je dit volledig. Elke maandagochtend wacht er een SEO-rapport klaar in je inbox.
Deze handleiding bouwt een workflow die wekelijks Search Console data ophaalt, Claude de data laat analyseren op kansen en problemen, en een geprioriteerd actieplan genereert. Bouwtijd: 90 minuten, daarna volledig automatisch.
Wat je nodig hebt
- n8n (cloud of self-hosted)
- Google Search Console toegang voor jouw website (en Google API credentials)
- Claude API key (Anthropic Console)
- Google Sheets (voor historische data opslag)
- Gmail of Slack voor rapportage output
Stap 1: Google Search Console API activeren
Ga naar Google Cloud Console (console.cloud.google.com), maak een nieuw project aan en activeer de 'Google Search Console API'. Maak daarna OAuth 2.0 credentials aan (type: Desktop App) en download het credentials.json bestand. In n8n voeg je de Google credentials toe onder Settings, Credentials, Google Search Console API.
// n8n Google Search Console credential
// Ga naar: Settings > Credentials > Add Credential > Google Search Console OAuth2
// Vul in:
// Client ID: [uit Google Cloud Console]
// Client Secret: [uit Google Cloud Console]
// Redirect URL: https://jouw-n8n-instance.nl/rest/oauth2-credential/callback
Stap 2: Schedule Trigger instellen
Maak een nieuwe n8n workflow met een Schedule Trigger. Stel in op elke maandag om 07:00 (cron: 0 7 * * 1). Dit geeft je een wekelijks rapport aan het begin van de werkweek.
# Cron expressie: elke maandag 07:00
0 7 * * 1
Stap 3: Search Console data ophalen
Voeg een HTTP Request node toe voor de Search Console API. We halen twee datasets op: zoekterm prestaties en pagina prestaties. Begin met zoektermen:
{
"method": "POST",
"url": "https://www.googleapis.com/webmasters/v3/sites/https%3A%2F%2Fjouwsite.nl%2F/searchAnalytics/query",
"authentication": "oAuth2",
"body": {
"startDate": "{{ $now.minus(28, 'days').format('YYYY-MM-DD') }}",
"endDate": "{{ $now.minus(1, 'days').format('YYYY-MM-DD') }}",
"dimensions": ["query"],
"rowLimit": 50,
"dimensionFilterGroups": []
}
}
Dit geeft de top 50 zoektermen van de afgelopen 4 weken met clicks, impressies, CTR en gemiddelde positie. Voeg een tweede HTTP Request node toe voor pagina-prestaties (dimensie: page in plaats van query).
Stap 4: Vorige week data ophalen uit Google Sheets
Voeg een Google Sheets Read Rows node toe om de data van vorige week op te halen. Dit maakt trendvergelijking mogelijk: zijn clicks gestegen of gedaald? Welke zoektermen verloren positie?
// Google Sheets structuur voor historische data
// Kolommen: Datum, Zoekterm, Clicks, Impressies, CTR, GemPositie
// Sla elke weekrun hier op voor trendanalyse
Stap 5: Data formatteren voor Claude
Voeg een Code node toe die de data combineert en structureert voor Claude analyse:
const zoektermen = $('Search Console Queries').all();
const paginas = $('Search Console Pages').all();
// Format zoektermen voor analyse
const zoektermenTekst = zoektermen.slice(0, 30).map(item => {
const d = item.json;
return `${d.keys[0]}: ${d.clicks} clicks, positie ${d.position?.toFixed(1)}, CTR ${(d.ctr * 100).toFixed(1)}%`;
}).join('\n');
// Identificeer kansen (hoge impressies, lage CTR)
const kansen = zoektermen
.filter(item => item.json.impressions > 100 && item.json.ctr < 0.03)
.slice(0, 10)
.map(item => `${item.json.keys[0]}: ${item.json.impressions} impressies maar slechts ${(item.json.ctr * 100).toFixed(1)}% CTR`)
.join('\n');
// Top paginas
const topPaginas = paginas.slice(0, 10).map(item => {
const d = item.json;
return `${d.keys[0]}: ${d.clicks} clicks, positie ${d.position?.toFixed(1)}`;
}).join('\n');
return [{ json: { zoektermenTekst, kansen, topPaginas } }];
Stap 6: Claude SEO-analyse
Stuur de gestructureerde data naar Claude met een analytisch SEO-prompt:
{
"model": "claude-sonnet-4-6",
"max_tokens": 1500,
"messages": [{
"role": "user",
"content": "Analyseer deze Google Search Console data voor workflows.nl en geef een SEO-actieplan.\n\nTOP ZOEKTERMEN (afgelopen 4 weken):\n{{ $json.zoektermenTekst }}\n\nKANSEN (hoge impressies, lage CTR):\n{{ $json.kansen }}\n\nTOP PAGINAS:\n{{ $json.topPaginas }}\n\nGeef:\n1. Top 3 quick wins (kunnen deze week uitgevoerd worden)\n2. Top 3 strategische kansen (1 tot 4 weken werk)\n3. 2 pagina's die de meeste aandacht verdienen + reden\n4. Zoektermen waar we positie 4-10 hebben (net buiten top 3) + aanbeveling\n5. CTR-verbeteringen: welke meta titles/descriptions aanpassen?\n\nWees concreet: geef exacte aanbevelingen, geen algemene tips."
}]
}
Stap 7: Data opslaan in Google Sheets
Sla de huidige week's data op in Google Sheets voor toekomstige trendvergelijking. Voeg een Google Sheets Append Row node toe die per zoekterm een rij toevoegt:
// Code node: formateer voor Google Sheets opslag
const zoektermen = $('Search Console Queries').all();
const datum = new Date().toISOString().split('T')[0];
return zoektermen.slice(0, 50).map(item => ({
json: {
datum,
zoekterm: item.json.keys[0],
clicks: item.json.clicks,
impressies: item.json.impressions,
ctr: (item.json.ctr * 100).toFixed(2),
positie: item.json.position?.toFixed(1)
}
}));
Stap 8: Rapport versturen
Stuur het Claude-rapport naar de SEO-verantwoordelijke via e-mail of Slack:
// Gmail Send Email
{
"to": "seo@jouwbedrijf.nl",
"subject": "Wekelijks SEO-rapport {{ $now.format('DD MMM YYYY') }} - workflows.nl",
"body": "Goedemorgen,\n\nHier is het automatische SEO-rapport voor afgelopen week.\n\n{{ $('Claude').item.json.content[0].text }}\n\n---\nAutomatisch gegenereerd door n8n + Claude\nData bron: Google Search Console (afgelopen 28 dagen)"
}
Stap 9: Positiedalingen alertering (bonus)
Voeg een extra check toe die vergelijkt met de vorige week data en direct alarmeert als een topzoekterm meer dan 5 posities is gedaald:
const huidig = $('Search Console Queries').all();
const vorig = $('Google Sheets Previous').all();
// Bouw lookup van vorige week
const vorigeWeek = {};
vorig.forEach(item => {
if (item.json.datum === vorigeWeekDatum) {
vorigeWeek[item.json.zoekterm] = parseFloat(item.json.positie);
}
});
// Detecteer grote dalingen
const dalingen = huidig
.filter(item => {
const term = item.json.keys[0];
const huidigPos = item.json.position;
const vorigPos = vorigeWeek[term];
return vorigPos && (huidigPos - vorigPos) > 5;
})
.map(item => ({
term: item.json.keys[0],
van: vorigeWeek[item.json.keys[0]],
naar: item.json.position
}));
return [{ json: { dalingen, heeftDalingen: dalingen.length > 0 } }];
Stap 10: Activeren en monitoren
Klik op Activate. De workflow runt elke maandag om 07:00 automatisch. Controleer de eerste drie runs handmatig via n8n Execution History om te verifiëren dat de data correct binnenkomt en Claude's analyses zinvol zijn. Na bevestiging: volledig hands-off.
Troubleshooting
Probleem: Search Console API geeft 403 Forbidden
Controleer of de Google account die je gebruikt, eigenaar of beheerder is van de property in Search Console. Verifieer ook dat de Search Console API is geactiveerd in het Google Cloud Project dat bij de credentials hoort.
Probleem: Weinig data in Search Console (nieuwe website)
Search Console heeft minimaal 3 maanden data nodig voor zinvolle trendanalyse. Voor nieuwe sites: pas de datumrange aan naar 7 dagen en verlaag de impressiedrempel voor kansen naar 10 in plaats van 100.
Uitbreidingen
- Voeg Google Analytics 4 data toe voor bounce rate en conversies per pagina
- Laat Claude ook concurrentiepaginas analyseren via web scraping van top-3 resultaten voor jouw doelzoektermen
- Maak een maandelijks dieper rapport naast het wekelijkse snelle overzicht
Na drie maanden wekelijkse rapporten heb je een rijke dataset van je SEO-prestaties en een bewezen systeem dat kansen signaleert voordat ze wegglippen. Dat is precies het verschil tussen SEO als stressvolle taak en SEO als systematisch groeikanaal.