Diepteanalyse · 13 min lezen

De content-gapanalyse die zichzelf terugverdient met een kopje koffie aan API-credit

Eén run vond 1.996 pagina's waarop concurrenten ranken en de klant niet, met 1,5 mln zoekopdrachten erachter. De AI-gematchte gapkaart voor een paar dollar.

Een archeoloog die stof afborstelt van ontbrekende tegels in een kaart van een website
De serieuze feiten zijn echt — de artikelcovers niet.

Kort gezegd: Een content-gapanalyse vindt elke pagina waarop een concurrent rankt en jij niet, en verdeelt het resultaat over vier teams. Trek concurrent-zoekwoorden en landingspagina's op met DataForSEO voor een paar dollar, laat een LLM hun pagina's matchen met de jouwe, en de niet-gematchte rijen worden SEO-fixes, assortimentsuitbreiding, betaalde campagnes en content. Eén echte run voor een Tsjechische webshop leverde 1.996 ontbrekende pagina's op met 1.520.840 maandelijkse zoekopdrachten erachter.

Vorige maand draaide ik deze analyse voor een Tsjechische webshop in het kindersegment. Vijf concurrentdomeinen gingen erin. De pipeline trok elk zoekwoord op waarop die domeinen ranken, klapte de zoekwoorden samen tot pagina’s, en een LLM matchte ‘s nachts elke concurrentpagina tegen de site van de klant. Het resultaat las ik de volgende ochtend bij de koffie.

1.996 pagina’s die de concurrenten afdekken en de klant niet. Achter die ontbrekende pagina’s 1.520.840 zoekopdrachten per maand.

Geen zoekwoorden. Pagina’s. 1.847 ervan zijn commercieel, categoriepagina’s die de shop volgende week zou kunnen beginnen te bouwen. De overige 149 zijn contentonderwerpen waarmee de concurrenten ouders vangen, lang voordat iemand een productnaam intypt. De API-rekening voor de hele pull was een paar dollar.

In twintig jaar PPC heb ik precies deze analyse vaak gepitcht en meestal toegekeken hoe klanten afhaakten, en ik heb het ze nooit kwalijk genomen. Vóór LLM’s begon de eerlijke offerte bij 20 tot 30 uur seniortijd, alleen al om de zoekwoordexports aan elkaar te naaien, één CSV per concurrent per tool, en daarna nog eens tot 50 uur om het resultaat op te schonen en op de site te mappen zoals die er vandaag echt bij staat. Niemand tekent daarvoor op een misschien. Dezelfde klus kost me nu 2 tot 5 uur. Wat overblijft is beslissen wat elke gap betekent, en dat is het deel waarvoor je dit leest. Hier is de hele zet, met de echte cijfers van die run erdoorheen.

1.996
pagina's waarop concurrenten ranken en de klant niet
1.520.840
maandelijkse zoekopdrachten achter die gaten
10.110
zoekwoorden over 651 concurrentpagina's, 5 domeinen
$0,60
per 1.000 SERP-queries (DataForSEO Regular)

De hele zet in één zin

Vind de pagina’s waarop je concurrenten ranken en die je niet eens in je portfolio hebt, en zet die lijst om in werk voor vier teams. Meer SEO-zichtbaarheid, zoekcampagnes gericht op landingspagina’s die je miste, assortimentsideeën met de vraag al bewezen, en content die een remarketinglijst voedt. Eén kaart, vier uitbetalingen. Alles hieronder is hoe je er komt.

Elk SEO-deck heeft de slide die je dit aanraadt. Analyseer de concurrentie, vind de gaten in je content en categorieën. Bijna niemand volgt hem op, omdat de oude manier een gezwoeg was. Exporteer de zoekwoorden van een concurrent, schat op het oog naar welke landingspagina’s ze leidden, leg ze met de hand naast je sitemap, en ruzie een week in een spreadsheet over matches. Dus de slide bleef een slide.

Twee dingen veranderden. De data optrekken werd goedkoop, want DataForSEO doet voor centen wat Semrush voor een maandabonnement doet. En het matchen werd niet langer handmatig. Een LLM koppelt de pagina’s van een concurrent in minuten aan de jouwe, en het hoeft niet perfect te zijn om nuttig te zijn.

