Kort gezegd: Een content-gapanalyse vindt elke pagina waarop een concurrent rankt en jij niet, en verdeelt het resultaat over drie teams. Trek de zoekwoorden en landingspagina's van je concurrent op met DataForSEO voor een paar euro, laat een LLM hun pagina's matchen met de jouwe, en de niet-gematchte rijen worden SEO-fixes, assortimentsuitbreiding, betaalde campagnes en content. De match hoeft niet perfect te zijn — de waarde zit in de gaten.
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 drie winsten: meer SEO-zichtbaarheid, zoekcampagnes gericht op landingspagina’s die je miste, en niet-commercieel verkeer dat je anders nooit zou aanraken. Eén kaart, drie verschillende uitbetalingen, landend bij drie verschillende teams. Dat is de hele analyse; alles hieronder is hoe je er daadwerkelijk komt.
Elke 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, want de oude manier was een gezwoeg: exporteer de zoekwoorden van een concurrent, schat met het oog in naar welke landingspagina’s ze leidden, leg ze met de hand naast je sitemap, en ruzie een week lang over matches in een spreadsheet. Dus de slide bleef een slide.
Twee dingen veranderden. De data optrekken werd niet langer duur: 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 aan de jouwe in minuten, 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. Zo draai ik het.
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 euro aan API-credit, geen abonnement
- Wat je krijgt Een gerangschikte shortlist van content-, assortiments- en campagnegaten
Eén shop, vier concurrenten — hoe dit er in het echt uitziet
Voor de mechaniek, de vorm ervan. Stel ABC is een middelgrote outdoor-gear webshop: tenten, trailschoenen, regenjassen, rugzakken. Je trekt de echte concurrentenset op en er komen vier namen terug — en het interessante is waarom elk ABC organisch verslaat:
- Concurrent 1 runt een werkelijk goede blog over hoe je een trailrunningschoen kiest. Hij trekt duizenden kopers in de onderzoeksfase — voordat ze überhaupt naar een product zoeken.
- Concurrent 2 bezit de how-to-content over het herimpregneren van een regenjas — een onderwerp waarover ABC nooit één regel heeft geschreven, terwijl elke jaseigenaar er uiteindelijk naar zoekt.
- Concurrent 3 heeft een diepe categorieboom: aparte landingspagina’s voor kinderregenjassen, 3-seizoenstenten, ultralichte rugzakken — fijnmazige pagina’s die ABC nu in één generieke lijst proppt.
- Concurrent 4 geeft simpelweg iedereen het nakijken op merktermen. Dat is ruis, geen content gap — laat hem vallen.
Die ene kaart geeft ABC drie concrete zetten:
- Content — schrijf de gidsen over trailschoenen en jasonderhoud, vang het onderzoeksfase-verkeer dat de blogs opeten, en laat die lezers in een remarketinglijst vallen.
- Betaald — zodra de fijnmazige landingspagina’s bestaan, richt je zoekcampagnes op die (
kinderregenjassen→ de kinderregenjassen-pagina) in plaats van elke klik op één botte categoriepagina te dumpen. - Assortiment & structuur — bouw de ontbrekende categoriepagina’s voor lijnen die ABC al voert maar nooit een fatsoenlijk onderkomen gaf, en markeer productlijnen die een concurrent voert en ABC niet.
Dezelfde analyse, drie teams, drie budgetten. (Illustratief voorbeeld.) En zo produceer je die kaart.
De flow, van begin tot eind
Identificeer de echte concurrenten — op drie manieren
Niet wie je denkt dat concurreert — wie er daadwerkelijk opduikt waar jouw geld zit. Gebruik drie signalen samen. Eén: draai je belangrijkste zoekopdrachten door DataForSEO en noteer wie verschijnt in betaald én organisch. Twee: lees Auction Insights in Google Ads — veilingoverlap vertelt je hoe dichtbij een rivaal werkelijk zit. Drie: trek de data over zoekwoordoverlap op, waar het aantal queries dat je met een domein deelt een schone proxy is voor verwantschap. Drie lijsten klappen samen tot één shortlist van echte concurrenten. Waarom eerst: doe dit fout en elke latere stap erft de vergissing — je zou je gaten in kaart brengen tegen een rivaal die nooit echt om jouw geld concurreerde.
Trek de zoekwoorden en landingspagina's van de concurrent op
Trek voor elke concurrent hun top organische zoekwoorden op — tot ~100k — en, cruciaal, op welke landingspagina elk zoekwoord rankt. Uit positie × zoekvolume kun je het verkeer schatten dat naar elk van hun pagina’s stroomt. Waarom pagina’s, geen zoekwoorden: een zoekwoord is een abstractie; een pagina is iets dat je kunt kopiëren, herbouwen of waar je een campagne op kunt richten. Dus klap je de zoekwoordenlijst samen tot een kaart: concurrentpagina × geschat verkeer × de zoekwoorden die hem voeden. Eén rij zou kunnen luiden: rival.com/trail-running-shoes · top zoekwoord trail running shoes · ~8.000 geschatte bezoeken/maand. (Illustratief voorbeeld.)
Breng je eigen site in kaart
Je hebt het spiegelbeeld van je eigen pagina’s nodig. Waarom deze stap: je kunt iets pas een “gap” noemen als je zeker weet dat het aan jouw kant ontbreekt — dus je eigen kaart moet compleet zijn, anders jaag je op “gaten” die eigenlijk gewoon pagina’s zijn die je inventarisatie vergat op te sommen. Crawl de site (Screaming Frog, of een wegwerp-crawler in Python die een LLM in vijf minuten schrijft), exporteer categorieën uit je webshopplatform, lees de product feed, of parse de XML-sitemap — meestal een combinatie. Eén waarschuwing: vertrouw niet 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 elke concurrentpagina koppelen aan je dichtstbijzijnde tegenhanger. Je hebt geen 100% nauwkeurigheid nodig; je hebt de niet-gematchte rijen nodig. De output is de prijs: de pagina’s die zij hebben, die hen verkeer en rankings opleveren, en die jij simpelweg niet hebt.
Bepaal wat elke gap betekent — hier houdt het op SEO te zijn
Een gap is niet één ding. Sorteer elke gap in een bak: producten die je al verkoopt maar geen categoriepagina voor hebt → fix je landingspaginastructuur. Producten die je niet verkoopt maar je leverancier wel voert → een shortlist voor assortimentsuitbreiding met vraag eraan vast. De sterke niet-commerciële blog van een concurrent die jouw exacte doelgroep trekt → een contentstrategie. Elke bak landt bij een ander team — en meerdere ervan voeden recht in je campagnes.
Bijvoorbeeld: hun /cordless-drills-pagina trekt ~12.000 bezoeken/maand, je verkoopt accuboormachines maar alleen op een generieke /power-tools-pagina — dat is een landingspaginastructuur-fix, geen nieuwe blogpost. De volgende niet-gematchte rij, /drill-bit-buying-guide, is pure content. Dezelfde gapkaart, twee verschillende teams. (Illustratief voorbeeld.)
De match hoeft niet perfect te zijn. Mensen blijven hier hangen, wachtend op 100% precisie. Je hebt het 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.
Zie het draaien: wat elke stap daadwerkelijk uitspuugt
De vijf stappen hierboven zijn de kaart; dit is het terrein. Hieronder staat het concrete artefact dat elke stap je aanreikt — waar je letterlijk naar staart voordat je verder gaat. De vormen zijn precies wat de tools teruggeven; de rijen zijn illustratief, geen echte klant. (Illustratieve voorbeelden overal.)
Stap 1 → een concurrenten-shortlist, gescoord. Je draait de drie signalen en klapt ze samen tot één tabel. De merken die je op gevoel had genoemd, zijn niet altijd degene die alle drie overleven:
Domain Paid/Org Overlap Shared Verdict
rival-a.com yes/yes 71% 4,120 core
niche-c.com yes/yes 44% 2,300 core
rival-b.com no /yes 12% 3,880 content-only rival
bigbox.com yes/yes 9% 910 too broad — drop
Drie van de vier overleven; de megastore die “vanzelfsprekend” concurreert valt af omdat de overlap ruis is.
Stap 2 → een paginakaart met geld eraan. Voor elke overlevende concurrent geeft één API-call gerangschikte zoekwoorden én de landingspagina die elk raakt. Aggregeer per pagina en je kijkt niet langer naar zoekwoorden:
Page Keyword Pos Vol Visits/mo
/trail-shoes trail running shoe 2 18,100 ~8,000
/waterproof-jackets waterproof jacket 4 12,000 ~3,200
/blog/clean-shoes clean trail shoes 1 2,400 ~1,500
/gaiters running gaiters 6 900 ~640
Elke rij is een pagina die een concurrent echt verkeer oplevert — een doelwit, geen zoekopdracht.
Stap 3 → je eigen inventaris, en hoeveel de sitemap miste. Spiegel het voor je site uit crawl + feed + categorie-export. Het punt van vier bronnen optrekken wordt zichtbaar op het moment dat je ze telt:
Source Pages found
XML sitemap 412
Screaming Frog crawl 938
Product feed 1,205 SKUs
Category export 64
Deduped own-site map 1,010 URLs
De sitemap zag 412 pagina’s. De echte kaart telt er 1.010. De analyse leeft in de ~600 die de sitemap je nooit liet zien.
Stap 4 → de NO MATCH-rijen, gerangschikt. Geef beide inventarissen aan de LLM met de matchprompt. Hij geeft één verdict per concurrentpagina terug; je houdt alleen de gaten, gesorteerd op verkeer:
Competitor page Closest OURS Verdict Visits/mo
/trail-shoes /running-shoes MATCH —
/waterproof-jackets — NO MATCH 3,200
/blog/clean-shoes — NO MATCH 1,500
/gaiters — NO MATCH 640
Eén MATCH valt weg; drie gerangschikte gaten blijven over. Die tabel van vier rijen is de hele deliverable in embryonale vorm.
Stap 5 → de gapkaart met een eigenaar. Tag elke gap met een bak en het team waar hij landt. Nu is het geen SEO-rapport — het is een werkorder:
Gap Visits/mo Bucket Lands on
/waterproof-jackets 3,200 sell it, no LP SEO / web
/blog/clean-shoes 1,500 non-commercial Content + ads
/gaiters 640 don't stock it yet Assortment
Eén kaart, drie teams, elke rij op maat van het verkeer. Dat is het moment waarop een “content-gapanalyse” ophoudt een SEO-klusje te zijn en een teamoverstijgend plan wordt.
Semrush vs. DataForSEO: waarom het prijsverschil ertoe doet
De reden dat deze analyse van “we zouden eens” naar “we deden het” ging is de kostprijs — en het Semrush-getal dat hier telt ligt hoger dan de prijs die men citeert. Het Pro-plan van $139,95/maand draait een content-gapcheck in de interface, met de hand, met exportlimieten. Maar de analyse in dit artikel is programmatisch: één API-call per concurrentdomein, ~100k gerangschikte zoekwoorden en hun landingspagina’s per keer. Semrush zet zijn 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, ~10 units per gerangschikte-zoekwoordrij), bovenop het abonnement. DataForSEO is pay-as-you-go: een top-up van $50 gaat maanden mee, er is geen abonnement te huren of niveau te ontgrendelen, en je betaalt alleen voor de queries die je daadwerkelijk optrekt.
| Semrush | DataForSEO | |
|---|---|---|
| Prijsmodel | Vast abonnement; API daarbovenop gefactureerd | Pay-as-you-go tegoed |
| UI-instapplan | $139,95/maand (Pro), terugkerend, exportgelimiteerd | — (geen abonnement; alleen API) |
| Programmatische / API-toegang | Business $499,95/maand + API-units apart gekocht | Inbegrepen — je betaalt gewoon 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, terugkerend | Een paar euro aan tegoed |
Voor een eenmalig, diep technisch karwei 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 is niet eens in de buurt.
Twee verhalen uit twintig jaar dit doen
De mechaniek is nieuw. De zetten die ze ontgrendelen zijn er die ik twee decennia heb zien werken — ze waren alleen te bewerkelijk om op te zetten.
De kinderblog die een verkoopkanaal werd
Een klant in het kindersegment werd verslagen op een klasse queries die niets met producten te maken had. De concurrent runde een sterke blog — kleurplaten, slaapliedjes — 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: receptqueries hebben extreem zoekvolume en CPC’s op centniveau. 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 is wat de kans zichtbaar maakte en op maat bracht. (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 leider in een kleine markt zonder serieuze concurrentie om van te leren. De gapanalyse thuis geeft niets bruikbaars terug — er is niemand voor je om te kopiëren. Dus draai hem 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 zijn geschreven. Je importeert de strategieën die de leiders in een volwassen markt al hebben bewezen — categoriestructuren, invalshoeken voor content, 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
Merk op wat er net gebeurde. We begonnen met een nette SEO-taak — “vind content gaps” — en het stroomde over in assortimentsbeslissingen, betaalde campagnes, remarketing-doelgroepen en contentstrategie. Dat is geen scope creep. Dat is de werkelijke vorm van het werk.
De data was altijd op te trekken; niemand nam de moeite, omdat de handmatige kosten de opbrengst overtroffen. Nu is de pull goedkoop en is het matchen geautomatiseerd. 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.
Het deel dat je kunt jatten
Paginamatch-prompt — koppelt de pagina’s van een concurrent aan de jouwe en markeert de gaten:
You are a site-structure analyst. You get two lists of pages:
COMPETITOR (url, top keywords, estimated monthly traffic) and OURS (url, title).
For each COMPETITOR page, return the single closest OURS page, or "NO MATCH".
Then output only the NO MATCH rows, sorted by estimated traffic descending.
Match on intent and topic, not exact wording. Cross-language matches are allowed.
100% precision is not required — never invent a match to avoid "NO MATCH".Gerangschikte zoekwoorden + landingspagina’s — DataForSEO Labs, één call per concurrentdomein:
curl -s "https://api.dataforseo.com/v3/dataforseo_labs/google/ranked_keywords/live" \
-u "$LOGIN:$PASSWORD" -H "Content-Type: application/json" \
-d '[{"target":"competitor.com","location_code":2840,"language_code":"en","limit":1000}]'Drie dingen die je een verspilde middag besparen:
- Vertrouw nooit op de sitemap alleen voor je eigen kaart. Hij slaat parametrische pagina’s, gefilterde weergaven en de blog over — precies de oppervlakken waar gaten zich verschuilen. Combineer crawl + feed + categorie-export.
- Lever op “goed genoeg” matchen. De waarde zit in de niet-gematchte concurrentpagina’s; een paar verkeerde paren veranderen de shortlist niet. Polijst het model niet — handel naar de lijst.
- Draai het op een buitenlandse markt wanneer thuis te makkelijk is. Geen sterke lokale concurrent betekent geen gaten om te vinden. Leen in plaats daarvan van de sterkste markt in jouw categorie.
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 (je begint op nul). 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 euro 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 — vaak niet de merken die je zelf had genoemd.
Is dit niet gewoon SEO?
Het lijkt op SEO en is het niet. 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 — dat 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.