# AI-crawlers voeren geen JavaScript uit

> GPTBot, ClaudeBot en PerplexityBot lezen ruwe HTML en voeren nooit scripts uit. Zo test u of uw catalogus zichtbaar is - en lost u het op zonder rewrite.

**Language:** nl  
**Published:** 2026-08-09  
**Category:** Technical · **Tags:** AI crawlers, JavaScript rendering, server-side rendering, GPTBot, structured data, product data  
**Canonical:** https://partsgraph.ai/nl/blog/ai-crawlers-do-not-run-javascript

## In het kort

**Voeren AI-crawlers zoals GPTBot en ClaudeBot JavaScript uit?**

Nee. Een gezamenlijke analyse van Vercel en MERJ, over een netwerk dat in één maand 569 miljoen GPTBot-requests afhandelde, vond geen enkele aanwijzing dat GPTBot, ClaudeBot, PerplexityBot of de crawler van Meta JavaScript uitvoeren: ze parsen de ruwe HTML die de server teruggeeft en gooien de scripts weg. Google is de uitzondering, omdat Gemini de renderinfrastructuur van Googlebot erft. Bouwt uw parametrische catalogus de productdata client-side op, dan ziet een AI-assistent een lege huls waar uw specificaties zouden moeten staan.

---

## Het korte antwoord

AI-crawlers voeren geen JavaScript uit. Wanneer GPTBot, ClaudeBot of PerplexityBot een pagina opvraagt, doet de crawler een gewone HTTP GET, neemt de bytes die de server teruggeeft en parseert die als tekst. Er is geen browser, geen DOM-opbouw, geen hydration en geen wachten tot XHR-aanroepen zijn afgerond. Een gezamenlijke analyse van Vercel en MERJ, over een netwerk dat in één maand 569 miljoen GPTBot-requests en 370 miljoen ClaudeBot-requests afhandelde, vond geen enkele aanwijzing dat welke grote AI-crawler dan ook JavaScript uitvoert. De crawlers downloaden soms wel scriptbestanden — GPTBot haalde JavaScript op in 11,50% van de requests, ClaudeBot in 23,84% — om ze vervolgens nooit uit te voeren.

> **Figure.** What a browser receives versus what an AI crawler receives for the same product page.

Google is de uitzondering, en dat is de reden dat zoveel teams het probleem niet hebben opgemerkt. Googlebot draait een headless Chromium-renderservice, en Gemini is op die infrastructuur gegrond. Een client-side gerenderde parametrische catalogus kan dus prima scoren in Google Search en tegelijk volledig ontbreken in ChatGPT, Claude en Perplexity. Dat is allang niet meer hetzelfde publiek: uit het kopersonderzoek van Forrester uit 2026 blijkt dat **94% van de zakelijke inkopers inmiddels AI gebruikt tijdens het inkoopproces**, en Adobe mat dat AI-verwezen verkeer naar retailsites in Q1 2026 met **393% jaar op jaar groeide**.

## Wat GPTBot daadwerkelijk binnenkrijgt

Het helpt om precies te zijn over de twee documenten die hierbij een rol spelen, want de meeste catalogusteams kijken alleen ooit naar het tweede.

De **ruwe HTML** is de bytestroom die de origin-server naar de respons schrijft. Het is wat `curl` afdrukt, wat `view-source:` toont en wat een HTTP-client zonder browser parseert.

De **gerenderde DOM** is wat er in het geheugen bestaat nadat de browser die HTML heeft geparseerd, elk script heeft gedownload en uitgevoerd, elke `fetch()`-aanroep heeft afgehandeld en elke mutatie heeft toegepast. Het is wat het Elements-paneel van uw browser-devtools laat zien.

In een moderne SPA-catalogus hebben die twee documenten vrijwel niets gemeen. De ruwe HTML is een huls: een `<div id="root">`, een preload-manifest en honderd kilobyte aan bundleverwijzingen. Elke betekenisvolle waarde — artikelnummer, behuizing, tolerantie, bedrijfstemperatuurbereik, RoHS-status, lifecycle-status, voorraad, staffelprijs — arriveert later, via een API-aanroep die de crawler nooit zal doen.

> Een AI-crawler ziet uw ruwe HTML en verder niets. Staat een specificatie niet in de bytes die de server teruggeeft, dan bestaat die specificatie niet voor het model.

## Welke clients renderen en welke niet

