Waarom techniek de bottleneck is van GEO
Je hebt uitstekende productomschrijvingen geschreven. Je FAQ-sectie is volledig en citeerbaar. Je JSON-LD schema is foutloos. En toch scoort je site laag in AI-citaties.
In 40% van de GEO-audits die we analyseerden was de oorzaak niet de contentkwaliteit — maar een technisch probleem dat voorkwam dat AI-crawlers de content überhaupt lazen. Geblokkeerde crawlers, ongerenderde JavaScript, ontbrekende sitemaps: ze maken al je content-inspanningen onzichtbaar.
Als je robots.txt GPTBot blokkeert, krijg je geen foutmelding. ChatGPT citeert je simpelweg nooit — en je weet niet waarom. Technische GEO-problemen zijn onzichtbaar totdat je actief gaat zoeken.
Een technische GEO audit richt zich op zes gebieden: robots.txt configuratie, XML sitemaps, schema-validatie, JavaScript rendering, canonical URLs, en page speed. Dit artikel behandelt elk gebied met concrete controles en fixes.
Gebied 1: robots.txt — AI-crawlers toegang geven
Het robots.txt bestand is het eerste dat AI-crawlers lezen wanneer ze je site bezoeken. Een verkeerde configuratie blokkeert de crawler volledig — en er is geen waarschuwing of foutmelding in je analytics.
De AI-crawlers die je moet kennen
| AI-service | Crawler naam | Wat het doet | Impact op GEO |
|---|---|---|---|
| ChatGPT / OpenAI | GPTBot |
Traint nieuwe modellen + live web search | Kritisch |
| Perplexity AI | PerplexityBot |
Real-time web search voor antwoorden | Kritisch |
| Anthropic Claude | ClaudeBot |
Traint Claude modellen | Hoog |
| Google AI Overviews | Google-Extended |
Bard/Gemini training + AI Overviews | Kritisch |
| Microsoft Copilot | Bingbot |
Bing index wordt gebruikt door Copilot | Hoog |
| Meta AI | meta-externalagent |
Training Meta AI modellen | Medium |
Hoe je robots.txt te controleren
Ga naar jouwdomein.nl/robots.txt en zoek op:
1. Universele blokkade: User-agent: * / Disallow: / — blokkeert alles, inclusief alle AI-crawlers.
2. Expliciete AI-blokkade: User-agent: GPTBot / Disallow: / — blokkeert ChatGPT-crawlers.
3. Brede wildcard: User-agent: *Bot / Disallow: / — pakt ook PerplexityBot, ClaudeBot etc.
4. Ontbrekende sitemap-verwijzing: Geen Sitemap: regel in robots.txt.
Correcte robots.txt voor maximale AI-zichtbaarheid
# Standaard zoekmachines
User-agent: *
Allow: /
Disallow: /checkout/
Disallow: /account/
Disallow: /cart/
Disallow: /admin/
# AI-crawlers expliciet toestaan (overschrijft eventuele beperkingen)
User-agent: GPTBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: meta-externalagent
Allow: /
# Sitemap-locaties
Sitemap: https://jouwdomein.nl/sitemap.xml
Sitemap: https://jouwdomein.nl/sitemap-products.xml
Gebied 2: XML sitemaps — Crawlbaarheid sturen
Een XML sitemap vertelt AI-crawlers welke pagina's er zijn, wanneer ze voor het laatst zijn bijgewerkt, en hoe belangrijk ze zijn. Zonder sitemap moet een crawler je site volledig doorzoeken om content te vinden — wat betekent dat nieuwe en diep-geneste pagina's mogelijk nooit worden bezocht.
Sitemap best practices voor AI-crawlbaarheid
Gebruik een sitemap-index met aparte sitemaps per type
Splits in sitemap-products.xml, sitemap-categories.xml, sitemap-blog.xml. AI-crawlers kunnen dan prioriteit geven aan productpagina's zonder alle blogs te moeten doorzoeken.
Altijd lastmod bijwerken
Gebruik de werkelijke laatste-wijzigingsdatum, niet een vaste datum. AI-crawlers gebruiken lastmod om te beslissen welke pagina's opnieuw gecrawld moeten worden. Verouderde of statische datums worden genegeerd.
Sluit niet-citeerbare pagina's uit
Sluit uit: checkout, account, winkelwagen, intern zoekresultaten (?s=, ?q=), gedupliceerde content (print-versies), en pagina's met noindex-tag. Elke onnodige URL verspilt crawl budget.
Dien sitemap in bij alle zoekmachines
Google Search Console, Bing Webmaster Tools (voor Copilot), en voeg sitemap-URL toe aan robots.txt. 28% van sites mist Bing-indiening, waardoor Copilot nooit deze pagina's citeert.
Controleer op 404's in je sitemap
Gebruik Screaming Frog of de sitemap-validator in Google Search Console om sitemap-URLs met 404 of redirect te detecteren. AI-crawlers die op 404's stuiten, verlagen de betrouwbaarheidsscore van je domein.
Gebied 3: Schema-validatie — Geen syntaxfouten
Schema markup met syntaxfouten heeft geen effect. Sterker nog: foutieve JSON-LD kan ertoe leiden dat Google Rich Results compleet uitschakelt voor die pagina. Validatie is niet optioneel — het is de kwaliteitscontrole die bepaalt of je werk telt.
Drie validators die je moet gebruiken
| Validator | URL | Wat het controleert | Gebruik voor |
|---|---|---|---|
| Schema.org Validator | validator.schema.org |
JSON-LD syntax, onbekende properties, type-conformiteit | Technische correctheid |
| Google Rich Results Test | search.google.com/test/rich-results |
Google-ondersteunde schema-types, rich result preview | Google AI Overviews |
| Bing Markup Validator | Bing Webmaster Tools → Markup | Bing-specifieke interpretatie van schema | Microsoft Copilot |
De 8 meest voorkomende schema-validatiefouten
| Fout | Voorbeeld | Fix | Frequentie |
|---|---|---|---|
| Missend verplicht veld | Product zonder name of offers |
Voeg minimale verplichte velden toe | 43% |
| Ongeldige @type | "@type": "Webshop" (bestaat niet) |
Gebruik schema.org/types voor geldige typen | 31% |
| @id verwijst nergens heen | "@id": "/#org" maar nooit gedefinieerd |
Zorg dat @id-waarden consistent zijn in alle schema's | 28% |
| Prijs als string i.p.v. number | "price": "€29.99" |
"price": 29.99 + priceCurrency: "EUR" |
25% |
| Meerdere schema's conflicteren | Plugin + thema genereren beide Product schema | Deactiveer dubbele schema-generators | 22% |
| JSON syntaxfout | Ontbrekende komma, dubbele aanhalingstekens | Gebruik jsonlint.com om te debuggen | 18% |
| Afbeelding URL relatief | "image": "/images/product.jpg" |
Gebruik absolute URL: https://domein.nl/images/product.jpg |
15% |
| AggregateRating zonder reviews | Rating 5/5 op pagina zonder reviews | Alleen implementeren als er echte beoordelingen zijn | 12% |
Gebied 4: JavaScript rendering — Onzichtbare content
Dit is het meest onderschatte technische GEO-probleem. De meeste AI-crawlers — inclusief GPTBot, PerplexityBot en ClaudeBot — crawlen geen JavaScript-gegenereerde content. Ze downloaden de ruwe HTML-response en stoppen daar.
Als je een React, Vue of Angular webshop hebt die productdata via de API laadt, ziet AI-crawlers een lege pagina. Je JSON-LD, productbeschrijvingen, FAQ-blokken — alles wat via JavaScript wordt gerenderd is onzichtbaar voor de meeste AI-crawlers.
Hoe je JS-rendering problemen detecteert
Test met curl (simuleer bot-gedrag)
Voer curl -A "GPTBot/1.0" https://jouwdomein.nl/product/1 uit. Als de output geen productdata bevat maar alleen een lege div of loading-skeleton, heb je een JS-rendering probleem.
Gebruik "View Source" (niet Inspect Element)
Rechtsklik → "Paginabron bekijken" toont de ruwe HTML die crawlers ontvangen. Als je productbeschrijving hier niet staat maar wel zichtbaar is in de browser, wordt hij via JavaScript geladen.
Controleer JSON-LD in de paginabron
Zoek in "Paginabron" naar <script type="application/ld+json">. Als dit er niet instaat maar je schema-plugin het wel genereerd, wordt je schema via JavaScript geïnjecteerd — onzichtbaar voor AI.
Oplossingen per platform
| Situatie | Oplossing | Moeilijkheidsgraad |
|---|---|---|
| Shopware 6 standaard | Twig-templates renderen server-side — geen probleem. Schema in Twig voegen is veilig. | Geen actie |
| WooCommerce standaard | PHP-rendering is server-side — veilig. Schema via functions.php is veilig. | Geen actie |
| Headless Shopware (Vue Storefront) | Implementeer SSR of SSG. Gebruik Nuxt.js of Next.js met useServerHead() voor schema. |
Complex |
| React/Next.js shop | Gebruik getServerSideProps of getStaticProps voor data. Voeg JSON-LD toe in <Head>. |
Gemiddeld |
| Shopify standaard | Liquid-templates zijn server-side. Schema via theme.liquid of snippets is veilig. | Geen actie |
| Schema-plugin laadt JS | Vervang door server-side implementatie. Check paginabron na installatie. | Gemiddeld |
Gebied 5: Canonical URLs — Duplicate content voorkomen
Canonical tags vertellen AI (en zoekmachines) welke pagina de "echte" versie is bij meerdere URLs met vergelijkbare content. Webshops zijn bijzonder gevoelig: gefilterde categoriepagina's (?color=rood), gesorteerde pagina's (?sort=prijs), en gepagineerde overzichten genereren automatisch duplicate content.
Als AI-crawlers dezelfde content op 50 verschillende URLs tegenkomen (productpagina met 50 filteropties), verdeelt de autoriteit zich over al die URLs. Geen enkele URL wordt als autoriteit gezien. De canonical tag vertelt AI: "dit is de hoofdpagina, consolideer al het gezag hier."
Canonical checklist per pagina-type
| Pagina-type | Canonical moet verwijzen naar | Veelgemaakte fout |
|---|---|---|
| Productpagina | Zichzelf (self-referencing canonical) | Ontbrekende canonical → duplicate via faceted navigation |
| Categorie met filters | Basis categorie-URL zonder filterparameters | ?color=rood&size=L heeft eigen canonical i.p.v. basis-URL |
| Pagina 2+ van categorie | Elke pagina verwijst naar zichzelf (niet naar pagina 1) | Pagina 2 heeft canonical van pagina 1 → AI ziet pagina 2 als duplicate |
| Product met varianten | Hoofdproductpagina (rood/blauw/groen → /product/naam) | Elke kleurvariant heeft aparte URL zonder canonical |
| Blogpost | Zichzelf (self-referencing canonical) | Geen canonical → AMP-versie of print-versie telt als duplicate |
Gebied 6: Page speed — Crawl budget en betrouwbaarheid
Page speed heeft twee GEO-effecten: direct (crawl budget) en indirect (betrouwbaarheidssignaal). Trage sites worden minder frequent en minder diep gecrawld. Bovendien signaleert lage performance dat een site minder actueel en onderhouden is — een negatief autoriteitsignaal.
De kritieke drempelwaarden
| Metriek | Goed | Acceptabel | Problematisch voor GEO |
|---|---|---|---|
| TTFB (Time to First Byte) | < 200ms | 200–500ms | > 800ms |
| LCP (Largest Contentful Paint) | < 2.5s | 2.5–4s | > 4s |
| Paginagrootte (HTML) | < 100KB | 100–200KB | > 500KB |
| Server response code | 200 | 301 redirect (max 1x) | Redirect chain >2 stappen |
Quick wins voor page speed
Afbeeldingen optimaliseren
- Converteer JPEG/PNG naar WebP of AVIF formaat
- Gebruik lazy loading voor afbeeldingen buiten viewport
- Voeg width + height attributen toe (voorkomt layout shift)
- Comprimeer met TinyPNG of Squoosh voor productfoto's
Caching configureren
- Stel Cache-Control headers in: max-age=86400 voor statische assets
- Activeer browser caching voor CSS, JS, fonts
- Gebruik een CDN voor afbeeldingen en statische bestanden
- Schakel serverside page caching in (Varnish, Redis, WordPress Transients)
HTML/CSS/JS minimaliseren
- Minificeer CSS en JavaScript (verwijder whitespace en comments)
- Verwijder ongebruikte CSS (PurgeCSS, Tailwind tree-shaking)
- Defer niet-kritieke JavaScript met defer of async
- Schakel gzip of Brotli compressie in op de server
Prioriteitenmatrix: Wat eerst aanpakken
Niet alle technische problemen hebben dezelfde impact. Gebruik deze matrix om je audit-acties te prioriteren op basis van impact × moeite.
DIRECT DOEN — Hoge impact, lage moeite
- robots.txt controleren op AI-blokkade
- Sitemap-URL toevoegen aan robots.txt
- Schema valideren met Rich Results Test
- Sitemap indienen bij Bing Webmaster
- Afbeeldingen comprimeren (WebP)
INPLANNEN — Hoge impact, hogere moeite
- SSR implementeren voor headless shops
- Canonical URLs op alle pagina's fixen
- Schema-plugin conflicten oplossen
- Sitemap-index structuur opzetten
- CDN configureren voor assets
HANDIG — Lage impact, lage moeite
- Meta-externalagent toestaan in robots.txt
- Lazy loading toevoegen aan afbeeldingen
- HTML minificeren
- width/height op alle img-tags
LATER — Lage impact, hoge moeite
- Edge caching/CDN voor HTML pages
- HTTP/3 implementatie
- Advanced image optimization pipeline
- Full infrastructure overhaul
De complete technische GEO audit checklist
Technische GEO Audit — 30 controlepunten
- robots.txt bereikbaar op /robots.txt (HTTP 200)
- Geen
Disallow: /voor User-agent: * zonder uitzonderingen - GPTBot niet geblokkeerd (check voor
User-agent: GPTBot / Disallow: /) - PerplexityBot en ClaudeBot niet geblokkeerd
- Sitemap-URL staat vermeld in robots.txt
- Sitemap bereikbaar en valideert zonder fouten
- Alle categorie- en productpagina's opgenomen
- lastmod-datums zijn actueel en variëren per pagina
- Sitemap ingediend bij Google Search Console
- Sitemap ingediend bij Bing Webmaster Tools
- Alle schema's valideren in validator.schema.org zonder fouten
- Google Rich Results Test: geen fouten op homepage
- Google Rich Results Test: geen fouten op representatieve productpagina
- Geen dubbele schema-generatie (meerdere plugins)
- Alle @id-waarden zijn consistent en uniek
- Afbeelding-URLs in schema zijn absoluut (https://)
- Paginabron bevat productnaam en -beschrijving (niet alleen via JS)
- JSON-LD staat in de HTML-bron, niet geïnjecteerd via JavaScript
- FAQ-content zichtbaar in paginabron
- Headless shops gebruiken SSR of SSG
- curl-test met GPTBot user-agent geeft complete content terug
- Alle productpagina's hebben self-referencing canonical
- Categoriepagina's met filters hebben canonical naar basis-URL
- Geen canonical-conflicts (meerdere canonical-tags per pagina)
- Canonical-URLs zijn consistent met sitemap-URLs (geen /)−conflict)
- TTFB < 500ms (meten: WebPageTest of GTmetrix)
- LCP < 4s op productpagina's
- Geen redirect chain langer dan 2 stappen op hoofdpagina's
- Alle productafbeeldingen hebben width + height attributen
- Gzip of Brotli compressie actief op HTML responses
4-weekse technische GEO audit roadmap
- robots.txt auditen op AI-blokkades
- Sitemap controleren en updaten
- Sitemap indienen bij Bing Webmaster
- Quick wins in robots.txt doorvoeren
- Alle schema's valideren (validator.schema.org)
- Rich Results Test: homepage + 5 producten
- Schema-fouten prioriteren en fixen
- Dubbele schema-generatoren uitschakelen
- Paginabron vs. browser vergelijken (10 pagina's)
- JS-rendering problemen identificeren
- Canonical audit op top-50 pagina's
- Filter-URL canonicals fixen
- PageSpeed Insights: alle pagina-types meten
- Afbeeldingen converteren naar WebP
- Caching configureren (browser + server)
- GEO-score meten na alle fixes
Veelgemaakte technische GEO fouten
| Fout | Oorzaak | Gevolg | Fix |
|---|---|---|---|
| robots.txt blokkeert AI na security update | Beveiligingsplugin voegt automatisch Disallow: / toe voor nieuwe bots |
AI-crawlers plots geblokkeerd zonder dat je het weet | Na elke security-plugin update robots.txt controleren |
| Schema-plugin update breekt JSON-LD | Plugin-update introduceert nieuwe syntax of verwijdert velden | Rich Results uitgeschakeld, AI-crawlers negeren schema | Rich Results Test automatisch na elke plugin-update |
| Migratie naar headless zonder SSR | Overstap naar Vue/React zonder server-side rendering | Alle content onzichtbaar voor AI-crawlers | SSR implementeren vóór go-live, niet achteraf |
| Sitemap bevat niet-bestaande URLs | Verwijderde producten blijven in sitemap staan | AI-crawlers stuiten op 404's, betrouwbaarheid daalt | Automatische sitemap-generatie die 404's uitsluit |
| CDN cachet robots.txt te lang | robots.txt geüpdated, CDN serveert nog oud bestand | Fixes aan robots.txt worden niet direct zichtbaar | Cache-Control voor robots.txt: max-age max 1 dag |
Webshops die alle 6 technische gebieden aanpakken zien gemiddeld +18 punten GEO-score stijging in de eerste 4 weken — zonder een woord content te veranderen. De technische laag is de multiplier die al je content-werk zichtbaar maakt voor AI.
Veelgestelde vragen over technische GEO audits
Blokkeer ik per ongeluk AI-crawlers met mijn robots.txt?
Dit is het meest voorkomende technische GEO-probleem: 34% van de websites blokkeert één of meer AI-crawlers onbedoeld. Check je robots.txt op Disallow: / voor User-agent: * (blokkeert alles), of expliciete blokkades voor GPTBot, ClaudeBot of PerplexityBot. Voeg per AI-crawler een expliciete Allow: / toe als je indexatie wilt. Gebruik nooit Disallow: / als standaard voor onbekende bots zonder uitzonderingen.
Hoe weet ik of mijn schema markup correct gevalideerd is?
Gebruik drie gratis validators: (1) validator.schema.org voor technische correctheid en onbekende properties, (2) Google Rich Results Test voor Google-ondersteunde schema-types met preview, en (3) Bing Webmaster Tools Markup Validator voor Copilot-ondersteuning. Controleer op missende verplichte velden, syntaxfouten, onjuiste nesting, en @id-koppelingen die nergens heen verwijzen.
Waarom is JavaScript een probleem voor AI-crawlers?
De meeste AI-crawlers gebruiken geen volledig JavaScript-rendering engine. Ze downloaden de ruwe HTML en verwerken eventueel eenvoudige scripts, maar complexe JavaScript-frameworks resulteren in lege of incomplete pagina's voor AI. Als je structured data, productbeschrijvingen of FAQ-content via JavaScript laadt, ziet AI er niets van. Oplossing: gebruik Server-Side Rendering (SSR) of Static Site Generation (SSG), of zorg dat alle kritieke content in de initiële HTML-response zit.
Heeft jouw site technische GEO-problemen?
Onze gratis scan controleert automatisch op geblokkeerde AI-crawlers, schema-validatiefouten, JavaScript-renderingproblemen en meer — en geeft je een concrete GEO-score met prioriteiten.
Gratis technische GEO-scan →