Wat overblijft is het deel dat altijd de echte waarde was, en het was nooit echt een SEO-taak. Een content gap is een ontbrekende categoriepagina, een productlijn die je niet voert, een blog die een remarketinglijst voedt. Het raakt SEO, betaald, assortiment en contentstrategie tegelijk.

De analyse in één kader

  • Waar we op uit zijn Elke pagina waarop een concurrent rankt en jij niet
  • Tools DataForSEO API · een willekeurige LLM · een site-crawler
  • Kosten Een paar dollar aan API-credit, geen abonnement
  • Wat je krijgt Een gerangschikte gapkaart voor SEO, betaald, assortiment en content

Eén run, vijf concurrenten, 1.996 gaten

Vóór de mechaniek het resultaat. De klant verkoopt kinderartikelen op een competitieve Tsjechische markt, en vijf rivaliserende domeinen haalden de shortlist. De pipeline matchte 651 van hun sterkste pagina’s, met 10.110 gerankte zoekwoorden, tegen de eigen sitekaart van de klant. Elk cluster van vraag zonder equivalente pagina aan de kant van de klant werd een gap, en elke gap is een pagina die de klant kan bouwen, met het zoekvolume erachter al gemeten.

Wat de run opleverde

  • Gap-pagina's (zij dekken het af, de klant niet) 1.996
  • Commerciële gaten, een landingspagina ontbreekt 1.847
  • Contentgaten, een onderwerp ontbreekt 149
  • Maandelijkse zoekopdrachten achter de gaten 1.520.840
  • Bewijsbasis 10.110 zoekwoorden · 651 concurrentpagina's · 5 domeinen

En de gaten zijn niet willekeurig. Zeven patronen dekken op drie na alle 1.996 rijen af, en één patroon domineert al het andere:

Gap-pagina's per patroon uit één run voor een Tsjechische webshop in het kindersegment, vijf concurrentdomeinen. Minttinten zijn commerciële gaten (een landingspagina ontbreekt), koraal zijn contentgaten (een artikel of hub ontbreekt). Zeven patronen dekken 1.993 van de 1.996 gaten af.
Waar de 1.996 gaten vandaan komen gap-pagina's per patroon
Categoriesynoniem
1.640 de producten bestaan, de paginanaam niet
Categorie × thema
136
Contentonderwerp
114
Categorie × merk
36
Categorie × attribuut
32
Contentfranchise
18
Content-how-to
17
commerciële gap (ontbrekende landingspagina) content gap (ontbrekend artikel)

Categoriesynoniemen zijn dé bevinding. De klant verkoopt die producten al. De concurrenten geven het schap simpelweg een eigen landingspagina onder de naam die kopers daadwerkelijk intypen, terwijl de klant dezelfde producten in één bredere lijst stopt. Vraag die je bedient zonder een pagina die heet zoals mensen zoeken, is vraag waarvoor je onzichtbaar bent. En elk van die 1.640 rijen is een goedkope fix, want er is geen nieuw product, geen nieuwe leverancier en geen nieuwe content voor nodig. Alleen een pagina.

De rest van de commerciële kant snijdt categorieën anders aan. Een categorie gekruist met een thema, zeg een leeftijdsgroep of een gelegenheid. De lijn van een merk op een eigen pagina. Een categorie gefilterd op materiaal of eigenschap. De contentkant spiegelt het met onderwerpclusters, hubs rond licentiefiguren en how-to-gidsen waarop concurrenten ranken terwijl de klant er nooit een regel over schreef.

De gapkaart van dichtbij

Elke rij van de deliverable leest hetzelfde: wat de concurrent heeft, of wij het hebben, en bij welk team de fix landt. Hier is één rij per patroon, met de categorienamen veralgemeend zodat de klant anoniem blijft (de aantallen hierboven zijn de echte):