| Client | Aanbieder | Voert JavaScript uit | Waarvoor het dient |
|---|---|---|---|
| GPTBot | OpenAI | Nee | Verzamelen van trainingsdata |
| OAI-SearchBot | OpenAI | Nee | Zoekindexering voor ChatGPT |
| ChatGPT-User | OpenAI | Nee | Live ophalen bij een vraag van een gebruiker |
| ClaudeBot | Anthropic | Nee | Verzamelen van trainingsdata |
| PerplexityBot | Perplexity | Nee | Zoekindexering |
| Meta-ExternalAgent | Meta | Nee | Training en indexering |
| Bytespider | ByteDance | Nee | Verzamelen van trainingsdata |
| Googlebot | Google | **Ja**, headless Chromium | Zoeken, en grounding voor Gemini |
| Applebot | Apple | **Ja**, kan in een browser renderen | Siri, Spotlight, Safari |

Elke "Nee" in die tabel is gemeten gedrag uit de dataset van Vercel en MERJ, geen aanname. Elke "Ja" is door de aanbieder gedocumenteerd: Google publiceert zijn renderpijplijn, en de eigen crawlerdocumentatie van Apple stelt dat Applebot "de inhoud van uw website in een browser kan renderen". De nieuwere Claude-SearchBot- en Claude-User-agents van Anthropic dateren van na het onderzoek en zijn niet apart gemeten; sindsdien heeft geen enkele aanbieder voor deze agents een renderpijplijn aangekondigd.

Het praktische gevolg is op een onhandige manier asymmetrisch. Renderen is het dure deel van crawlen, en juist de aanbieders die het hebben overgeslagen, staan nu tussen uw product en uw koper in.

## Waarom parametrische catalogi harder onderuitgaan dan al het andere

In de analyse van Adobe van april 2026 werden retailpagina's beoordeeld op machineleesbaarheid; productdetailpagina's kwamen uit op **66% — de laagste score van alle paginatypen**, onder homepages (75%), categoriepagina's (74%) en zelfs FAQ-pagina's (80%). Die volgorde is geen toeval. Juist de pagina's met de meest gestructureerde, meest waardevolle en voor de beslissing meest relevante data zijn gebouwd met de meeste JavaScript.

Vijf patronen veroorzaken het grootste deel van de schade:

1. **De filterstatus zit in de client.** Uw parametrische selector is een React-component die uit een lokale store leest. Er bestaat geen server-gerenderde URL voor "0603, 100nF, X7R, 50V", dus er is niets voor een crawler om op te halen en niets om te citeren.
2. **De specificatietabel is een API-respons.** De paginahuls rendert, waarna een request naar `/api/product/attributes` de tabel vult. De crawler komt niet verder dan de huls.
3. **Prijs en beschikbaarheid staan bewust client-side.** Verstandig voor caching. Fataal voor machinezichtbaarheid, want een model dat de voorraad niet kan zien, zal het onderdeel niet aanbevelen.
4. **Tabbladen en accordeons laden hun inhoud pas later.** Datasheets, application notes, compliancecertificaten en CAD-links worden doorgaans pas bij een klik geladen. Een crawler klikt nooit.
5. **Infinite scroll vervangt paginering.** Vanaf product 51 is er domweg geen crawlbare URL meer.

Partsgraph heeft in augustus 2026 wereldwijd 984 domeinen van distributeurs en fabrikanten geaudit — in Noord-Amerika, Europa en Azië. De mediane AI-zichtbaarheidsscore was **50 van de 100**, en **70% van het cohort kreeg een D of F**. Ongeveer de helft kon geen enkele leesbare cataloguspagina serveren aan een standaardclient zonder browser. Elektronicadistributie was het zwakste segment, met een mediaan van 34.

## Hoe test ik of AI-crawlers mijn catalogus kunnen lezen?

Doe dit tegen uw eigen origin. De site van een concurrent testen door een crawler-user-agent te spoofen levert vals-negatieven op, want enterprise bot managers verifiëren crawlers op bron-IP en niet op de user-agentstring — een vervalste header vanaf een onbekend adres krijgt hoe dan ook een challenge, ongeacht wat robots.txt zegt.

1. **Haal de ruwe HTML op.** Kies uw allerwaardevolste productpagina.

```
curl -sS --compressed -o page.html -w "status=%{http_code} bytes=%{size_download}" "https://example.com/products/part-number"
```

2. **Zoek het artikelnummer in de bytes.** Niet in de browser — in het bestand.

```
grep -c "MPN-12345" page.html
```

