Fetcher de chatbot IA interrogeant un site B2B via Cloudflare CDN et robots.txt, lisant des spécifications produit en texte HTML et données structurées JSON-LD.

Une IA peut-elle vraiment lire votre site web?

Pour qu'un assistant cite votre site, trois choses doivent fonctionner en production. Les bots pertinents sont autorisés. Le serveur renvoie la page pendant que l'acheteur est encore dans la conversation. Les faits se trouvent dans la première réponse HTML, afin qu'un fetcher qui n'exécute pas JavaScript puisse les lire.

L'IA peut-elle lire votre site web relève surtout d'une question de SEO technique - avec des bots supplémentaires et des données supplémentaires. Si Googlebot reçoit déjà du HTML exploitable et indexable, vous avez déjà la majeure partie de la base. Ce qu'il reste à activer, c'est un accès nommé pour GPTBot et ChatGPT-User, un chemin clair à travers le CDN et le WAF (Cloudflare propose des contrôles de bots IA qui bloquent par défaut), et les mêmes faits sous forme de données typées (tableaux plus JSON-LD) pour qu'une machine utilise un chiffre comme prix ou dimension au lieu de deviner à partir d'une phrase. Lisez aussi : recommandation IA pour les fournisseurs : faits pour la shortlist - pourquoi les specs publiées comptent une fois qu'un fetcher peut lire la page.

Dans cet article :

Comment une page arrive-t-elle dans une réponse IA ?

Les assistants utilisent deux chemins de récupération. La politique d'accès doit nommer les deux, car ce sont des agents distincts avec des rôles distincts.

Crawl d'entraînement. Un crawler récupère les pages publiques selon son propre calendrier. Ce corpus alimente ensuite l'entraînement des modèles. Autorisez GPTBot et ClaudeBot pour que les futurs modèles incluent ce que vous avez publié.

Fetch en direct. Quand un acheteur pose une question, l'assistant ouvre votre page pendant cette conversation et cherche la valeur demandée. Autorisez ChatGPT-User et OAI-SearchBot pour que les réponses d'aujourd'hui puissent citer la page en direct.

Inscrivez les deux dans robots.txt et dans la liste blanche du WAF comme règles séparées. Une ligne générique « bots » traite un crawler d'entraînement et un fetcher en direct comme le même client. Ce n'est pas le cas.

AgentOpérateurAutorisez-le pour que
GPTBotOpenAILes futurs modèles s'entraînent sur vos pages publiques
ChatGPT-UserOpenAIChatGPT puisse récupérer la page pendant une question en direct
OAI-SearchBotOpenAILa recherche OpenAI puisse récupérer la page pour une réponse
ClaudeBotAnthropicLes futurs modèles Claude s'entraînent sur vos pages publiques
PerplexityBotPerplexityPerplexity puisse récupérer la page (traitez comme fetch en direct tant qu'il n'y a pas de politique séparée)
GooglebotGoogleLa recherche et les AI Overviews puissent inclure la page

Confirmez l'identité comme pour Googlebot : plages IP publiées et reverse DNS. Autorisez ces sources. Les chaînes user-agent seules se copient facilement ; la liste blanche doit reposer sur des plages vérifiées.

Quels bots faut-il autoriser, et que permet chacun ?

Placez les règles sur l'hôte de production, à deux endroits qui doivent être d'accord : robots.txt et le edge (Cloudflare, AWS WAF, CDN).

Dans robots.txt, autorisez par nom les agents du tableau. Le staging est souvent livré avec Disallow: /. Copiez ce fichier en production et chaque bot listé ignorera le site. Votre navigateur charge quand même la page, car il ne lit pas robots.txt. Vérifiez l'URL en direct :

curl -s "https://www.example.com/robots.txt"