Eén veralgemeende voorbeeldrij per gap-patroon uit de echte run. Gematchte rijen vallen weg; elke ✗-rij is een pagina om te bouwen, met gemeten vraag eraan vast.
ConcurrentpaginaAan onze kantPatroonLandt bij
Hoofdcategoriepagina ✓ matchGeen gapNiets te doen
De categorie onder het synoniem dat kopers echt intypen ✗ weggestopt in een bredere lijstCategoriesynoniemSEO + betaald
De categorie gesneden op leeftijdsgroep Categorie × themaSEO + betaald
Een seizoensgebonden cadeaugids-cluster ContentonderwerpContent + ads
De lijn van een merk op een eigen pagina Categorie × merkAssortiment + SEO
De categorie gefilterd op materiaal Categorie × attribuutWebstructuur
Een hub rond een licentiefiguur ContentfranchiseContent + assortiment
Een how-to-gids over de juiste maat kiezen Content-how-toContent + remarketing

De ✓-rijen vallen weg; de ✗-rijen zijn de deliverable.

Hoe ziet een gap-rij eruit met de cijfers erbij? Hier een illustratief voorbeeld, een verzonnen demodomein en afgeronde cijfers, niet de data van de klant, zodat je de vorm ziet zonder dat ik iemand blootgeef:

Illustratief voorbeeld met verzonnen data. Eén rij per concurrentpagina, met de vraag van het hele zoekwoordcluster erachter opgeteld en één commerciële vraag eraan vast, of we de producten die de pagina zou verkopen al voeren.
Concurrentpagina (demo)Rankende zoekwoordenMaandelijkse zoekopdrachtenGesch. concurrentverkeerVoeren we het?
toydemo.example/montessori-toys 11238.2009.800
toydemo.example/wooden-toys 8422.4006.100
toydemo.example/balance-bikes 5714.9004.300
toydemo.example/kids-carnival-costumes 419.7002.600

Elke rij beantwoordt de twee vragen die een prioriteringsoverleg echt nodig heeft. Hoeveel vraag zit er achter deze pagina, en kunnen we die bedienen met het assortiment van vandaag. Een ✓ met veel vraag is een landingspagina voor de volgende sprint; een ✗ met veel vraag is een gesprek met inkoop voordat iemand de website aanraakt.

En onder elke rij zit het cluster. Klap de montessori-rij open en je ziet de zoekopdrachten die die ene concurrentpagina verzamelt:

Illustratief voorbeeld met verzonnen data. De zoekwoordgroep achter één rij van de gapkaart. Al deze zoekopdrachten komen uit bij één concurrentpagina, dus krijgen ze aan onze kant ook één landingspagina.
Zoekwoord in het clusterMaandelijkse zoekopdrachten
montessori toys 18.100
montessori toys for 1 year old 5.400
wooden montessori toys 4.900
montessori sensory toys 3.800
montessori baby toys 3.300
best montessori toys for toddlers 2.700

Die zes zoekopdrachten zijn één cirkel van vraag, dus krijgen ze één pagina. Eén cluster, één landingspagina, één rij in de gapkaart. Bouw die pagina, en de volle 38.200 maandelijkse zoekopdrachten achter de rij gaan in één keer open. Daarom telt de kaart pagina’s in plaats van zoekwoorden.

En de deliverable zelf is geen slidedeck. De klant kreeg een Excel-bestand voor de mensen, een README, en daaronder een geïndexeerde SQLite-database met vijf tabellen. Hun eigen Claude verbindt met die database en bevraagt hem direct. “Welke contentgaten dragen de meeste zoekopdrachten” is daarmee een vraag die ze rechtstreeks in de data typen, in plaats van een verzoek aan mij waar ze een dag op wachten. Een deliverable die een AI kan bevragen, overleeft elke presentatie ervan.

De flow, van begin tot eind

Identificeer de echte concurrenten, op drie manieren

Sla over wie je denkt dat concurreert en kijk wie er daadwerkelijk opduikt waar jouw geld zit. Gebruik drie signalen samen. Eén, draai je belangrijkste zoekopdrachten door DataForSEO en noteer wie in betaald én organisch verschijnt. Twee, lees Auction Insights in Google Ads; veilingoverlap vertelt je hoe dichtbij een rivaal echt zit. Drie, trek zoekwoordoverlap-data op, waar het aantal queries dat je met een domein deelt een schone proxy is voor verwantschap. Drie lijsten klappen samen tot één shortlist. Doe deze stap fout en elke latere stap erft de vergissing, want dan breng je je gaten in kaart tegen een rivaal die nooit om jouw geld concurreerde.

