# Les crawlers IA n'exécutent pas JavaScript

> GPTBot, ClaudeBot et PerplexityBot lisent le HTML brut, jamais les scripts. Comment tester la visibilité de votre catalogue et la corriger sans réécriture.

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

## En bref

**Les crawlers IA comme GPTBot et ClaudeBot exécutent-ils JavaScript ?**

Non. L'analyse conjointe menée par Vercel et MERJ, sur un réseau ayant servi 569 millions de requêtes GPTBot en un seul mois, n'a trouvé aucune preuve que GPTBot, ClaudeBot, PerplexityBot ou le crawler de Meta exécutent JavaScript : ils analysent le HTML brut renvoyé par le serveur et laissent les scripts de côté. Google fait exception, car Gemini hérite de l'infrastructure de rendu de Googlebot. Si votre catalogue paramétrique assemble les données produit côté client, un assistant IA ne voit qu'une coquille vide là où devraient figurer vos spécifications.

---

## La réponse courte

Les crawlers IA n'exécutent pas JavaScript. Lorsque GPTBot, ClaudeBot ou PerplexityBot demande une page, il effectue un simple GET HTTP, récupère les octets renvoyés par le serveur et les analyse comme du texte. Pas de navigateur, pas de construction du DOM, pas d'hydratation, aucune attente de résolution des appels XHR. L'analyse conjointe de Vercel et MERJ, portant sur un réseau ayant servi 569 millions de requêtes GPTBot et 370 millions de requêtes ClaudeBot en un seul mois, n'a trouvé aucune preuve d'exécution de JavaScript par un quelconque crawler IA majeur. Ces crawlers téléchargent bien parfois des fichiers de script — GPTBot a récupéré du JavaScript dans 11,50 % de ses requêtes, ClaudeBot dans 23,84 % — sans jamais les exécuter.

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

Google fait exception, et c'est la raison pour laquelle tant d'équipes n'ont pas vu le problème. Googlebot exploite un service de rendu Chromium headless, et Gemini s'appuie sur cette même infrastructure. Un catalogue paramétrique rendu côté client peut donc très bien se positionner dans Google Search tout en étant totalement absent de ChatGPT, Claude et Perplexity. Or ce n'est plus la même audience : l'étude acheteurs 2026 de Forrester montre que **94 % des acheteurs professionnels utilisent désormais l'IA au cours de leur processus d'achat**, et Adobe a mesuré une croissance du trafic référé par l'IA vers les sites marchands de **393 % en glissement annuel au T1 2026**.

## Ce que GPTBot reçoit réellement

Il est utile d'être précis sur les deux documents en jeu, car la plupart des équipes catalogue ne regardent jamais que le second.

Le **HTML brut** est le flux d'octets que le serveur d'origine écrit dans la réponse. C'est ce qu'affiche `curl`, ce que montre `view-source:`, et ce qu'analyse un client HTTP en mode texte seul.

Le **DOM rendu** est ce qui existe en mémoire une fois que le navigateur a analysé ce HTML, téléchargé et exécuté chaque script, résolu chaque appel `fetch()` et appliqué chaque mutation. C'est ce qu'affiche l'onglet Éléments des outils de développement de votre navigateur.

Dans un catalogue SPA moderne, ces deux documents n'ont presque rien en commun. Le HTML brut est une coquille : un `<div id="root">`, un manifeste de préchargement et une centaine de kilo-octets de références vers des bundles. Chaque chaîne de caractères qui compte — référence, boîtier, tolérance, plage de température de fonctionnement, statut RoHS, statut de cycle de vie, stock, palier de prix — arrive plus tard, via un appel API que le crawler n'effectuera jamais.

> Un crawler IA voit votre HTML brut et rien d'autre. Si une spécification ne figure pas dans les octets renvoyés par le serveur, cette spécification n'existe pas du point de vue du modèle.

## Quels clients effectuent le rendu, et lesquels ne le font pas

| Client | Opérateur | Exécute JavaScript | À quoi il sert |
|---|---|---|---|
| GPTBot | OpenAI | Non | Collecte de données d'entraînement |
| OAI-SearchBot | OpenAI | Non | Indexation de recherche pour ChatGPT |
| ChatGPT-User | OpenAI | Non | Récupération en direct pour la question d'un utilisateur |
| ClaudeBot | Anthropic | Non | Collecte de données d'entraînement |
| PerplexityBot | Perplexity | Non | Indexation de recherche |
| Meta-ExternalAgent | Meta | Non | Entraînement et indexation |
| Bytespider | ByteDance | Non | Collecte de données d'entraînement |
| Googlebot | Google | **Oui**, Chromium headless | Recherche, et ancrage pour Gemini |
| Applebot | Apple | **Oui**, peut effectuer le rendu dans un navigateur | Siri, Spotlight, Safari |