Vous voulez des Allow explicites (ou l'absence de Disallow) pour GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot et PerplexityBot, chacun pour les chemins que vous voulez cités. Un fichier de production qui nomme les rôles ressemble à ceci :

User-agent: GPTBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

GPTBot sur ces chemins, c'est comment les futurs modèles s'entraînent sur les pages. ChatGPT-User sur les mêmes chemins, c'est comment une question en direct peut les récupérer. Deux groupes User-agent, deux résultats. Limitez Allow aux sections publiques que vous voulez citées si c'est plus étroit que l'arborescence entière.

Un troisième contrôle se trouve sur la page elle-même : meta name="robots" et l'en-tête X-Robots-Tag. Autorisez index, follow sur les URL que vous voulez citées, pour que Google Search garde la page éligible aux extraits et aux AI Overviews et AI Mode. Ces surfaces Google reposent encore sur l'index Google. Autoriser Googlebot, c'est comment une page reste dans cet index. Autoriser ChatGPT-User est un autre travail, sur un autre agent.

Au edge, ajoutez les plages IP publiées de ces opérateurs à la liste blanche pour que les fetchers vérifiés reçoivent HTTP 200. Les chiffres Akamai 2025 placent les bots à 51 % du trafic internet, les crawlers IA représentant environ un cinquième de tout le trafic. Ce volume explique pourquoi les packs WAF par défaut regroupent les clients inconnus avec les scrapers. Gardez les contrôles anti-abus pour le trafic non vérifié. Donnez aux fetchers IA nommés et vérifiés un chemin clair.

Le marketing édite le fichier CMS. L'ingénierie réseau possède le WAF. Les deux doivent autoriser les mêmes agents. Un robots.txt Drupal qui autorise ChatGPT-User ne sert que lorsque le proxy devant renvoie aussi 200 pour ce client.

Le CDN ou la couche anti-bot laisse-t-il encore passer ces bots ?

Le nom d'hôte public est ce que le fetcher frappe. C'est le CDN, le WAF et le produit anti-bot, puis le cache, puis l'origine. L'origine peut autoriser GPTBot dans Drupal pendant que le edge renvoie encore un challenge, un 403 ou un robots.txt réécrit. Vérifiez le edge comme couche à part.

Cloudflare est le cas que nous voyons le plus souvent, car il propose désormais des contrôles de crawlers IA sur tous les plans. Les noms de produits et les valeurs par défaut actuels figurent dans la documentation des politiques de bots IA et la documentation robots.txt géré de Cloudflare.

Block AI bots / politiques de bots IA. Depuis le 1er juillet 2025, Cloudflare demande à chaque nouveau domaine si les crawlers IA peuvent accéder au site, et le choix conservateur est le refus. Dans le tableau de bord, cela se trouve sous Security Settings en tant que Configure AI bot policies (l'ancien interrupteur Block AI bots sera retiré le 15 septembre 2026). Cloudflare sépare le trafic en Search, Agent et Training. Autorisez Training pour que GPTBot et ClaudeBot explorent les pages publiques pour les futurs modèles. Autorisez Agent pour qu'un fetcher de chat en direct (ChatGPT-User et similaires) ouvre la page pendant une question. Autorisez Search pour que les crawlers de récupération indexent pour les réponses. À partir du 15 septembre 2026, les nouveaux domaines Cloudflare refuseront Training et Agent sur les pages qui affichent des publicités, et laisseront Search autorisé, sauf si vous changez cela.

robots.txt géré. Activez ce paramètre et Cloudflare préfixe son propre fichier devant le vôtre. Le bloc géré inclut Disallow: / pour GPTBot, ClaudeBot, Google-Extended, Bytespider, CCBot et d'autres, plus un signal de contenu ai-train=no. Votre Allow: / Drupal pour GPTBot se trouve alors en dessous de ce préfixe, et beaucoup de crawlers respectent le premier groupe correspondant. Faites un curl du https://www.example.com/robots.txt public. Si vous voyez # BEGIN Cloudflare Managed content et User-agent: GPTBot / Disallow: /, le edge indique aux crawlers d'entraînement d'ignorer le site. Désactivez le fichier géré, ou remplacez ces groupes par Allow, lorsque le crawl d'entraînement fait partie de la politique.

Bot Fight Mode et Super Bot Fight Mode. Ces produits émettent des challenges JavaScript au trafic qui semble automatisé. Les fetchers au moment de la réponse ignorent JavaScript ; une page de challenge n'est pas votre article. Bot Fight Mode ne peut pas être contourné par une règle WAF allow. S'il est activé, désactivez-le pour cet objectif, ou passez à Super Bot Fight Mode et ignorez-y les bots IA vérifiés. I'm Under Attack relève de la même catégorie de challenge, à l'échelle du site.

Règles WAF personnalisées et bot-score. Une règle qui challenge tout client avec un bot score inférieur à 30 est un défaut courant après un ticket de durcissement sécurité. GPTBot et ChatGPT-User vérifiés doivent passer la liste verified-bot de Cloudflare. Les imitateurs non vérifiés ne passeront pas. Gardez la règle de score pour les scrapers inconnus. Ajoutez un allow explicite (ou skip) pour les agents IA nommés et vérifiés afin que les crawls d'entraînement et les fetches en direct reçoivent 200.

Cache. Le cache « bloque » rarement seul. C'est le WAF devant qui le fait. Deux cas de cache comptent quand même. Un mur de cookies ou une coquille JS vide en cache est ce que reçoit chaque fetch suivant, bot ou humain, jusqu'à la purge. Un 403 ou un challenge mis en cache pour cette URL continuera d'échouer après correction de la règle, jusqu'à la purge. Après un changement de politique de bots, purgez le HTML des URL que vous voulez citées, puis refaites un curl.

Le même schéma existe sur AWS WAF Bot Control, Akamai Bot Manager et les produits anti-bot Fastly : un pack géré « IA / scraper » devant l'origine. Lisez ce pack comme les politiques de bots IA de Cloudflare. Autorisez les crawlers d'entraînement et les fetchers en direct vérifiés que vous avez nommés dans robots.txt.

Quelle part relève déjà du SEO technique ?

Presque tout. Explorabilité, indexabilité, HTML dans la première réponse, sitemaps, canoniques, hreflang, vitesse, et schema.org aligné sur la page visible : c'est le même travail qu'une équipe search fait déjà pour Google.

Les propres consignes de Google pour AI Overviews et AI Mode sont explicites. Une page indexée et éligible à un extrait dans Google Search est éligible à apparaître comme lien de support dans ces fonctionnalités. Il n'y a pas de barre technique supplémentaire au-delà de Search. Google liste les mêmes pratiques : autoriser le crawl dans robots.txt et au CDN, garder le contenu important en texte, et maintenir les données structurées alignées sur ce que voit le visiteur.

ChatGPT, Claude et Perplexity réutilisent cette même page lisible. Ils ajoutent trois exigences supplémentaires au-dessus d'une base SEO saine.

Agents nommés. Autoriser Googlebot n'autorise pas GPTBot ou ChatGPT-User. Chaque opérateur livre son propre user agent. Vous activez chacun pour le résultat du tableau ci-dessus.

Un fetch en direct avec un délai court. Googlebot peut revenir. Un fetcher au moment de la réponse est dans un chat. Le HTML qui arrive dans les premières secondes est le HTML qu'on peut citer dans ce tour.

Des faits plus denses et typés. Le classement récompense encore une page claire. Un prompt acheteur est une liste de contraintes : 400 mm, 12 V, IP68, agroalimentaire, délai sous deux semaines. Une machine compare ces valeurs. Elle préfère un tableau de specs et JSON-LD à un paragraphe qui dit que le produit « couvre une large gamme de tailles ».

Le bon SEO est donc la couche de base. Le travail supplémentaire, c'est l'accès pour les nouveaux bots, et des données qu'une machine peut comparer sans inférer. 10 fonctionnalités SEO qu'un CMS moderne devrait avoir couvre le côté explorabilité ; cet article couvre les agents IA et les données typées dont ces crawlers ont besoin une fois arrivés.

Ce que le SEO technique active déjàCe qu'il faut activer en plus pour les fetchers IA
Googlebot peut explorer et la page peut être indexéeAgents IA nommés sur les mêmes chemins publics, plus une politique CDN/WAF qui les autorise (les défauts bots IA de Cloudflare ne suivent pas Googlebot)
Texte important en HTML, pas seulement dans une app côté clientLe même HTML, car la plupart des fetchers au moment de la réponse ignorent JavaScript
TTFB rapide pour le budget de crawl et les Core Web VitalsTTFB rapide pour qu'un fetch en direct se termine pendant que l'acheteur est encore dans le chat
Sitemap, auto-canonique, hreflangLes mêmes signaux, pour que le fetcher atterrisse sur une URL actuelle dans la bonne langue
Schema.org JSON-LD pour les rich resultsLe même JSON-LD, utilisé comme faits typés (ce chiffre est un prix, ceci une dimension)
Contenu qui répond à une requêteSpecs, prix, limites et secteurs comme valeurs qu'un prompt peut faire correspondre

Comment renvoyer une réponse utilisable à temps ?

Un fetch en direct s'exécute pendant que l'acheteur attend. Visez HTTP 200 et HTML dans les premières secondes, sur les URL que vous voulez citées.

Cela signifie :

  • 200 pour les fetchers IA vérifiés sur les pages publiques.
  • Limites de débit dimensionnées pour qu'une courte rafale de fetches au moment de la réponse se termine. Les agents en direct ci-dessus doivent atteindre 200, pas 429.
  • Le corps de l'article dans ce 200. Un mur de cookies ou un sélecteur de pays qui retient la spec derrière un clic laisse le fetcher avec la coquille. Mettez les faits citables (dimensions, prix, limites, secteur) dans le HTML qui arrive avec la ligne de statut.
  • Time to first byte dans la même fourchette que celle que vous visez déjà pour le SEO technique. Pour un fetch en direct, du HTML utilisable à temps, c'est ce qui permet à l'assistant de citer la page.

Un sitemap indique aux crawlers quelles URL appartiennent à cet ensemble. Listez les pages publiques que vous voulez citées, gardez lastmod aligné sur les vraies modifications, et pointez robots.txt vers le sitemap. Les canoniques choisissent ensuite une URL quand plusieurs résolvent vers le même produit. Hreflang choisit la langue. Ces trois éléments sont la plomberie SEO. Ils décident aussi quel document un fetch en direct ouvre quand un acheteur pose une question en allemand et que vous publiez en trois langues.

Comment mettre le texte dans la première réponse HTML ?

Les fetchers au moment de la réponse lisent le HTML qu'ils téléchargent. La plupart ignorent JavaScript. Specs, prix et limites appartiennent donc à ce premier document.

Servez côté serveur les pages qu'un acheteur pourrait interroger. Le HTML qui arrive doit déjà contenir les données produit, la gamme, les contraintes et le texte sectoriel.

Si le site public est une application JavaScript, gardez une route rendue côté serveur (ou un instantané pré-rendu) pour les mêmes faits, sur une URL canonique unique. Texte dans les images et SEO fonctionne de la même manière : une dimension qui existe en texte dans le HTML est ce qu'un fetcher peut citer. Un PDF joint sous « télécharger la fiche technique » suit le même schéma. Publiez les chiffres sur la page, puis proposez le fichier comme copie pour ceux qui le veulent.

Un tableau de specs en HTML est le format qui voyage. Un attribut par ligne, une unité, une valeur. Les mêmes chiffres peuvent ensuite alimenter JSON-LD. Une phrase qui cache une plage dans des adjectifs ne remplit ni l'un ni l'autre des rôles.

Que faut-il activer d'autre pour qu'une machine utilise les données ?

Une fois les bots autorisés et le HTML rempli de faits, activez le reste de la couche machine. Chaque élément ci-dessous est une activation : faites cela, et un fetcher peut utiliser la page plus fiablement.

ActivezPour que
Allow pour les agents IA nommés dans robots.txtLes crawls d'entraînement et les fetches en direct puissent demander les chemins publics
Politique CDN / WAF bots IA réglée sur allow Search, Agent et TrainingLe proxy devant l'origine (Cloudflare, AWS WAF, Akamai) renvoie 200 pour ces rôles
Bot Fight Mode désactivé, ou Super Bot Fight Mode avec skip pour les bots IA vérifiésLes fetchers reçoivent du HTML au lieu d'un challenge JavaScript
robots.txt géré désactivé, ou réécrit pour que GPTBot et ClaudeBot soient AllowLe fichier que le crawler télécharge réellement correspond au fichier CMS
Liste blanche WAF / CDN pour les plages IP publiéesLes fetchers vérifiés reçoivent 200 au lieu d'un challenge par défaut
index, follow sur les URL publiques (meta robots et X-Robots-Tag)Google peut garder la page dans Search, qui est aussi le pool pour AI Overviews
Sitemap XML de ces URL, avec lastmod honnêteLes crawlers découvrent les pages que vous voulez citées
Canonique auto-référente sur l'URL publiqueLes chemins dupliqués se replient sur un document
hreflang sur les pages traduitesUn fetch dans une langue donnée atterrit dans cette langue
Specs en texte HTML et tableauxUn fetcher peut grep une dimension, un prix, un certificat
JSON-LD généré à partir des mêmes champsLes mêmes valeurs arrivent typées : Offer, height, material
HTTPS et URL publique stableL'assistant peut récupérer deux fois la même ressource et obtenir la même page

llms.txt est optionnel. C'est une courte carte des URL que vous avez déjà rendues lisibles. Publiez-le si ces URL existent et que vous pouvez maintenir le fichier à jour. Il n'accorde pas l'accès, ne rend pas JavaScript, et aucun grand éditeur n'en a fait un facteur de classement. Traitez-le comme un pointeur, une fois le tableau ci-dessus en place.

La barre des données se situe au-dessus du copy SEO ordinaire. Une page peut se classer pour « pompe industrielle » sur des adjectifs et échouer quand même à un prompt acheteur qui demande 400 mm, 12 V et eau salée. Activez des champs typés pour que la même valeur apparaisse dans le tableau, dans le paragraphe et dans JSON-LD. Une modification met à jour les trois.

Qu'apporte JSON-LD une fois la page lisible ?

JSON-LD est schema.org dans une balise <script type="application/ld+json">. Ce sont les mêmes données structurées que vous ajoutez déjà pour Google Search. Google recommande JSON-LD comme format le plus simple à maintenir, et exige que le balisage décrive ce qui est visible sur la page.

Sur les surfaces IA de Google, l'effet est documenté dans le cadre de Search : des données structurées alignées sur la page aident Google à interpréter le document. Il n'y a pas de « schéma IA » séparé à inventer.

Sur un fetch brut ChatGPT ou Claude, les preuves sont plus minces. Ces fetchers lisent le HTML. JSON-LD est une copie typée des mêmes faits à côté de ce HTML. Nous n'avons pas vu de test public et reproductible prouvant que JSON-LD seul déplace les citations ChatGPT. Faites-le quand même, car c'est le même travail que le SEO, et parce qu'un height: 400 mm typé supprime le devinage qu'une phrase laisse encore.

Les types qui valent leur place sur un site B2B, une fois que la page visible énonce déjà les faits :

  • Organization avec sameAs (LinkedIn, Wikipedia, profils entreprise), pour que le modèle rattache la page à une entreprise.
  • Product avec Offer (prix ou fourchette, devise, disponibilité), pour qu'une question de coût ait une valeur à relever.
  • Service sur les pages service, avec la zone ou le secteur que vous servez réellement.
  • FAQPage seulement pour les questions qui apparaissent en Q&R visible sur cette URL.
  • Article avec dateModified sur les pages éditoriales, pour que la fraîcheur soit un champ, pas une supposition.
  • BreadcrumbList, pour que la hiérarchie soit explicite.

Un balisage qui reformule un paragraphe vague est de la décoration. Un balisage qui contredit la page visible est pire : Google traite l'écart comme signal de spam, et un fetcher en direct qui lit les deux copies détient maintenant deux chiffres. Générez JSON-LD à partir des champs Drupal pour qu'un changement éditorial mette à jour le HTML et le script ensemble. Du JSON écrit à la main à côté d'un champ body dérive en un trimestre.

Un fragment Product minimal, alimenté par des champs, ressemble à ceci :

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Example bilge pump",
  "brand": { "@type": "Organization", "name": "Example GmbH" },
  "additionalProperty": [
    { "@type": "PropertyValue", "name": "height", "value": "380", "unitCode": "MMT" },
    { "@type": "PropertyValue", "name": "voltage", "value": "12", "unitText": "V" }
  ],
  "offers": {
    "@type": "Offer",
    "priceCurrency": "EUR",
    "price": "240",
    "availability": "https://schema.org/InStock"
  }
}

Ces propriétés n'aident que si 380 mm et 12 V figurent aussi dans le tableau HTML. JSON-LD étiquette les données. Il ne les crée pas. L'article sur la génération à partir de Schema.org et métadonnées dans Drupal est le chemin d'implémentation que nous utilisons.

Comment vérifier cela en production ?

Utilisez une URL en direct que vous voulez citée, pas un build local.

Statut pour un fetcher en direct

curl -sI -A "ChatGPT-User" "https://www.example.com/your-page"

HTTP 200 signifie que ChatGPT peut récupérer cette URL pendant une question. Répétez avec -A "GPTBot" pour confirmer que le crawler d'entraînement est autorisé sur le même chemin. Lisez X-Robots-Tag sur la même réponse : vous voulez la page publique indexable.

CDN / Cloudflare devant l'origine

curl -sI -A "GPTBot" "https://www.example.com/your-page"

Regardez la ligne de statut et les en-têtes. cf-ray signifie que Cloudflare a répondu. cf-mitigated: challenge ou un 403/1020 signifie que le edge a arrêté le crawler d'entraînement. Répétez avec -A "ChatGPT-User". Puis :

curl -s -A "GPTBot" "https://www.example.com/your-page" | grep -iE 'just a moment|cf-challenge|attention required|blocked'

Une correspondance est une page de challenge, pas votre article. Dans le tableau de bord Cloudflare, ouvrez Security Analytics (Events) pour cette fenêtre et filtrez sur Bot Fight Mode, Block AI bots et WAF personnalisé. Des logs d'accès origine qui ne montrent jamais GPTBot alors que le site public est sur Cloudflare signifient en général que le edge a renvoyé la réponse et que l'origine n'a jamais vu la requête.

robots.txt en production (le fichier que le bot reçoit réellement)

curl -s "https://www.example.com/robots.txt"

Confirmez Allow (ou pas de Disallow) pour chaque agent du tableau, sur les chemins qui doivent être publics. Confirmez que l'URL du sitemap est listée. Si la réponse commence par # BEGIN Cloudflare Managed content et liste Disallow: / pour GPTBot ou ClaudeBot, le fichier géré est devant votre fichier CMS. Corrigez cela au CDN, puis refaites un curl. Comparez avec le fichier sur l'origine si vous pouvez l'atteindre : ils doivent être d'accord.

Faits dans le HTML

curl -s -A "ChatGPT-User" "https://www.example.com/your-page" | grep -i "400 mm"

Utilisez une chaîne qui existe dans le contenu : une dimension, un prix, un numéro de certificat. Une correspondance signifie que le fetcher en direct peut lire ce fait. Ouvrez ensuite la même URL avec JavaScript désactivé et confirmez qu'une personne voit les mêmes chiffres.

JSON-LD présent et aligné

curl -s -A "ChatGPT-User" "https://www.example.com/your-page" | grep -F 'application/ld+json'

Puis cherchez dans le même téléchargement la même dimension ou le même prix dans le JSON. Une valeur typée qui correspond au tableau, c'est l'objectif. Une balise script avec un chiffre différent est un bug à corriger avant d'ajouter d'autres types.

Sitemap et canonique

curl -s "https://www.example.com/sitemap.xml" | grep "/your-page"
curl -s -A "ChatGPT-User" "https://www.example.com/your-page" | grep -i 'rel="canonical"'

La page que vous voulez citée doit apparaître dans le sitemap. La canonique doit pointer vers cette même URL publique.

Logs

Cherchez une semaine de logs d'accès pour ChatGPT-User, GPTBot, ClaudeBot, PerplexityBot et OAI-SearchBot. Des 200 sur les pages publiques qui vous importent signifient que ces bots passent. Croisez les hits avec les plages IP publiées avec qui gère le réseau.

Que configurer en premier ?

  1. Accès. robots.txt plus la politique CDN/WAF bots IA, Bot Fight Mode et listes blanches pour plages vérifiées, par agent, pour que crawls d'entraînement et fetches en direct atteignent tous deux le site. Gardez index, follow sur les URL publiques. Purgez le HTML de ces URL après un changement de règle.
  2. HTML. Specs, prix et limites dans la première réponse, en texte et tableaux.
  3. Vitesse. 200 assez vite pour qu'un fetch en direct se termine.
  4. Signaux URL. Sitemap, auto-canonique, hreflang, pour que le fetch ouvre un document actuel unique.
  5. JSON-LD. Schéma généré à partir des mêmes champs, aligné sur la page visible.

L'accès d'abord, car c'est ce qui permet à GPTBot d'alimenter les futurs modèles et à ChatGPT-User de récupérer pendant une question. JSON-LD en dernier parmi ceux-ci, car il étiquette des données qui existent déjà. Un responsable marketing peut exécuter les commandes ci-dessus, joindre la ligne de statut, l'extrait robots, une capture JavaScript désactivé et le grep JSON-LD, et remettre cela à qui possède le edge et les templates.

Comment nous mettons cela en place dans Drupal

Une page Drupal standard est du HTML dans la première réponse. Champs, vues et mise en page se rendent côté serveur, ce qui est le document qu'un fetcher en direct peut lire. Les modules ci-dessous étiquettent ensuite ce document, le listent et indiquent aux bots nommés qu'ils peuvent le récupérer. Si vous ajoutez un front-end JavaScript, gardez une route rendue côté serveur avec les mêmes faits. Drupal peut exposer les mêmes données en HTML pour les personnes et les fetchers, et en JSON:API pour l'application. Les deux peuvent coexister. L'URL publique qui doit être citée a besoin du HTML.

Champs, puis pages

Nous modélisons les spécifications en champs, pas en bloc de texte body. Hauteur, tension, prix, secteur et certificat ont chacun un champ. La page produit, le tableau comparatif et JSON-LD lisent tous ces champs. Un éditeur change 380 mm une fois. Chaque surface suit. Views et taxonomie construisent ensuite les pages sectorielles et comparatives à partir des mêmes entités, de sorte que la onzième page sectorielle relève de la configuration plutôt que d'un article ponctuel.

Rabbit Hole est l'autre moitié de ce modèle. Une entité spec qui n'existe que pour alimenter un tableau ne doit pas être une URL publique. Envoyez ces canoniques vers la page produit pour qu'un fetcher atterrisse sur un document.

robots.txt depuis le CMS

Le core livre un robots.txt statique dans la racine doc. Ce fichier est identique sur chaque site d'un multisite, et un déploiement peut écraser une modification manuelle. Pour une politique modifiable par environnement, nous utilisons RobotsTxt (drupal/robotstxt). Il construit le fichier dans l'UI et le stocke en config.

Renommez ou supprimez d'abord le fichier core. Sinon Drupal sert encore la copie statique et le module ne l'emporte jamais. Collez ensuite les groupes User-agent du début de cet article : Allow: / pour GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot et PerplexityBot sur les chemins publics. Pointez Sitemap: vers l'index Simple XML Sitemap. Exportez la config. En staging, gardez un Disallow: / (ou une surcouche Config Split) pour que les crawlers d'entraînement ne traitent pas l'hôte staging comme la production.

Faites un curl du nom d'hôte public après cela. Le robots.txt géré Cloudflare préfixe son propre Disallow pour GPTBot devant ce fichier. Le changement CMS ne compte que lorsque le fichier edge correspond.

Metatag : canonique, robots, title

Metatag possède les signaux au niveau page. Définissez des défauts par bundle, avec des tokens, pas node par node à la main.

  • Canonique : l'alias absolu de cette entité, pour que ?page= et /node/123 se replient sur une URL.
  • Robots : index, follow sur les bundles que vous voulez cités. noindex sur les pages de remerciement, le faceting de recherche et les layouts non publiés.
  • Title et description : tokens des mêmes champs que le H1 et le paragraphe d'ouverture, pour que le fetch et l'extrait soient d'accord.

Ajoutez le champ Metatag sur un bundle seulement là où un éditeur doit outrepasser un défaut. Un champ sur chaque node, c'est comment 300 pages finissent avec des overrides vides. Les vues qui sont des landing pages publiques reçoivent Metatag Views, pour que ces URL aient aussi une canonique.

JSON-LD à partir des mêmes champs

Schema.org Metatag étend Metatag et imprime <script type="application/ld+json"> dans le head. C'est le chemin que nous utilisons sur les sites existants. Mappez les tokens vers les propriétés schema par bundle : Product name depuis le titre, additionalProperty depuis hauteur et tension, Offer price et priceCurrency depuis le champ prix, Organization sameAs depuis une liste d'URL sociales site-wide, FAQPage seulement sur les bundles qui rendent une Q&R visible, Article dateModified depuis [node:changed:html_datetime].

Le mapping vit dans les défauts Metatag. Un éditeur ne colle jamais de JSON. Quand une propriété manque au module, un petit tag Metatag custom dans un module custom coûte moins qu'un script dans le thème qui dérivera.

Schema.org Blueprints (schemadotorg) est l'autre direction : il construit types de contenu et champs à partir des types schema.org, puis émet JSON-LD et un JSON:API propre. Utilisez-le sur un catalogue greenfield. N'exécutez pas les deux systèmes de mapping sur le même bundle.

Dans tous les cas, le balisage Schema.org doit être généré à partir du contenu, pas collé à la main dans un WYSIWYG. Un bloc JSON-LD écrit à la main est la version qui contredit le tableau après le prochain changement de prix.

Sitemap

Simple XML Sitemap (4.x sur Drupal 10.3/11) est le générateur que nous installons. Incluez les bundles que vous voulez cités, excluez le reste. Il écrit les alternates hreflang pour les entités traduites, peut ajouter des URL d'images, et peut exposer un index sitemap quand l'arborescence est grande. lastmod doit suivre l'heure de modification de l'entité, pas une reconstruction nocturne de chaque URL.

Ne listez pas les bundles noindex. Un sitemap qui annonce des URL que Metatag dit aux robots d'ignorer est un signal mixte. Après une publication, confirmez que le /sitemap.xml public contient l'alias, puis confirmez que Cloudflare ne sert pas un index vide en cache.

XML Sitemap (l'ancien projet) existe encore. Sur un nouveau build, Simple XML Sitemap est celui avec le support multilingue et IndexNow actuels.

Alias, redirections et fil d'Ariane

Pathauto donne à chaque bundle un motif stable (/products/[node:title], /industries/[term:name]). Redirect fait ensuite des 301 de /node/123 et des anciens alias vers ce motif, et enregistre les changements d'alias pour qu'une URL citée continue de résoudre.

Easy Breadcrumb peut émettre du JSON-LD BreadcrumbList à partir du même fil que voit le visiteur. Activez cela pour que la hiérarchie dans le script corresponde à celle de l'en-tête. Un second fil d'Ariane construit à la main dans schema_metatag sur la même page est un doublon à éviter.

Langues

La traduction de contenu core plus les préfixes de langue produisent déjà hreflang sur beaucoup de builds. Un catalogue multilingue a encore besoin d'un fait par langue : champs traduits, pas un dump machine de la source. Le sitemap hreflang de Simple XML Sitemap est comment les crawlers découvrent l'ensemble. La canonique sur une traduction pointe vers cette traduction, pas vers la langue source.

Cache tags et CDN

Les cache tags Drupal savent déjà quelle page a changé. Purge plus un purger (Cloudflare, Varnish, Fastly ou HTTP générique) supprime cet objet au edge. Le prochain fetch IA reçoit le nouveau HTML et le nouveau JSON-LD. Le reste du cache reste.

Alignez trois choses après chaque changement de politique de bots : robots.txt Drupal, politiques bots IA Cloudflare / fichier robots géré, et une purge du HTML que vous venez d'ouvrir avec curl. Les tests origine seuls manquent le Disallow préfixé.

Optionnel : llms.txt

llms.txt expose /llms.txt depuis la config et le contenu Drupal, avec cache tags pour qu'une publication rafraîchisse le fichier. Générez-le à partir des mêmes URL canoniques que Simple XML Sitemap liste déjà. C'est un pointeur, pas un substitut aux règles Allow ou au HTML.

C'est la stack qui permet à GPTBot, ChatGPT-User et au reste du tableau d'atteindre des pages qui contiennent déjà les faits en HTML et d'étiqueter ces faits en JSON-LD.

Questions fréquentes

Les crawlers IA exécutent-ils JavaScript ?

Les fetchers au moment de la réponse lisent en général le HTML téléchargé et s'arrêtent. Mettez les faits dans cette première réponse pour qu'ils puissent les utiliser.

Quels bots OpenAI faut-il autoriser ?

GPTBot pour que les futurs modèles s'entraînent sur vos pages publiques. ChatGPT-User pour que ChatGPT puisse récupérer pendant une question en direct. OAI-SearchBot pour que la recherche OpenAI puisse récupérer pour une réponse. Trois agents, trois rôles. Autorisez chacun pour le résultat que vous voulez.

Cloudflare bloque-t-il les crawlers IA par défaut ?

Sur les nouveaux domaines, depuis le 1er juillet 2025, Cloudflare vous demande de choisir et l'option conservatrice est le refus. Un robots.txt géré peut aussi préfixer Disallow pour GPTBot et ClaudeBot devant votre fichier CMS. Bot Fight Mode peut challenger les mêmes clients. Faites un curl du nom d'hôte public avec -A "GPTBot" et -A "ChatGPT-User", puis lisez Security Settings → Configure AI bot policies. Autorisez Training, Agent et Search pour les résultats du tableau ci-dessus. À partir du 15 septembre 2026, les nouveaux domaines refuseront Training et Agent sur les pages avec publicités sauf si vous changez cela.

Autoriser GPTBot me met-il dans les réponses ChatGPT d'aujourd'hui ?

C'est le chemin d'entraînement. Les réponses en direct utilisent ChatGPT-User. Autorisez les deux si vous voulez les deux résultats.

Un bon SEO suffit-il pour que ChatGPT lise le site ?

C'est la majeure partie du travail. Un site que Googlebot peut explorer, avec texte en HTML, sitemap et schéma aligné, est déjà lisible. Vous autorisez quand même les agents IA nommés (autoriser Googlebot est une règle différente), vous donnez encore 200 aux plages vérifiées au WAF, et vous publiez les specs comme valeurs qu'un prompt peut faire correspondre.

JSON-LD fait-il recommander mon entreprise par ChatGPT ?

JSON-LD type les faits déjà sur la page. Sur Google, c'est partie de Search, y compris AI Overviews. Sur un fetch ChatGPT brut, ce n'est pas prouvé comme levier de citation à lui seul. Générez-le à partir des mêmes champs que le HTML pour que les deux copies soient d'accord. C'est la version utile.

Le temps de réponse affecte-t-il les citations ?

Pour un fetch en direct, oui. Le HTML qui arrive vite est le HTML que l'assistant peut citer pendant que l'acheteur est encore dans le chat.

Vous voulez que nous vérifions votre stack ?

Envoyez une URL de production. Nous confirmerons quels bots sont autorisés à l'origine et au CDN, si Bot Fight Mode ou un robots.txt géré bloque, si le premier HTML contient les faits, si JSON-LD correspond à ces faits, et si le fetch en direct renvoie à temps. Nous faisons cela sur Drupal : robots et règles edge, pages rendues côté serveur, champs qui alimentent tableaux et schéma, cache tags derrière un CDN. Consultez notre agence Drupal ou écrivez-nous et nous exécuterons les fetches avec vous.