Trek de zoekwoorden en landingspagina's van de concurrent op

Trek voor elke concurrent hun top organische zoekwoorden op, tot ongeveer 100k per domein, en, cruciaal, met welke landingspagina elk zoekwoord rankt. Uit positie en zoekvolume kun je het verkeer schatten dat naar elk van hun pagina’s stroomt. Een zoekwoord is een abstractie; een pagina is iets dat je kunt kopiëren, nabouwen of waar je een campagne op kunt richten. Dus klap je de zoekwoordenlijst samen tot een kaart van concurrentpagina’s met de zoekwoorden die ze voeden en het geschatte verkeer eraan vast. Eén ding moet hier helder zijn, want het bepaalt alles stroomafwaarts. Je koppelt geen losse zoekwoorden aan losse pagina’s. Eén categoriepagina van een concurrent rankt doorgaans op tientallen verwante zoekopdrachten, en die hele groep beschrijft één cirkel van wat gebruikers vragen. De pagina is het cluster. Op de kinderrun kookten vijf domeinen in tot 651 pagina’s die het matchen waard waren, met 10.110 zoekwoorden, ruwweg vijftien zoekopdrachten per pagina.

Breng je eigen site in kaart

Je hebt het spiegelbeeld van je eigen pagina’s nodig, en het moet compleet zijn, anders jaag je op “gaten” die eigenlijk pagina’s zijn die je inventarisatie vergat op te sommen. Crawl de site (Screaming Frog, of een wegwerp-Python-crawler die een LLM in vijf minuten schrijft), exporteer categorieën uit het webshopplatform, lees de product feed, parse de XML-sitemap. Meestal is het een combinatie. Eén waarschuwing uit ervaring. Vertrouw nooit op de sitemap alleen. Hij mist standaard parametrische pagina’s, gefilterde categorieweergaven en de blog, precies de oppervlakken waar een gapanalyse om geeft.

Laat AI hun pagina's matchen met de jouwe

Dit is de stap die vroeger een week kostte. Geef beide inventarissen aan een LLM, een open-source model volstaat, en laat hem elk cluster van concurrentvraag koppelen aan je dichtstbijzijnde equivalente pagina. Het matchen loopt op paginaniveau, nooit op zoekwoordniveau. De LLM vraagt of jouw site een pagina heeft die dezelfde cirkel van vraag bedient als die van de concurrent, niet of je een pagina met dezelfde naam bezit. En als een cluster aan jouw kant geen thuis vindt, is de fix één landingspagina voor het hele cluster, niet één pagina per zoekwoord erin. Je hebt geen 100% nauwkeurigheid nodig; je hebt de niet-gematchte rijen nodig. Op de kinderrun condenseerde de niet-gematchte vraag tot 1.996 pagina’s zonder equivalent aan de kant van de klant. Die lijst is de prijs.

Bepaal wat elke gap betekent, want hier houdt het op SEO te zijn

Een gap is niet één ding. Producten die je al verkoopt maar nooit een fatsoenlijke pagina gaf, krijgen een landingspagina-fix. Producten die je niet voert maar je leverancier wel, worden een assortimentsshortlist met vraag eraan vast. De sterke niet-commerciële content van een concurrent wordt een contentbriefing en een remarketingdoelgroep in één. Op de kinderrun kwam de verdeling uit op 1.847 commerciële gaten tegen 149 contentgaten, en elke bak landt bij een ander team met een ander budget.

De match hoeft niet perfect te zijn. Mensen blijven hier hangen, wachtend op 100% precisie. Je hebt die niet nodig. Een paar verkeerd gelabelde paren kosten je niets; de waarde zit in de duidelijk niet-gematchte concurrentpagina’s, en die overleven een rommelige match prima. Lever de analyse op 90% en handel ernaar, in plaats van een model te polijsten dat alleen ooit een middel tot een shortlist was.

Semrush vs. DataForSEO: waarom het prijsverschil ertoe doet