Chaque « Non » de ce tableau correspond à un comportement mesuré dans le jeu de données Vercel et MERJ, non à une déduction. Chaque « Oui » est documenté par l'opérateur : Google publie le détail de son pipeline de rendu, et la documentation d'Apple sur son propre crawler indique qu'Applebot « peut effectuer le rendu du contenu de votre site web dans un navigateur ». Les agents plus récents d'Anthropic, Claude-SearchBot et Claude-User, sont postérieurs à l'étude et n'ont pas été mesurés séparément ; aucun opérateur n'a annoncé de pipeline de rendu pour eux depuis.

La conséquence pratique est asymétrique, et pas dans le bon sens. Le rendu est la partie coûteuse du crawl, et les opérateurs qui s'en sont dispensés sont précisément ceux qui se trouvent aujourd'hui entre votre produit et votre acheteur.

## Pourquoi les catalogues paramétriques échouent plus lourdement que tout le reste

L'analyse d'Adobe d'avril 2026 a noté la lisibilité machine des pages marchandes et situe les fiches produit à **66 % — le score le plus bas de tous les types de page**, derrière les pages d'accueil (75 %), les pages catégorie (74 %) et même les pages FAQ (80 %). Ce classement n'a rien d'un hasard. Les pages qui portent les données les plus structurées, les plus précieuses et les plus déterminantes pour la décision sont celles qui sont construites avec le plus de JavaScript.

Cinq schémas expliquent l'essentiel des dégâts :

1. **L'état des filtres vit côté client.** Votre sélecteur paramétrique est un composant React qui lit dans un store local. Il n'existe aucune URL rendue côté serveur pour « 0603, 100nF, X7R, 50V » : le crawler n'a donc rien à récupérer, et rien à citer.
2. **Le tableau de spécifications est une réponse API.** La coquille de la page s'affiche, puis une requête vers `/api/product/attributes` remplit le tableau. Le crawler s'arrête à la coquille.
3. **Le prix et la disponibilité sont délibérément côté client.** Cohérent pour la mise en cache. Fatal pour la visibilité machine, car un modèle qui ne voit pas le stock ne recommandera pas la référence.
4. **Les onglets et les accordéons diffèrent leur contenu.** Fiches techniques, notes d'application, certificats de conformité et liens CAO sont couramment chargés au clic. Or un crawler ne clique jamais.
5. **Le défilement infini remplace la pagination.** À partir du 51e produit, il n'existe plus aucune URL explorable.

Partsgraph a audité 984 domaines de distributeurs et de fabricants dans le monde — Amérique du Nord, Europe et Asie — en août 2026. Le score médian de visibilité IA s'établit à **50 sur 100**, et **70 % de la cohorte obtient la note D ou F**. Près de la moitié n'ont pas su servir une seule page de catalogue lisible à un client non-navigateur standard. La distribution de composants électroniques est le segment le plus faible, avec une médiane de 34.

## Comment savoir si les crawlers IA peuvent lire mon catalogue ?

Faites le test sur votre propre origine. Tester le site d'un concurrent en usurpant le user-agent d'un crawler produit des faux négatifs, car les solutions anti-bots d'entreprise vérifient les crawlers par IP source et non par la chaîne user-agent — un en-tête usurpé provenant d'une adresse non reconnue déclenche une vérification, quoi que dise le robots.txt.

1. **Récupérez le HTML brut.** Choisissez votre page produit la plus stratégique.

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

2. **Cherchez la référence dans les octets.** Pas dans le navigateur — dans le fichier.

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

Si la commande renvoie `0`, aucun crawler IA ne peut identifier que la page traite de cette référence.

3. **Cherchez trois valeurs paramétriques** sur lesquelles un ingénieur filtrerait naturellement.

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

4. **Comptez les blocs de données structurées.**

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

Zéro signifie qu'il n'existe aucun enregistrement produit lisible par machine. Un ou plus signifie qu'il faut l'extraire et vérifier qu'il porte réellement `sku`, `mpn`, `gtin`, `brand`, `offers` et vos entrées `additionalProperty` essentielles, et pas seulement un fil d'Ariane.