Als dit `0` teruggeeft, kan geen enkele AI-crawler de pagina herkennen als een pagina over dat onderdeel.

3. **Zoek drie parametrische waarden** waarvan u verwacht dat een engineer erop filtert.

```
grep -oiE "operating temperature|tolerance|package|rohs|lifecycle" page.html | sort | uniq -c
```

4. **Tel de blokken met gestructureerde data.**

```
grep -c "application/ld+json" page.html
```

Nul betekent dat er geen machineleesbaar productrecord is. Eén of meer betekent dat u het moet uitlezen en controleren of het daadwerkelijk `sku`, `mpn`, `gtin`, `brand`, `offers` en uw belangrijkste `additionalProperty`-vermeldingen bevat, en niet slechts een kruimelpad.

5. **Vergelijk met de gerenderde pagina.** Open dezelfde URL in een browser met JavaScript uitgeschakeld. Wat overblijft, is ruwweg wat een crawler krijgt. Het verschil tussen dat en de normale pagina is uw onzichtbaarheid.

6. **Controleer het hele pad, niet één pagina.** Herhaal dit voor een categoriepagina, een zoekresultatenpagina, een datasheetlink en een CAD-download. Een crawler die een productpagina wél kan lezen maar die niet kan bereiken vanuit een crawlbaar categorieoverzicht, komt alsnog niet verder.

Een pagina die slaagt, toont het artikelnummer tientallen keren, heeft de parametrische labels als tekst aanwezig en bevat minstens één JSON-LD-blok. Ter referentie: een goed gebouwde productpagina levert doorgaans 60–200 KB HTML met de volledige specificatietabel; een kapotte SPA-huls levert 4–15 KB met niets anders dan bundleverwijzingen.

## Hoe lost u dit op zonder de site te herbouwen?

U hoeft niet naar een ander platform over te stappen. De bytes bij de origin moeten de feiten bevatten. Er zijn vier routes, en die sluiten elkaar niet uit.

| Aanpak | Inspanning | Wat het oplost | Belangrijkste risico |
|---|---|---|---|
| Server-side rendering van productroutes | Hoog | Alles, blijvend | Kosten van platformmigratie en regressierisico |
| Prerender / dynamic rendering | Gemiddeld | Content in de ruwe HTML | Verouderde cache bij prijs en voorraad |
| Server-gerenderde JSON-LD | Laag | Machineleesbare feiten | Wordt genegeerd als de bodytekst leeg blijft |
| Markdown-mirror en overlaylaag | Laag | Content, documentatie en toegang voor agents | Canonieke links moeten onderhouden worden |

**Server-side rendering** van product- en categorieroutes is het duurzame antwoord. Draait u al op een framework dat dit ondersteunt, dan is het verplaatsen van de catalogusroutes naar servercomponenten of statische generatie met incrementele revalidatie meestal een kwestie van weken, niet van kwartalen, want de datalaag bestaat al — die wordt alleen vanaf de verkeerde kant aangeroepen.

**Prerendering** is de eerlijke tussenoplossing. Render elke productpagina één keer bij de build of volgens een schema, cache de HTML aan de edge en serveer die aan iedereen. Serveer mensen en machines hetzelfde document; crawlers via cloaking een andere pagina voorschotelen is zowel een beleidsrisico als, in de praktijk, contraproductief, want het model citeert nu eenmaal de versie die het heeft ontvangen.

**Server-gerenderde JSON-LD** is de wijziging met de meeste impact bij de minste inspanning. Zet die in de HTML die de server uitstuurt, niet in een tagmanager.

```
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "sku": "MPN-12345",
  "mpn": "MPN-12345",
  "name": "100 nF 50 V X7R 0603 ceramic capacitor",
  "brand": { "@type": "Brand", "name": "Example Components" },
  "additionalProperty": [
    { "@type": "PropertyValue", "name": "Capacitance", "value": "100 nF" },
    { "@type": "PropertyValue", "name": "Voltage rating", "value": "50 V" },
    { "@type": "PropertyValue", "name": "Dielectric", "value": "X7R" },
    { "@type": "PropertyValue", "name": "Operating temperature", "value": "-55 to +125 C" }
  ],
  "offers": {
    "@type": "Offer",
    "priceCurrency": "USD",
    "price": "0.042",
    "availability": "https://schema.org/InStock"
  }
}
</script>
```

