Moderne front-ends laden hun content client-side. Een browser voert die JavaScript uit en toont een volledige pagina. Een AI-crawler voert die JavaScript vaak niet uit en ziet een vrijwel leeg document. Je test dat zelf in vijf minuten door de broncode te bekijken en te zoeken naar een zin die op de pagina staat.
De pagina die je bezoeker ziet en de pagina die een model ziet, zijn dan niet dezelfde pagina.
Dit is het probleem dat we bij software- en SaaS-bedrijven het vaakst tegenkomen. De site is snel, ziet er goed uit en scoort netjes in de tools. En toch komt het bedrijf niet voor in het antwoord op de vraag waar het bedrijf zelf de beste uitleg over heeft.
De server stuurt eerst een HTML-document terug. Bij een React-, Vue- of Angular-app bestaat dat document vaak uit een paar regels, een lege container en een verwijzing naar een JavaScript-bundel.
Je browser haalt die bundel op, voert hem uit, praat met je API en bouwt de pagina op. Dat gaat in milliseconden. Je merkt er niets van.
Een AI-crawler stopt eerder. Hij pakt het HTML-document, leest de tekst die erin staat en gaat verder. Wat de bundel later zou hebben opgebouwd, komt nooit in het model terecht.
Een assistent kiest daarna een handvol bronnen en vat die samen. Er is geen tweede pagina waar je alsnog opduikt.
Dit is de test die iedereen kan doen, zonder developer en zonder tooling.
Eén valkuil. "Inspecteren" of "Element inspecteren" is deze test niet. Dat paneel toont de pagina nadat JavaScript heeft gedraaid, dus daar staat altijd alles in. Alleen "Paginabron weergeven" laat zien wat de server werkelijk stuurde.
Doe de test op vijf pagina's. Je homepage, je belangrijkste productpagina, je prijzenpagina, één documentatiepagina en je changelog. De uitkomst per pagina verschilt vaker dan je verwacht.
In Chrome open je Instellingen, dan Privacy en beveiliging, dan Site-instellingen, dan JavaScript, en daar zet je hem op blokkeren. Via de DevTools kan het ook, met het commandomenu en de optie om JavaScript uit te schakelen.
Herlaad daarna de pagina. Wat je overhoudt, benadert wat een crawler binnenkrijgt.
Blijft er een lege pagina of een spinner staan, dan weet je genoeg. Blijft de tekst staan en verdwijnt alleen wat animatie, dan zit de basis goed. Zet JavaScript daarna weer aan.
De derde manier haalt de pagina op zonder browser. Je dev-team doet dat met één commando, bijvoorbeeld curl https://jouwdomein.nl/prijzen. Er zijn ook publieke diensten die een URL als platte tekst teruggeven.
Wat je terugkrijgt, is de pagina zoals een machine hem leest. Kopjes, alinea's, links en verder niets.
Lees dat door met één vraag in je hoofd. Kan iemand die alleen deze tekst heeft, jouw product uitleggen?
Je hoeft je front-end niet weg te gooien. Er zijn drie routes, en welke past hangt af van je stack.
| Route | Wat het betekent | Past bij |
|---|---|---|
| Server-side rendering | De server bouwt de HTML compleet op en stuurt die naar browser en crawler | Content die vaak wijzigt, zoals prijzen en changelogs |
| Static generation | Bij elke build maakt je systeem kant-en-klare HTML-pagina's | Documentatie, blog, marketingpagina's |
| Dynamic rendering | Een crawler krijgt een voorgerenderde versie, een bezoeker de app | Bestaande apps waar de eerste twee routes te veel werk zijn |
Dit is de brief die je aan je dev-team geeft. Welke van deze drie past bij ons, per paginatype, en wat kost het.
Bij dynamic rendering geldt één harde grens. Een crawler mag een andere rendering krijgen, nooit andere inhoud. Zodra de voorgerenderde versie extra tekst, extra keywords of andere claims bevat dan wat je bezoeker ziet, is het cloaking. Daar zijn zoekmachines en AI-platformen streng in, en het risico staat niet in verhouding tot de winst.
De klassieker. Een bedrijf rendert de marketingpagina's server-side en laat de documentatie en de changelog client-side staan. De homepage is leesbaar en de rest van de site is stil.
Precies die documentatie beantwoordt de vragen waarop je gevonden wilt worden. Hoe koppel je systeem X met Y. Welke velden synchroniseren. Wat verandert er in versie 4. Dat zijn de vragen die iemand aan ChatGPT stelt, en jouw antwoord staat achter een JavaScript-bundel.
De tweede fout is Google als bewijs gebruiken. Googlebot rendert JavaScript, dus je pagina staat gewoon in de zoekresultaten. Dat zegt niets over GPTBot, ClaudeBot, PerplexityBot of CCBot.
De derde zien we bij cookiebanners en A/B-tools. Die injecteren de content pas na toestemming. Een crawler geeft geen toestemming, dus die krijgt de lege variant.
Vaak niet. Content die alleen client-side laadt, is voor die crawlers niet zichtbaar. Daarom zegt de ruwe HTML meer over je AI-vindbaarheid dan wat je in de browser ziet.
Nee. Googlebot rendert JavaScript, en de AI-crawlers doen dat vaak niet. Een goede positie in Google zegt daarom niets over de vraag of GPTBot of ClaudeBot je tekst heeft gelezen.
Ja, zolang de inhoud identiek is. Andere rendering mag, andere inhoud is cloaking. Houd één bron voor je teksten aan, dan kan het verschil niet ontstaan.
Test 1 op je vijf belangrijkste pagina's kost een kwartier en levert een lijstje op waar je dev-team meteen mee vooruit kan. Wil je de volledige stand van je site, dan staat de gratis AI-zichtbaarheidsscan klaar op /geo-scanner/. Een audit-call kun je aanvragen via /contact.
Je kunt het gratis laten meten in vier assistenten. Je ziet op welke vragen je gemist wordt en welke concurrenten er nu in het antwoord staan.