5. **Comparez avec la page rendue.** Ouvrez la même URL dans un navigateur avec JavaScript désactivé. Ce qui subsiste correspond à peu près à ce qu'obtient un crawler. L'écart entre cela et la page normale, c'est votre part d'invisibilité.

6. **Vérifiez tout le parcours, pas une seule page.** Répétez l'opération sur une page catégorie, une page de résultats de recherche, un lien vers une fiche technique et un téléchargement CAO. Un crawler capable de lire une page produit mais incapable d'y accéder depuis une liste de catégorie explorable reste bloqué.

Une page conforme fera apparaître la référence des dizaines de fois, affichera les libellés paramétriques sous forme de texte et comportera au moins un bloc JSON-LD. À titre de repère, une page produit bien construite renvoie généralement de 60 à 200 Ko de HTML contenant le tableau de spécifications complet ; une coquille SPA défaillante renvoie de 4 à 15 Ko ne contenant rien d'autre que des références vers des bundles.

## Comment corriger cela sans réécrire le site ?

Vous n'avez pas besoin de changer de plateforme. Vous avez besoin que les octets servis par l'origine contiennent les faits. Il existe quatre voies, et elles ne s'excluent pas mutuellement.

| Approche | Effort | Ce que cela corrige | Risque principal |
|---|---|---|---|
| Rendu côté serveur des routes produit | Élevé | Tout, durablement | Coût du changement de plateforme et risque de régression |
| Prérendu / rendu dynamique | Moyen | Le contenu du HTML brut | Obsolescence du cache sur les prix et les stocks |
| JSON-LD rendu côté serveur | Faible | Les faits lisibles par machine | Ignoré si le corps de texte reste vide |
| Miroir Markdown et couche overlay | Faible | Contenu, documents et accès pour les agents | Impose de maintenir les liens canoniques |

**Le rendu côté serveur** des routes produit et catégorie est la réponse durable. Si vous êtes déjà sur un framework qui le prend en charge, basculer les routes catalogue vers des composants serveur ou vers une génération statique avec revalidation incrémentale se compte généralement en semaines, pas en trimestres, car la couche de données existe déjà — elle est simplement appelée du mauvais côté.

**Le prérendu** est la solution transitoire honnête. Générez chaque page produit une fois au build ou selon une planification, mettez le HTML en cache en périphérie et servez-le à tout le monde. Servez le même document aux humains et aux machines : présenter aux crawlers une page différente relève à la fois du risque vis-à-vis des politiques en vigueur et, en pratique, de l'échec assuré, puisque le modèle citera la version qu'il aura reçue.

**Le JSON-LD rendu côté serveur** est le changement au plus fort effet de levier pour le moindre effort. Placez-le dans le HTML émis par le serveur, pas dans un gestionnaire de balises.

```
<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>
```

**Un miroir Markdown** est le moyen le moins coûteux de rendre une page non ambiguë. Servez un équivalent en texte brut de chaque page produit à une URL stable et liée depuis le site, avec le tableau de spécifications rendu sous forme de tableau Markdown. Les clients en mode texte seul l'analysent parfaitement, sa génération à partir de la même source de données ne coûte presque rien, et il vous donne une surface machine canonique qui ne dérive pas lorsque le front-end est refondu. À noter : `llms.txt` n'est pas cela — à ce jour, en 2026, aucun opérateur IA majeur ne s'est engagé à le lire, et l'équipe Search Relations de Google a explicitement refusé de le cautionner. Les miroirs fonctionnent parce que ce sont des pages ordinaires, accessibles par un lien.

**Une couche overlay** place tout ce qui précède devant le site existant plutôt qu'à l'intérieur. Un service sidecar ou un worker en périphérie sert, sur votre propre domaine, des pages rendues côté serveur et lisibles par les agents, du JSON-LD, des miroirs Markdown et un endpoint MCP hébergé, en lisant dans votre PIM existant. Rien ne change sur le site destiné aux clients. C'est l'approche retenue par Partsgraph, et c'est aussi ce qu'un nombre croissant de fabricants développent en interne : Microchip a mis en ligne en novembre 2025 un serveur MCP public et gratuit pour ses données produit, et TrustedParts, de l'ECIA, a lancé un service d'agent IA d'inventaire en juin 2026.

## Par où commencer, dans l'ordre