**Een markdown-mirror** is de goedkoopste manier om een pagina ondubbelzinnig te maken. Serveer van elke productpagina een equivalent in platte tekst op een stabiele, gelinkte URL, met de specificatietabel als markdown-tabel. Clients die alleen tekst lezen, parsen dat feilloos, genereren uit dezelfde databron kost vrijwel niets, en het geeft u een canoniek machineoppervlak dat niet gaat afwijken zodra de front-end wordt herontworpen. Let op: `llms.txt` is dit niet: tot dusver heeft in 2026 geen enkele grote AI-aanbieder toegezegd het te lezen, en het Search Relations-team van Google heeft er expliciet geen steun aan willen geven. Mirrors werken juist omdat het gewone, gelinkte pagina's zijn.

**Een overlay** zet dit alles vóór de bestaande site in plaats van erin. Een sidecar-service of edge worker serveert server-gerenderde, voor agents leesbare pagina's, JSON-LD, markdown-mirrors en een gehost MCP-endpoint op uw eigen domein, en leest daarbij uit uw bestaande PIM. Aan de klantgerichte site verandert niets. Dit is de aanpak van Partsgraph, en het is ook wat een groeiend aantal fabrikanten zelf bouwt: Microchip bracht in november 2025 een gratis publieke MCP-server voor zijn productdata uit, en TrustedParts van ECIA lanceerde in juni 2026 een AI-agentdienst voor voorraadinformatie.

## Wat u als eerste doet, in volgorde

1. Voer de test in zes stappen hierboven uit op uw tien belangrijkste producten en noteer de bytegroottes.
2. Render JSON-LD server-side op productpagina's. Het is de kleinste wijziging met het grootste meetbare effect.
3. Zorg dat elke specificatie, datasheetlink en CAD-link in de initiële HTML aanwezig is, ook als de interactieve versie client-side blijft.
4. Geef elke parametrische filtercombinatie die ertoe doet een echte, crawlbare, server-gerenderde URL.
5. Publiceer per product een markdown-mirror en link ernaar vanaf de pagina.
6. Maak u pas daarna druk om rankings, prompts en aandeel in antwoorden. Retrieval gaat vooraf aan citatie; er valt niets te optimaliseren zolang de content niet in de responsbody staat.

Het mechanisme is hier niet subtiel en het wordt niet betwist. Een model kan alleen citeren wat het heeft ontvangen, en wat het heeft ontvangen is uw ruwe HTML. Al het andere is een renderstap die nooit heeft plaatsgevonden.

*Wilt u weten hoe uw catalogus ervoor staat? De gratis AI-zichtbaarheidsgrader van Partsgraph voert de controles uit dit artikel uit op uw eigen domein via [/audit](/audit).*

## Veelgestelde vragen

### Rendert GPTBot JavaScript?

Nee. Vercel en MERJ stelden vast dat GPTBot in ongeveer 11,5% van zijn requests JavaScript-bestanden downloadt, maar deze nooit uitvoert. De crawler haalt content uit de HTML die de server in de eerste respons teruggeeft. Alles wat uw bundle na het laden in de DOM injecteert, is voor hem onzichtbaar.

### Waarom ziet Google mijn single-page app wél en ChatGPT niet?

Googlebot draait een headless Chromium-renderservice en voert uw JavaScript dus uit, waarna de resulterende DOM wordt geïndexeerd. Gemini is op diezelfde infrastructuur gegrond. OpenAI, Anthropic en Perplexity gebruiken eenvoudige HTTP-fetchers zonder browser-engine, waardoor dezelfde pagina goed kan scoren in Google en tegelijk volledig kan ontbreken in een AI-antwoord.

### Lost prerendering of dynamic rendering dit op?

Dat kan, en het is een legitieme tussenoplossing voor een catalogus die u niet snel naar een ander platform kunt overzetten. De risico's zijn een verouderde cache bij prijs en voorraad, en crawlers een wezenlijk andere pagina voorschotelen dan gebruikers krijgen. Houd de geprerenderde HTML semantisch identiek aan de gerenderde pagina en stel een kort revalidatievenster in op volatiele velden.

### Is JSON-LD op zichzelf voldoende?

Alleen als het staat in de HTML die de server teruggeeft. JSON-LD die door een tagmanager of een client-side script wordt geïnjecteerd, arriveert pas nadat de crawler al klaar is. Render de script-tag server-side en beschouw JSON-LD als aanvulling op leesbare bodytekst, niet als vervanging daarvan.

### Hoe test ik dit zelf binnen een minuut?