De reden dat deze analyse van “we zouden eens” naar “we deden het” ging, zijn de kosten, en het Semrush-getal dat hier telt ligt hoger dan de stickerprijs die mensen citeren. Het Pro-plan van $139,95/maand draait een content-gapcheck in de interface, met de hand, met exportlimieten. De analyse in dit artikel is programmatisch. Eén API-call per concurrentdomein geeft tot ~100k gerankte zoekwoorden terug met de landingspagina die elk raakt. Semrush zet die API achter het Business-plan van $499,95/maand, en zelfs dan begin je met nul API-units; die koop je apart, ruwweg $50 per miljoen units, bovenop het abonnement. DataForSEO is pay-as-you-go. Een top-up van $50 gaat maanden mee, er is geen seat te huren, en de hele run met vijf domeinen hierboven paste in een paar dollar ervan.

SemrushDataForSEO
Prijsmodel Vast abonnement; API daarbovenop gefactureerdPay-as-you-go tegoed
UI-instapplan $139,95/maand (Pro), terugkerend, exportgelimiteerdGeen seat nodig; alleen API
Programmatische / API-toegang Business $499,95/maand + API-units apart gekochtInbegrepen, je betaalt per call
Organische SERP, per 1.000 queries Gebundeld in het abonnement$0,60 (Regular) – $3,50 (Advanced, live)
Eén eenmalige gapanalyse Een Business-maand + units, terugkerendEen paar dollar aan tegoed

Voor een eenmalige, diep technische klus als een content-gappull is dat het verschil tussen een API-niveau van $500/maand ontgrendelen en een kopje koffie aan tegoed uitgeven. De datakwaliteit is er voor deze use case; de economie komt niet eens in de buurt.

Twee verhalen uit twintig jaar dit werk

De mechaniek is nieuw. De zetten die ze ontgrendelt, zie ik al twee decennia werken; ze waren alleen te bewerkelijk om op te zetten. En de 149 contentgaten uit de kinderrun zijn precies deze twee verhalen die erop wachten opnieuw te gebeuren.

De kinderblog die een verkoopkanaal werd

Een klant in het kindersegment werd verslagen op een klasse zoekopdrachten die niets met producten te maken had. De concurrent runde een sterke blog vol kleurplaten en slaapverhaaltjes, met enorm zoekvolume gericht op precies de doelgroep, ouders. De gapanalyse bracht het hele cluster boven water. De klant nam de strategie over, bouwde de content, trok het verkeer, liet die bezoekers in remarketing vallen en zette een “niet-commerciële” content gap om in aankopen. (Geanonimiseerd.)

Recepten voor een dieet dat maaltijdboxen verkoopt

Een meal-prep- en coachingbedrijf zat naast een categorie met twee prachtige eigenschappen. Receptzoekopdrachten hebben extreem zoekvolume, en hun klikken kosten centen. De strategische concurrenten hadden gestructureerde receptsecties gebouwd en oogstten een stroom mensen die, per definitie, beter wilden eten. Vandaar is het een kleine stap naar een product of een coachingaanbod. De gapanalyse maakte de kans zichtbaar en becijferde haar. (Geanonimiseerd.)

De twist die niemand draait: leen van een sterkere markt

Hier is de invalshoek die dit van een defensieve audit in een oneerlijk voordeel verandert.

Stel, je bent de leider in een kleine markt zonder serieuze concurrentie om van te leren. De gapanalyse thuis levert niets bruikbaars op; er is niemand vóór je om te kopiëren. Draai hem dus niet thuis. Draai exact dezelfde analyse tegen de sterkste, meest competitieve buitenlandse markt in jouw categorie.

Taal is geen barrière. De LLM brengt hun categorieën en content over op de jouwe, ongeacht de taal waarin ze geschreven zijn. Je importeert de strategieën die de leiders van een volwassen markt al bewezen hebben, categoriestructuren, contentinvalshoeken, assortimentsideeën, naar een markt waar letterlijk nog niemand ze doet. Je wordt de first mover thuis door de toekomst uit het buitenland te kopiëren. Het past natuurlijk bij een volledige marktexpansieanalyse wanneer je beslist waar die sterkere markt zit.

Waarom dit de cirkel rondmaakt