1. Appliquez le test en six étapes ci-dessus à vos dix meilleurs produits et relevez le nombre d'octets.
2. Faites générer le JSON-LD côté serveur sur les pages produit. C'est le plus petit changement au plus grand effet mesurable.
3. Faites en sorte que chaque spécification, chaque lien de fiche technique et chaque lien CAO soit présent dans le HTML initial, même si la version interactive reste côté client.
4. Donnez à chaque combinaison de filtres paramétriques qui compte une véritable URL explorable et rendue côté serveur.
5. Publiez un miroir Markdown par produit et liez-le depuis la page.
6. Ensuite seulement, préoccupez-vous du positionnement, des prompts et de la part de citations. La récupération précède la citation : il n'y a rien à optimiser tant que le contenu n'existe pas dans le corps de la réponse.

Le mécanisme n'a ici rien de subtil et ne fait pas débat. Un modèle ne peut citer que ce qu'il a reçu, et ce qu'il a reçu, c'est votre HTML brut. Tout le reste est une étape de rendu qui n'a jamais eu lieu.

*Vous voulez savoir où en est votre catalogue ? L'outil gratuit d'évaluation de la visibilité IA de Partsgraph applique les vérifications de cet article à votre propre domaine, sur [/audit](/audit).*

## Questions fréquentes

### GPTBot effectue-t-il le rendu du JavaScript ?

Non. Vercel et MERJ ont constaté que GPTBot télécharge des fichiers JavaScript dans environ 11,5 % de ses requêtes, mais ne les exécute jamais. Il extrait le contenu du HTML que le serveur renvoie dans la réponse initiale. Tout ce que votre bundle injecte dans le DOM après le chargement lui est invisible.

### Pourquoi Google voit-il mon application monopage alors que ChatGPT en est incapable ?

Googlebot exploite un service de rendu Chromium headless : il exécute donc votre JavaScript et indexe le DOM obtenu. Gemini s'appuie sur cette même infrastructure. OpenAI, Anthropic et Perplexity, eux, utilisent de simples clients HTTP dépourvus de moteur de navigateur : une même page peut donc être bien positionnée sur Google et totalement absente d'une réponse IA.

### Le prérendu ou le rendu dynamique règlent-ils le problème ?

C'est possible, et il s'agit d'une solution transitoire légitime pour un catalogue que vous ne pouvez pas migrer rapidement. Les risques sont l'obsolescence du cache sur les prix et les stocks, et le fait de servir aux crawlers une page sensiblement différente de celle que reçoivent les utilisateurs. Gardez le HTML prérendu sémantiquement identique à la page rendue et fixez une fenêtre de revalidation courte sur les champs volatils.

### Le JSON-LD suffit-il à lui seul ?

Uniquement s'il figure dans le HTML renvoyé par le serveur. Un JSON-LD injecté par un gestionnaire de balises ou par un script côté client arrive après que le crawler a terminé. Faites générer la balise script côté serveur, et considérez le JSON-LD comme un complément au corps de texte lisible, non comme un substitut.

### Comment tester cela moi-même en moins d'une minute ?

Lancez curl sur une URL produit avec la compression activée, enregistrez la réponse, puis faites un grep sur les octets bruts pour y chercher votre référence et deux ou trois valeurs paramétriques. Si elles sont absentes du fichier mais visibles dans le navigateur, c'est JavaScript qui les construit et aucun crawler IA ne les verra jamais.

### Les crawlers IA respectent-ils mon sitemap ?

Ils l'utilisent de façon inconstante. Vercel et MERJ ont mesuré que 34,82 % des requêtes de ChatGPT aboutissaient à des 404, contre 8,22 % pour Googlebot, ce qui suggère une découverte de liens à partir de sources obsolètes plutôt qu'un parcours discipliné du sitemap. Un sitemap exact, avec des valeurs lastmod correctes, aide, mais il ne compensera pas des pages qui ne renvoient aucun contenu.

### Cela vaut-il aussi pour les téléchargements CAO, BIM et de fiches techniques ?

Oui, et de façon encore plus marquée. Si un lien de téléchargement est généré par JavaScript, se cache derrière une page intermédiaire ou passe par une URL signée à durée de vie courte, un client non-navigateur ne peut tout simplement pas le suivre. Autant dire que le document n'existe pas.

## Sources

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
- 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
- Nederlands: https://partsgraph.ai/nl/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/fr/audit