Draai curl met compressie ingeschakeld tegen een product-URL, sla de respons op en grep vervolgens in de ruwe bytes naar uw artikelnummer en twee of drie parametrische waarden. Ontbreken die in het bestand terwijl ze in de browser wel zichtbaar zijn, dan bouwt JavaScript ze op en zal geen enkele AI-crawler ze ooit zien.

### Respecteren AI-crawlers mijn sitemap?

Ze gebruiken hem inconsistent. Vercel en MERJ maten dat 34,82% van de fetches van ChatGPT op een 404 uitkwam, tegenover 8,22% bij Googlebot - een aanwijzing dat links uit verouderde bronnen worden ontdekt in plaats van dat er gedisciplineerd via de sitemap wordt gecrawld. Een accurate sitemap met correcte lastmod-waarden helpt, maar compenseert niet voor pagina's die geen content teruggeven.

### Geldt dit ook voor CAD-, BIM- en datasheetdownloads?

Ja, en in nog sterkere mate. Wordt een downloadlink door JavaScript gegenereerd, zit hij achter een tussenpagina of loopt hij via een kortlevende gesigneerde URL, dan kan een client zonder browser hem simpelweg niet volgen. Het document bestaat dan net zo goed niet.

## Bronnen

1. [Vercel and MERJ, The rise of the AI crawler, December 2024](https://vercel.com/blog/the-rise-of-the-ai-crawler)
2. [Adobe Digital Insights, AI traffic and retail machine-readability, April 2026](https://business.adobe.com/blog/ai-traffic-surge-retail-sites-not-machine-readable)
3. [eCommerceNews, Adobe machine-readability scores by page type, April 2026](https://e-commerce.news/story/adobe-says-ai-retail-traffic-surges-as-readability-lags)
4. [TechCrunch, AI traffic to US retailers rose 393% in Q1, April 2026](https://techcrunch.com/2026/04/16/ai-traffic-to-us-retailers-rose-393-in-q1-and-its-boosting-their-revenue-too/)
5. [Forrester, The State Of Business Buying, 2026 (January 2026)](https://www.forrester.com/blogs/state-of-business-buying-2026/)
6. [Google Search Central, Google crawlers and user agents](https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers)
7. [OpenAI, Overview of OpenAI crawlers](https://developers.openai.com/api/docs/bots)
8. [Anthropic, Does Anthropic crawl data from the web?](https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler)
9. [Apple Support, About Applebot](https://support.apple.com/en-us/119829)
10. [Microchip Technology, MCP Server press release, November 2025](https://ir.microchip.com/news-events/press-releases/detail/1344/microchip-technology-unveils-model-context-protocol-mcp-server-to-power-ai-driven-product-data-access)
11. [ECIA, TrustedParts.com launches Inventory AI Agent Service, June 2026](https://www.ecianow.org/2026/06/11/trustedparts-com-launches-inventory-ai-agent-service/)
12. [Search Engine Journal, Google says llms.txt is speculative for now](https://www.searchenginejournal.com/google-says-llms-txt-is-purely-speculative-for-now/577576/)

## Other languages

- English: https://partsgraph.ai/blog/ai-crawlers-do-not-run-javascript/md
- Deutsch: https://partsgraph.ai/de/blog/ai-crawlers-do-not-run-javascript/md
- Français: https://partsgraph.ai/fr/blog/ai-crawlers-do-not-run-javascript/md
- Español: https://partsgraph.ai/es/blog/ai-crawlers-do-not-run-javascript/md
- Italiano: https://partsgraph.ai/it/blog/ai-crawlers-do-not-run-javascript/md
- Polski: https://partsgraph.ai/pl/blog/ai-crawlers-do-not-run-javascript/md
- Português: https://partsgraph.ai/pt/blog/ai-crawlers-do-not-run-javascript/md
- Svenska: https://partsgraph.ai/sv/blog/ai-crawlers-do-not-run-javascript/md
- Türkçe: https://partsgraph.ai/tr/blog/ai-crawlers-do-not-run-javascript/md
- 日本語: https://partsgraph.ai/ja/blog/ai-crawlers-do-not-run-javascript/md
- 한국어: https://partsgraph.ai/ko/blog/ai-crawlers-do-not-run-javascript/md
- 简体中文: https://partsgraph.ai/zh/blog/ai-crawlers-do-not-run-javascript/md

---

Partsgraph — the agent-ready parts data layer. Free AI-visibility grader: https://partsgraph.ai/nl/audit