Kijk wat er op de kinderrun gebeurde. We begonnen met een nette SEO-taak, vind contentgaten, en het resultaat stroomde over in assortimentsbeslissingen, betaalde campagnes, remarketingdoelgroepen en contentstrategie. Dat is geen scope creep. Dat is de werkelijke vorm van het werk.

De data was altijd op te trekken; niemand deed het, omdat de handmatige kosten de opbrengst overtroffen. Nu kost de pull een paar dollar, en draait het matchen ‘s nachts. Wat als schaars ingrediënt overblijft is wat altijd schaars was, het idee. De senioriteit om naar een gapkaart te kijken en te weten dat de kleurplatenblog van een concurrent eigenlijk een remarketingkanaal is, en de breedte om SEO, betaald en assortiment in één hoofd te verbinden.

De uitvoering werd makkelijk. Het oordeel is het werk.

Take it with you

Download de complete instructies voor je AI

De hele aanpak hierboven, uitgeschreven als een briefing die je zo in Claude of een andere capabele codeeragent plakt, inclusief de matching-prompt en de DataForSEO-calls. Jij levert de concurrentenlijst en het API-tegoed, hij bouwt de gap-kaart voor jouw site. Laat je e-mailadres achter en het bestand is van jou.

One file, one list. I only write when there's something worth reading.

FAQ

Heb ik echt geen 100% matchnauwkeurigheid nodig?

Klopt. Je jaagt op de concurrentpagina’s zonder tegenhanger aan jouw kant, de niet-gematchte rijen. Een handvol verkeerd gelabelde paren verschuift die shortlist niet. Hier perfectie eisen vertraagt alleen het handelen op een lijst die al goed genoeg was.

Waarom DataForSEO in plaats van Semrush?

De kostenstructuur, en achter welke deur de API zit. De content-gaptools van Semrush zitten in de UI op het Pro-plan van $139,95/maand; de programmatische pull die dit artikel gebruikt vereist het Business-plan van $499,95/maand plus API-units die je er bovenop koopt. DataForSEO is pay-as-you-go vanaf een tegoed van $50 dat maanden meegaat, tegen $0,60–$3,50 per 1.000 SERP-queries. Voor een eenmalige technische pull is dat een paar dollar versus het ontgrendelen van een terugkerend Business-abonnement.

Hoe kies ik welke concurrenten ik analyseer?

Drie signalen samen: wie verschijnt er in betaald en organisch voor jouw belangrijkste queries (via DataForSEO), wie overlapt met jou in Google Ads Auction Insights, en wie deelt de meeste zoekwoorden met jou in de tooldata. De doorsnede is je echte concurrentenset, en vaak zijn het niet de merken die je zelf had genoemd.

Is dit niet gewoon SEO?

Het lijkt op SEO en is het niet. Op de run in dit artikel waren 1.847 gaten ontbrekende landingspagina’s en 149 ontbrekende contentonderwerpen. De gaten splitsen zich op in landingspaginastructuur (SEO), producten die je zou moeten voeren (assortiment), doelgroepen die remarketing waard zijn (betaald) en onderwerpen die het schrijven waard zijn (content). De analyse is hetzelfde; de acties landen bij vier verschillende teams.

Kan ik dit echt over talen en markten heen doen?

Ja, en het is de sterkste versie ervan. De LLM matcht pagina’s op intentie, niet op bewoording, dus hij koppelt de categorieën van een buitenlandse concurrent prima aan de jouwe. Heeft je thuismarkt geen concurrentie om van te leren, draai de analyse dan op een sterkere buitenlandse markt en importeer wat werkt.

Mijn sitemap somt al mijn pagina's op. Is dat niet genoeg voor mijn kant?

Nee. Sitemaps laten standaard parametrische URL’s, gefilterde categorieweergaven en delen van de blog weg, precies waar de gaten zitten. Bouw je eigen sitemap uit een crawl plus de product feed plus een categorie-export, en behandel de sitemap als één input, niet als de bron van waarheid.


CTA: Benieuwd waarop je sterkste concurrent rankt en jij niet? Laten we de gapkaart optrekken.

Waar het allemaal om draait

Wil je dit niveau van inzicht in je eigen account?

Eén e-mail. Ik zeg je eerlijk of het de moeite waard is voor jouw setup.

Contact →