[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fc1Bji3UoBIdvh6lHdSmYS0qfSXko9zJzrCdufrdIxqw":3,"$fRhuUm0nEwIJ1GwwoJuSefUiKxHRCunzI-cpnL-OIejA":25},{"_id":4,"slug":5,"__v":6,"author":7,"body":8,"canonical":9,"category":10,"createdAt":11,"date":12,"description":13,"htmlContent":14,"image":15,"imageAlt":15,"readingTime":16,"tags":17,"title":23,"updatedAt":24},"6a13e60baa6b273b0c5c113f","all-you-need-to-know-about-cloudflare-s-agent-readiness-score-via-sejournal-slobodanmanic",0,"Equipe Seogard","Cloudflare a lancé un outil qui attribue un score de \"readiness\" à n'importe quel domaine, mesurant sa capacité à interagir avec les AI agents. Beaucoup de responsables SEO ont découvert un score de 20/100 et paniqué. Avant de lancer un sprint correctif, il faut comprendre ce que ce score mesure réellement — et surtout ce qu'il ne mesure pas.\n\n## Ce que Cloudflare évalue (et la méthodologie derrière le score)\n\nLe Agent Readiness Score de Cloudflare repose sur une série de vérifications automatisées qui inspectent la surface technique d'un site exposée aux AI agents. Contrairement à un audit Lighthouse qui évalue les performances front-end, ce score évalue la **lisibilité machine structurée** : est-ce qu'un agent autonome (pas un crawler classique, pas un humain) peut comprendre, négocier et interagir avec votre site de façon programmatique ?\n\nLes checks se répartissent en plusieurs catégories :\n\n### Fichiers de déclaration d'intention\n\nCloudflare vérifie la présence de fichiers comme `robots.txt`, `llms.txt`, `llms-full.txt`, `ai.txt`, et `/.well-known/agent.json`. Chacun remplit un rôle distinct :\n\n- `robots.txt` : standard historique, mais Cloudflare évalue aussi la granularité des directives pour les user-agents IA (GPTBot, ClaudeBot, Google-Extended, etc.)\n- `llms.txt` : un format émergent proposé pour décrire le contenu d'un site à destination des LLMs (description du site, sitemap sémantique, liens vers les contenus principaux)\n- `/.well-known/agent.json` : le fichier clé pour l'interopérabilité agent. Il déclare les capacités du site, les endpoints API, les protocoles supportés (MCP, A2A, etc.)\n\nGoogle lui-même a publié des guidelines contradictoires selon ses produits sur la gestion de `llms.txt`, comme [analysé dans cet article](/blog/google-s-llms-txt-guidance-depends-on-which-product-you-ask-via-sejournal-mattgsouthern). Le fait que Cloudflare évalue ce fichier comme un critère binaire (présent/absent) sans pondérer la qualité de son contenu est une première limite méthodologique.\n\n### Données structurées et machine-readability\n\nLe score pénalise l'absence de Schema.org, mais de façon assez grossière. Un site e-commerce sans `Product` schema perdra des points. Un blog sans `Article` schema aussi. Mais un SaaS B2B qui vend un service intangible n'a souvent aucun type de schéma pertinent à implémenter au-delà de `Organization` et `WebSite`.\n\n### Endpoints d'interaction\n\nC'est la partie la plus avant-gardiste — et la moins applicable aujourd'hui. Cloudflare vérifie si votre site expose des endpoints compatibles avec des protocoles d'agents : est-ce qu'un agent peut réserver, acheter, interroger une base de connaissances via une API déclarée ? Pour 95% des sites, la réponse est non, et c'est normal.\n\n## Pourquoi votre score est probablement plus bas qu'il ne devrait l'être\n\nPrenons un cas concret. Un média en ligne avec 8 000 articles, construit sur Next.js avec SSR, bonne implémentation Schema.org (`NewsArticle`, `BreadcrumbList`, `Organization`), `robots.txt` propre, sitemap XML à jour. Ce site obtient un Agent Readiness Score de 30/100.\n\nPourquoi ? Parce que le score intègre des vérifications qui ne s'appliquent pas à un média :\n\n- **Pas de `/.well-known/agent.json`** : un média n'a pas d'API transactionnelle à exposer aux agents. Il n'y a rien à \"réserver\" ou \"acheter\" via un agent autonome. Pénalité injustifiée.\n- **Pas de `llms-full.txt`** : ce fichier est censé fournir un dump exhaustif du contenu pour ingestion LLM. Pour un média qui publie 20 articles/jour, maintenir ce fichier est irréaliste et potentiellement contre-productif (vous donnez votre contenu gratuitement aux modèles sans contrepartie).\n- **Pas de protocole MCP/A2A détecté** : ces protocoles sont conçus pour des interactions transactionnelles (réservation, e-commerce, services). Un site éditorial n'en a pas besoin.\n\nLe score de 30/100 reflète donc une **inadéquation entre la grille d'évaluation et le type de site**, pas un problème technique réel.\n\nÀ l'inverse, un site e-commerce de 15 000 SKUs qui n'implémente aucune de ces couches a un vrai problème stratégique. Les AI agents shopping (Google Shopping avec Gemini, Amazon Rufus, etc.) vont privilégier les catalogues qu'ils peuvent parser programmatiquement. Pour ce type de site, chaque point du score correspond à un delta de visibilité futur mesurable.\n\n## Les checks qui comptent réellement, par type de site\n\n### Site e-commerce (5 000 à 50 000 produits)\n\nVoici les éléments qui ont un impact réel sur la capacité des agents à interagir avec votre catalogue :\n\n**1. Schema Product avec toutes les propriétés transactionnelles**\n\n```html\n\u003Cscript type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Product\",\n  \"name\": \"Câble USB-C Thunderbolt 4 — 2m\",\n  \"sku\": \"TB4-USBC-2M\",\n  \"gtin13\": \"5901234123457\",\n  \"brand\": {\n    \"@type\": \"Brand\",\n    \"name\": \"CablePro\"\n  },\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"url\": \"https://cablestore.fr/produits/tb4-usbc-2m\",\n    \"priceCurrency\": \"EUR\",\n    \"price\": \"34.99\",\n    \"availability\": \"https://schema.org/InStock\",\n    \"shippingDetails\": {\n      \"@type\": \"OfferShippingDetails\",\n      \"shippingRate\": {\n        \"@type\": \"MonetaryAmount\",\n        \"value\": \"4.90\",\n        \"currency\": \"EUR\"\n      },\n      \"deliveryTime\": {\n        \"@type\": \"ShippingDeliveryTime\",\n        \"handlingTime\": {\n          \"@type\": \"QuantitativeValue\",\n          \"minValue\": 0,\n          \"maxValue\": 1,\n          \"unitCode\": \"DAY\"\n        },\n        \"transitTime\": {\n          \"@type\": \"QuantitativeValue\",\n          \"minValue\": 1,\n          \"maxValue\": 3,\n          \"unitCode\": \"DAY\"\n        }\n      }\n    },\n    \"hasMerchantReturnPolicy\": {\n      \"@type\": \"MerchantReturnPolicy\",\n      \"returnPolicyCategory\": \"https://schema.org/MerchantReturnFiniteReturnWindow\",\n      \"merchantReturnDays\": 30,\n      \"returnMethod\": \"https://schema.org/ReturnByMail\"\n    }\n  }\n}\n\u003C/script>\n```\n\nLes propriétés `shippingDetails` et `hasMerchantReturnPolicy` sont celles que la plupart des sites oublient. Ce sont précisément celles qu'un agent shopping va interroger pour comparer des offres et prendre une décision d'achat au nom de l'utilisateur.\n\n**2. Le fichier `/.well-known/agent.json`**\n\nPour un e-commerce, ce fichier a un sens. Il déclare les capacités transactionnelles du site :\n\n```json\n{\n  \"schema_version\": \"1.0\",\n  \"name\": \"CableStore\",\n  \"description\": \"Vente de câbles et accessoires informatiques professionnels\",\n  \"url\": \"https://cablestore.fr\",\n  \"capabilities\": {\n    \"product_search\": {\n      \"endpoint\": \"https://cablestore.fr/api/v1/products/search\",\n      \"method\": \"GET\",\n      \"parameters\": {\n        \"q\": \"string — search query\",\n        \"category\": \"string — product category slug\",\n        \"min_price\": \"number\",\n        \"max_price\": \"number\",\n        \"in_stock\": \"boolean\"\n      }\n    },\n    \"product_detail\": {\n      \"endpoint\": \"https://cablestore.fr/api/v1/products/{sku}\",\n      \"method\": \"GET\"\n    }\n  },\n  \"authentication\": {\n    \"type\": \"api_key\",\n    \"header\": \"X-Agent-Key\"\n  },\n  \"rate_limits\": {\n    \"requests_per_minute\": 60\n  },\n  \"contact\": \"agents@cablestore.fr\"\n}\n```\n\nCe fichier n'a pas encore de spécification standardisée définitive. Cloudflare pousse sa propre structure. Google travaille sur le [User-Chosen Products (UCP) framework](/blog/what-google-s-ucp-tells-us-about-agent-ready-websites-via-sejournal-slobodanmanic) qui couvre un périmètre similaire mais avec des conventions différentes. L'important est d'avoir **quelque chose** de structuré plutôt que rien.\n\n### Site éditorial / média\n\nPour un média, les checks réellement pertinents sont :\n\n- **`robots.txt` avec directives granulaires** pour les bots IA (vous décidez ce que les LLMs peuvent ou ne peuvent pas ingérer)\n- **Schema `NewsArticle` / `Article` complet** avec `datePublished`, `dateModified`, `author` typé en `Person` avec `sameAs`\n- **`llms.txt` basique** (optionnel, et à gérer avec discernement)\n\nLe fichier `agent.json` avec des endpoints transactionnels ? Inutile. Le score de Cloudflare vous pénalise pour ça, mais c'est du bruit.\n\n### SaaS B2B\n\nPour un SaaS, la situation est intermédiaire. Un agent pourrait vouloir :\n\n- Interroger votre documentation technique (un `llms.txt` pointant vers votre doc API a du sens)\n- Vérifier vos plans tarifaires (schema `SoftwareApplication` avec `offers`)\n- Initier un trial via API\n\nMais si votre modèle commercial repose sur un processus de vente avec démo et qualification, exposer un endpoint de signup aux agents n'est pas forcément souhaitable.\n\n## Comment auditer votre score et prioriser les actions\n\n### Étape 1 : récupérer le détail du score\n\nCloudflare expose le score sur son dashboard pour les domaines qu'il proxifie. Pour les autres, l'outil public donne un score global. Mais le score global est insuffisant — vous avez besoin du détail par catégorie de check.\n\nCommencez par vérifier manuellement les fichiers attendus :\n\n```bash\n# Vérifier la présence des fichiers de déclaration\nfor file in robots.txt llms.txt llms-full.txt .well-known/agent.json ai.txt; do\n  status=$(curl -s -o /dev/null -w \"%{http_code}\" \"https://cablestore.fr/$file\")\n  echo \"$file: HTTP $status\"\ndone\n\n# Résultat attendu :\n# robots.txt: HTTP 200\n# llms.txt: HTTP 404\n# llms-full.txt: HTTP 404\n# .well-known/agent.json: HTTP 404\n# ai.txt: HTTP 404\n```\n\nCe script trivial vous donne en 5 secondes la carte de ce qui manque. Ensuite, classez chaque fichier manquant en trois catégories : **pertinent pour votre type de site**, **optionnel mais utile**, **non applicable**.\n\n### Étape 2 : auditer les données structurées avec Screaming Frog\n\nLancez un crawl Screaming Frog en activant l'extraction de structured data (Configuration > Spider > Extraction > JSON-LD). Exportez vers un CSV et vérifiez la couverture :\n\n- Quel pourcentage de vos pages produit ont un schema `Product` ?\n- Combien incluent `offers`, `availability`, `shippingDetails` ?\n- Vos pages auteur ont-elles un schema `Person` avec `sameAs` pointant vers des profils vérifiables ?\n\nSur un e-commerce de 15 000 pages produit, vous découvrirez typiquement que 60-70% des pages ont un schema `Product` basique (nom, prix, disponibilité) mais que moins de 15% incluent `shippingDetails` et `hasMerchantReturnPolicy`. Ce delta de 85% représente votre surface d'amélioration la plus impactante.\n\n### Étape 3 : prioriser par impact business, pas par score Cloudflare\n\nLe score Cloudflare pondère tous les checks de façon relativement égale. Votre priorisation doit être différente :\n\n| Check | E-commerce | Média | SaaS B2B |\n|-------|-----------|-------|----------|\n| `robots.txt` granulaire (user-agents IA) | Haute | Haute | Moyenne |\n| Schema complet avec propriétés transactionnelles | Critique | N/A | Moyenne |\n| `llms.txt` | Moyenne | Basse* | Haute |\n| `/.well-known/agent.json` | Haute | Basse | Moyenne |\n| Protocole MCP/A2A | Basse (sauf marketplace) | N/A | Basse |\n\n*Basse pour un média car fournir un `llms.txt` exhaustif revient à offrir votre contenu aux modèles gratuitement. C'est une décision business, pas technique.\n\n## Implémenter `llms.txt` sans offrir votre contenu gratuitement\n\nLe fichier `llms.txt` est un standard proposé (pas encore formalisé en RFC). Sa structure est simple : un fichier texte à la racine du site qui décrit le contenu et pointe vers les ressources clés.\n\nLe piège : beaucoup d'implémentations suggèrent d'y lister toutes vos URLs avec des descriptions complètes. Pour un média ou un site dont la valeur réside dans le contenu lui-même, c'est un cadeau empoisonné. Vous facilitez l'ingestion par les LLMs sans aucune garantie de citation ou de trafic retour.\n\nL'approche pragmatique :\n\n```\n# cablestore.fr\n\n> CableStore est le spécialiste français des câbles et connectique professionnelle. \n> Catalogue de 15 000 références avec specs techniques détaillées.\n\n## Documentation\n- [Guide de compatibilité USB-C](https://cablestore.fr/guides/compatibilite-usb-c): Matrice complète de compatibilité USB-C par protocole (USB 2.0 à USB4, Thunderbolt 3/4/5)\n- [API Catalogue](https://cablestore.fr/developers/api): Documentation de l'API REST pour intégrations partenaires\n\n## Catégories principales  \n- [Câbles USB-C](https://cablestore.fr/cables-usb-c): Câbles USB-C certifiés, triés par protocole et longueur\n- [Câbles HDMI](https://cablestore.fr/cables-hdmi): Câbles HDMI 2.0 et 2.1, certifiés Ultra High Speed\n- [Adaptateurs](https://cablestore.fr/adaptateurs): Adaptateurs et hubs multiport\n\n## Politique\nPour toute utilisation commerciale de nos données produit, contactez partenariats@cablestore.fr\n```\n\nRemarquez ce qui n'y figure pas : les fiches produit individuelles, les prix, les avis clients. Vous exposez la **structure** et les **contenus éducatifs** (qui servent votre autorité), pas les données transactionnelles (qui servent votre CA).\n\nCe positionnement est cohérent avec [l'approche de Google sur la visibilité des marques dans les résultats IA](/blog/what-makes-a-brand-machine-readable-in-ai-search) : les agents doivent comprendre **qui** vous êtes et **ce que** vous proposez, pas nécessairement accéder à chaque donnée produit sans passer par votre site.\n\n## Gérer les user-agents IA dans `robots.txt` : au-delà du binaire\n\nLa plupart des implémentations `robots.txt` traitent les bots IA en bloc : tout autoriser ou tout bloquer. L'approche fine consiste à segmenter par intention :\n\n```\n# robots.txt — CableStore\n# Crawlers de recherche classiques\nUser-agent: Googlebot\nAllow: /\n\nUser-agent: Bingbot\nAllow: /\n\n# Agents IA pour l'indexation de contenu (training data)\n# Bloquer — notre contenu n'est pas gratuit pour le training\nUser-agent: GPTBot\nDisallow: /\n\nUser-agent: Google-Extended\nDisallow: /\n\nUser-agent: CCBot\nDisallow: /\n\nUser-agent: anthropic-ai\nDisallow: /\n\n# Agents IA pour le shopping / comparaison (trafic transactionnel)\n# Autoriser — ces agents génèrent des conversions\nUser-agent: Google-Shopping\nAllow: /produits/\nAllow: /api/v1/products/\nDisallow: /compte/\nDisallow: /panier/\n\n# Agent Google généraliste (Gemini dans Search)\nUser-agent: Google-InternalBot\nAllow: /produits/\nAllow: /guides/\nDisallow: /compte/\n\n# Fallback\nUser-agent: *\nAllow: /\nDisallow: /admin/\nDisallow: /compte/\nDisallow: /panier/\n\nSitemap: https://cablestore.fr/sitemap-index.xml\n```\n\nUn point critique : à ce jour, `Google-Shopping` n'est pas un user-agent officiel. Google utilise `Googlebot` pour l'essentiel de ses crawls, y compris Shopping. La segmentation granulaire par user-agent IA est donc encore **aspirationnelle** pour certains agents. Mais `GPTBot`, `ClaudeBot`, `CCBot` et `Google-Extended` sont documentés et respectés par leurs opérateurs respectifs.\n\nVérifiez régulièrement dans vos logs serveur quels user-agents IA crawlent effectivement votre site. Un outil comme GoAccess ou une analyse directe des access logs vous donnera la réalité terrain :\n\n```bash\n# Identifier les bots IA dans vos access logs Nginx\ngrep -iE \"(GPTBot|ClaudeBot|CCBot|Google-Extended|anthropic|Bytespider|PetalBot)\" \\\n  /var/log/nginx/access.log | \\\n  awk '{print $14}' | sort | uniq -c | sort -rn | head -20\n```\n\nSi `GPTBot` crawle 50 000 URLs/jour sur votre site média et que vous ne le bloquez pas, vous offrez votre production éditoriale à OpenAI sans contrepartie. Le score Cloudflare vous dira que c'est \"bien\" parce que vous êtes \"ouvert\" aux agents. Votre directeur éditorial aura un avis différent.\n\n## Le vrai enjeu derrière le score : la course au protocole\n\nLe Agent Readiness Score de Cloudflare n'est pas un outil neutre d'évaluation technique. C'est un levier stratégique pour Cloudflare, qui développe activement son propre écosystème d'AI agents (Cloudflare Workers AI, AI Gateway, etc.). En promouvant une grille d'évaluation qui valorise les formats et protocoles qu'ils supportent, Cloudflare se positionne comme l'infrastructure de référence pour l'ère des agents.\n\nCe n'est pas une critique — c'est un constat. Google fait exactement la même chose avec ses recommandations sur les données structurées et le [protocole UCP](/blog/what-google-s-ucp-tells-us-about-agent-ready-websites-via-sejournal-slobodanmanic). Anthropic pousse MCP ([Model Context Protocol](https://modelcontextprotocol.io/)). Google répond avec A2A ([Agent-to-Agent](https://google.github.io/A2A/)).\n\nPour un responsable technique, le risque est d'investir massivement dans un protocole qui ne deviendra pas le standard. L'approche défensive : implémenter les couches de base qui seront utiles quel que soit le protocole gagnant.\n\nCes couches de base sont :\n1. Des données structurées Schema.org complètes (le plus petit dénominateur commun)\n2. Un `robots.txt` avec des directives granulaires par user-agent\n3. Un `llms.txt` minimal décrivant la structure du site\n4. Des APIs REST documentées si votre site a une dimension transactionnelle\n\nLes protocoles MCP et A2A sont encore trop immatures pour justifier un investissement d'implémentation sur un site de production, sauf si vous êtes une marketplace ou une plateforme de réservation où l'interaction agent est déjà une réalité (pensez à Booking.com, pas à votre blog corporate).\n\n## Monitoring continu : ne pas traiter le score comme un snapshot\n\nLe score Cloudflare est une photo à un instant T. Mais les fichiers de configuration évoluent, les déploiements cassent des choses, et les équipes de développement ne pensent pas toujours au `llms.txt` quand elles reconfigurent le serveur.\n\nUn scénario classique : votre équipe DevOps migre vers une nouvelle infrastructure. Le reverse proxy est reconfiguré. Le `/.well-known/agent.json` retourne un 404 parce que personne n'a pensé à ajouter la route dans la nouvelle config Nginx. Pendant 6 semaines, les agents qui tentent de découvrir vos capabilities transactionnelles repartent bredouilles.\n\nCe type de régression silencieuse est exactement ce qu'un outil de monitoring comme Seogard détecte automatiquement. Comme pour les [metas qui disparaissent lors d'une migration de framework](/blog/migration-next-js-pages-router-vers-app-router-les-metadata-ignorees-sur-les-pages-client), les fichiers d'interopérabilité agent sont des cibles de régression que personne ne surveille manuellement.\n\nIntégrez la vérification de ces fichiers dans vos checks de déploiement :\n\n```yaml\n# Extrait d'un pipeline CI/CD — vérification post-deploy\nagent-readiness-check:\n  stage: post-deploy\n  script:\n    - |\n      DOMAIN=\"https://cablestore.fr\"\n      ERRORS=0\n      \n      for path in \"/robots.txt\" \"/llms.txt\" \"/.well-known/agent.json\" \"/sitemap-index.xml\"; do\n        STATUS=$(curl -s -o /dev/null -w \"%{http_code}\" \"${DOMAIN}${path}\")\n        if [ \"$STATUS\" != \"200\" ]; then\n          echo \"❌ ${path} returned HTTP ${STATUS}\"\n          ERRORS=$((ERRORS + 1))\n        else\n          echo \"✅ ${path} OK\"\n        fi\n      done\n      \n      # Vérifier que le schema JSON-LD est présent sur la homepage\n      SCHEMA_COUNT=$(curl -s \"${DOMAIN}\" | grep -c \"application/ld+json\")\n      if [ \"$SCHEMA_COUNT\" -eq 0 ]; then\n        echo \"❌ No JSON-LD schema found on homepage\"\n        ERRORS=$((ERRORS + 1))\n      else\n        echo \"✅ JSON-LD schema found (${SCHEMA_COUNT} blocks)\"\n      fi\n      \n      if [ \"$ERRORS\" -gt 0 ]; then\n        echo \"⚠️ ${ERRORS} agent readiness check(s) failed\"\n        exit 1\n      fi\n  only:\n    - main\n```\n\nCe check de 30 lignes dans votre pipeline CI/CD évite des semaines de régression non détectée. C'est le strict minimum.\n\n## Ce que le score ne dit pas (et qui importe plus)\n\nLe Agent Readiness Score ne mesure pas :\n\n- **La qualité de vos données structurées** : il vérifie la présence, pas la validité. Un schema `Product` avec des `offers` vides passera le check mais sera inutile pour un agent.\n- **La performance de vos endpoints** : déclarer une API dans `agent.json` ne sert à rien si elle répond en 8 secondes ou retourne des erreurs 30% du temps.\n- **La fraîcheur de vos données** : un `llms.txt` qui pointe vers des URLs 404 est pire que pas de `llms.txt` du tout.\n- **L'alignement avec votre stratégie business** : ouvrir tous vos contenus aux agents de training est \"agent-ready\" selon le score, mais potentiellement destructeur de valeur.\n\nCes dimensions qualitatives sont invisibles dans un score automatisé. Elles nécessitent un jugement humain informé par une compréhension du modèle business du site.\n\nLe score est un point de départ utile pour identifier les lacunes évidentes — pas une feuille de route d'implémentation. Filtrez chaque recommandation à travers cette question : **est-ce qu'un agent AI interagissant avec cette fonctionnalité génère de la valeur pour mon business ?** Si la réponse est non, le check échoué est du bruit, pas un signal.\n\nLe Cloudflare Agent Readiness Score va probablement évoluer rapidement à mesure que les protocoles se stabilisent. Les actions qui survivront à toutes les itérations sont les fondamentaux : des données structurées complètes, un `robots.txt` réfléchi, et un monitoring continu pour détecter les régressions dès qu'elles surviennent — ce qui est précisément le type de surveillance automatique que [Seogard surveille en permanence](https://seogard.io) sur votre périmètre technique.","https://seogard.io/blog/all-you-need-to-know-about-cloudflare-s-agent-readiness-score-via-sejournal-slobodanmanic","Actualités SEO","2026-05-25T06:02:51.630Z","2026-05-25","Analyse technique du score Agent Readiness de Cloudflare. Quels checks comptent selon votre type de site, et comment améliorer ce qui a un impact réel.","\u003Cp>Cloudflare a lancé un outil qui attribue un score de \"readiness\" à n'importe quel domaine, mesurant sa capacité à interagir avec les AI agents. Beaucoup de responsables SEO ont découvert un score de 20/100 et paniqué. Avant de lancer un sprint correctif, il faut comprendre ce que ce score mesure réellement — et surtout ce qu'il ne mesure pas.\u003C/p>\n\u003Ch2>Ce que Cloudflare évalue (et la méthodologie derrière le score)\u003C/h2>\n\u003Cp>Le Agent Readiness Score de Cloudflare repose sur une série de vérifications automatisées qui inspectent la surface technique d'un site exposée aux AI agents. Contrairement à un audit Lighthouse qui évalue les performances front-end, ce score évalue la \u003Cstrong>lisibilité machine structurée\u003C/strong> : est-ce qu'un agent autonome (pas un crawler classique, pas un humain) peut comprendre, négocier et interagir avec votre site de façon programmatique ?\u003C/p>\n\u003Cp>Les checks se répartissent en plusieurs catégories :\u003C/p>\n\u003Ch3>Fichiers de déclaration d'intention\u003C/h3>\n\u003Cp>Cloudflare vérifie la présence de fichiers comme \u003Ccode>robots.txt\u003C/code>, \u003Ccode>llms.txt\u003C/code>, \u003Ccode>llms-full.txt\u003C/code>, \u003Ccode>ai.txt\u003C/code>, et \u003Ccode>/.well-known/agent.json\u003C/code>. Chacun remplit un rôle distinct :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ccode>robots.txt\u003C/code> : standard historique, mais Cloudflare évalue aussi la granularité des directives pour les user-agents IA (GPTBot, ClaudeBot, Google-Extended, etc.)\u003C/li>\n\u003Cli>\u003Ccode>llms.txt\u003C/code> : un format émergent proposé pour décrire le contenu d'un site à destination des LLMs (description du site, sitemap sémantique, liens vers les contenus principaux)\u003C/li>\n\u003Cli>\u003Ccode>/.well-known/agent.json\u003C/code> : le fichier clé pour l'interopérabilité agent. Il déclare les capacités du site, les endpoints API, les protocoles supportés (MCP, A2A, etc.)\u003C/li>\n\u003C/ul>\n\u003Cp>Google lui-même a publié des guidelines contradictoires selon ses produits sur la gestion de \u003Ccode>llms.txt\u003C/code>, comme \u003Ca href=\"/blog/google-s-llms-txt-guidance-depends-on-which-product-you-ask-via-sejournal-mattgsouthern\">analysé dans cet article\u003C/a>. Le fait que Cloudflare évalue ce fichier comme un critère binaire (présent/absent) sans pondérer la qualité de son contenu est une première limite méthodologique.\u003C/p>\n\u003Ch3>Données structurées et machine-readability\u003C/h3>\n\u003Cp>Le score pénalise l'absence de Schema.org, mais de façon assez grossière. Un site e-commerce sans \u003Ccode>Product\u003C/code> schema perdra des points. Un blog sans \u003Ccode>Article\u003C/code> schema aussi. Mais un SaaS B2B qui vend un service intangible n'a souvent aucun type de schéma pertinent à implémenter au-delà de \u003Ccode>Organization\u003C/code> et \u003Ccode>WebSite\u003C/code>.\u003C/p>\n\u003Ch3>Endpoints d'interaction\u003C/h3>\n\u003Cp>C'est la partie la plus avant-gardiste — et la moins applicable aujourd'hui. Cloudflare vérifie si votre site expose des endpoints compatibles avec des protocoles d'agents : est-ce qu'un agent peut réserver, acheter, interroger une base de connaissances via une API déclarée ? Pour 95% des sites, la réponse est non, et c'est normal.\u003C/p>\n\u003Ch2>Pourquoi votre score est probablement plus bas qu'il ne devrait l'être\u003C/h2>\n\u003Cp>Prenons un cas concret. Un média en ligne avec 8 000 articles, construit sur Next.js avec SSR, bonne implémentation Schema.org (\u003Ccode>NewsArticle\u003C/code>, \u003Ccode>BreadcrumbList\u003C/code>, \u003Ccode>Organization\u003C/code>), \u003Ccode>robots.txt\u003C/code> propre, sitemap XML à jour. Ce site obtient un Agent Readiness Score de 30/100.\u003C/p>\n\u003Cp>Pourquoi ? Parce que le score intègre des vérifications qui ne s'appliquent pas à un média :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Pas de \u003Ccode>/.well-known/agent.json\u003C/code>\u003C/strong> : un média n'a pas d'API transactionnelle à exposer aux agents. Il n'y a rien à \"réserver\" ou \"acheter\" via un agent autonome. Pénalité injustifiée.\u003C/li>\n\u003Cli>\u003Cstrong>Pas de \u003Ccode>llms-full.txt\u003C/code>\u003C/strong> : ce fichier est censé fournir un dump exhaustif du contenu pour ingestion LLM. Pour un média qui publie 20 articles/jour, maintenir ce fichier est irréaliste et potentiellement contre-productif (vous donnez votre contenu gratuitement aux modèles sans contrepartie).\u003C/li>\n\u003Cli>\u003Cstrong>Pas de protocole MCP/A2A détecté\u003C/strong> : ces protocoles sont conçus pour des interactions transactionnelles (réservation, e-commerce, services). Un site éditorial n'en a pas besoin.\u003C/li>\n\u003C/ul>\n\u003Cp>Le score de 30/100 reflète donc une \u003Cstrong>inadéquation entre la grille d'évaluation et le type de site\u003C/strong>, pas un problème technique réel.\u003C/p>\n\u003Cp>À l'inverse, un site e-commerce de 15 000 SKUs qui n'implémente aucune de ces couches a un vrai problème stratégique. Les AI agents shopping (Google Shopping avec Gemini, Amazon Rufus, etc.) vont privilégier les catalogues qu'ils peuvent parser programmatiquement. Pour ce type de site, chaque point du score correspond à un delta de visibilité futur mesurable.\u003C/p>\n\u003Ch2>Les checks qui comptent réellement, par type de site\u003C/h2>\n\u003Ch3>Site e-commerce (5 000 à 50 000 produits)\u003C/h3>\n\u003Cp>Voici les éléments qui ont un impact réel sur la capacité des agents à interagir avec votre catalogue :\u003C/p>\n\u003Cp>\u003Cstrong>1. Schema Product avec toutes les propriétés transactionnelles\u003C/strong>\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">script\u003C/span>\u003Cspan style=\"color:#B392F0\"> type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"application/ld+json\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"@context\": \"https://schema.org\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"@type\": \"Product\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"name\": \"Câble USB-C Thunderbolt 4 — 2m\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"sku\": \"TB4-USBC-2M\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"gtin13\": \"5901234123457\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"brand\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"Brand\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"name\": \"CablePro\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"offers\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"Offer\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"url\": \"https://cablestore.fr/produits/tb4-usbc-2m\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"priceCurrency\": \"EUR\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"price\": \"34.99\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"availability\": \"https://schema.org/InStock\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"shippingDetails\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"@type\": \"OfferShippingDetails\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"shippingRate\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"@type\": \"MonetaryAmount\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"value\": \"4.90\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"currency\": \"EUR\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"deliveryTime\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"@type\": \"ShippingDeliveryTime\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"handlingTime\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"@type\": \"QuantitativeValue\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"minValue\": 0,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"maxValue\": 1,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"unitCode\": \"DAY\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        \"transitTime\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"@type\": \"QuantitativeValue\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"minValue\": 1,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"maxValue\": 3,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          \"unitCode\": \"DAY\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"hasMerchantReturnPolicy\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"@type\": \"MerchantReturnPolicy\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"returnPolicyCategory\": \"https://schema.org/MerchantReturnFiniteReturnWindow\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"merchantReturnDays\": 30,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"returnMethod\": \"https://schema.org/ReturnByMail\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">script\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Les propriétés \u003Ccode>shippingDetails\u003C/code> et \u003Ccode>hasMerchantReturnPolicy\u003C/code> sont celles que la plupart des sites oublient. Ce sont précisément celles qu'un agent shopping va interroger pour comparer des offres et prendre une décision d'achat au nom de l'utilisateur.\u003C/p>\n\u003Cp>\u003Cstrong>2. Le fichier \u003Ccode>/.well-known/agent.json\u003C/code>\u003C/strong>\u003C/p>\n\u003Cp>Pour un e-commerce, ce fichier a un sens. Il déclare les capacités transactionnelles du site :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"schema_version\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"1.0\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"name\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"CableStore\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"description\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Vente de câbles et accessoires informatiques professionnels\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"url\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://cablestore.fr\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"capabilities\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"product_search\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      \"endpoint\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://cablestore.fr/api/v1/products/search\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      \"method\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"GET\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      \"parameters\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        \"q\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"string — search query\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        \"category\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"string — product category slug\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        \"min_price\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"number\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        \"max_price\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"number\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        \"in_stock\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"boolean\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"product_detail\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      \"endpoint\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://cablestore.fr/api/v1/products/{sku}\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      \"method\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"GET\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"authentication\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"type\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"api_key\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"header\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"X-Agent-Key\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"rate_limits\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"requests_per_minute\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">60\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"contact\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"agents@cablestore.fr\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce fichier n'a pas encore de spécification standardisée définitive. Cloudflare pousse sa propre structure. Google travaille sur le \u003Ca href=\"/blog/what-google-s-ucp-tells-us-about-agent-ready-websites-via-sejournal-slobodanmanic\">User-Chosen Products (UCP) framework\u003C/a> qui couvre un périmètre similaire mais avec des conventions différentes. L'important est d'avoir \u003Cstrong>quelque chose\u003C/strong> de structuré plutôt que rien.\u003C/p>\n\u003Ch3>Site éditorial / média\u003C/h3>\n\u003Cp>Pour un média, les checks réellement pertinents sont :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>\u003Ccode>robots.txt\u003C/code> avec directives granulaires\u003C/strong> pour les bots IA (vous décidez ce que les LLMs peuvent ou ne peuvent pas ingérer)\u003C/li>\n\u003Cli>\u003Cstrong>Schema \u003Ccode>NewsArticle\u003C/code> / \u003Ccode>Article\u003C/code> complet\u003C/strong> avec \u003Ccode>datePublished\u003C/code>, \u003Ccode>dateModified\u003C/code>, \u003Ccode>author\u003C/code> typé en \u003Ccode>Person\u003C/code> avec \u003Ccode>sameAs\u003C/code>\u003C/li>\n\u003Cli>\u003Cstrong>\u003Ccode>llms.txt\u003C/code> basique\u003C/strong> (optionnel, et à gérer avec discernement)\u003C/li>\n\u003C/ul>\n\u003Cp>Le fichier \u003Ccode>agent.json\u003C/code> avec des endpoints transactionnels ? Inutile. Le score de Cloudflare vous pénalise pour ça, mais c'est du bruit.\u003C/p>\n\u003Ch3>SaaS B2B\u003C/h3>\n\u003Cp>Pour un SaaS, la situation est intermédiaire. Un agent pourrait vouloir :\u003C/p>\n\u003Cul>\n\u003Cli>Interroger votre documentation technique (un \u003Ccode>llms.txt\u003C/code> pointant vers votre doc API a du sens)\u003C/li>\n\u003Cli>Vérifier vos plans tarifaires (schema \u003Ccode>SoftwareApplication\u003C/code> avec \u003Ccode>offers\u003C/code>)\u003C/li>\n\u003Cli>Initier un trial via API\u003C/li>\n\u003C/ul>\n\u003Cp>Mais si votre modèle commercial repose sur un processus de vente avec démo et qualification, exposer un endpoint de signup aux agents n'est pas forcément souhaitable.\u003C/p>\n\u003Ch2>Comment auditer votre score et prioriser les actions\u003C/h2>\n\u003Ch3>Étape 1 : récupérer le détail du score\u003C/h3>\n\u003Cp>Cloudflare expose le score sur son dashboard pour les domaines qu'il proxifie. Pour les autres, l'outil public donne un score global. Mais le score global est insuffisant — vous avez besoin du détail par catégorie de check.\u003C/p>\n\u003Cp>Commencez par vérifier manuellement les fichiers attendus :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Vérifier la présence des fichiers de déclaration\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> file \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> robots.txt\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> llms.txt\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> llms-full.txt\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> .well-known/agent.json\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> ai.txt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; \u003C/span>\u003Cspan style=\"color:#F97583\">do\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  status\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$(\u003C/span>\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -o\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /dev/null\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -w\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"%{http_code}\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"https://cablestore.fr/\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$file\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$file\u003C/span>\u003Cspan style=\"color:#9ECBFF\">: HTTP \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$status\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">done\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Résultat attendu :\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># robots.txt: HTTP 200\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># llms.txt: HTTP 404\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># llms-full.txt: HTTP 404\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># .well-known/agent.json: HTTP 404\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># ai.txt: HTTP 404\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce script trivial vous donne en 5 secondes la carte de ce qui manque. Ensuite, classez chaque fichier manquant en trois catégories : \u003Cstrong>pertinent pour votre type de site\u003C/strong>, \u003Cstrong>optionnel mais utile\u003C/strong>, \u003Cstrong>non applicable\u003C/strong>.\u003C/p>\n\u003Ch3>Étape 2 : auditer les données structurées avec Screaming Frog\u003C/h3>\n\u003Cp>Lancez un crawl Screaming Frog en activant l'extraction de structured data (Configuration > Spider > Extraction > JSON-LD). Exportez vers un CSV et vérifiez la couverture :\u003C/p>\n\u003Cul>\n\u003Cli>Quel pourcentage de vos pages produit ont un schema \u003Ccode>Product\u003C/code> ?\u003C/li>\n\u003Cli>Combien incluent \u003Ccode>offers\u003C/code>, \u003Ccode>availability\u003C/code>, \u003Ccode>shippingDetails\u003C/code> ?\u003C/li>\n\u003Cli>Vos pages auteur ont-elles un schema \u003Ccode>Person\u003C/code> avec \u003Ccode>sameAs\u003C/code> pointant vers des profils vérifiables ?\u003C/li>\n\u003C/ul>\n\u003Cp>Sur un e-commerce de 15 000 pages produit, vous découvrirez typiquement que 60-70% des pages ont un schema \u003Ccode>Product\u003C/code> basique (nom, prix, disponibilité) mais que moins de 15% incluent \u003Ccode>shippingDetails\u003C/code> et \u003Ccode>hasMerchantReturnPolicy\u003C/code>. Ce delta de 85% représente votre surface d'amélioration la plus impactante.\u003C/p>\n\u003Ch3>Étape 3 : prioriser par impact business, pas par score Cloudflare\u003C/h3>\n\u003Cp>Le score Cloudflare pondère tous les checks de façon relativement égale. Votre priorisation doit être différente :\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Check\u003C/th>\n\u003Cth>E-commerce\u003C/th>\n\u003Cth>Média\u003C/th>\n\u003Cth>SaaS B2B\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>robots.txt\u003C/code> granulaire (user-agents IA)\u003C/td>\n\u003Ctd>Haute\u003C/td>\n\u003Ctd>Haute\u003C/td>\n\u003Ctd>Moyenne\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Schema complet avec propriétés transactionnelles\u003C/td>\n\u003Ctd>Critique\u003C/td>\n\u003Ctd>N/A\u003C/td>\n\u003Ctd>Moyenne\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>llms.txt\u003C/code>\u003C/td>\n\u003Ctd>Moyenne\u003C/td>\n\u003Ctd>Basse*\u003C/td>\n\u003Ctd>Haute\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>/.well-known/agent.json\u003C/code>\u003C/td>\n\u003Ctd>Haute\u003C/td>\n\u003Ctd>Basse\u003C/td>\n\u003Ctd>Moyenne\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Protocole MCP/A2A\u003C/td>\n\u003Ctd>Basse (sauf marketplace)\u003C/td>\n\u003Ctd>N/A\u003C/td>\n\u003Ctd>Basse\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>*Basse pour un média car fournir un \u003Ccode>llms.txt\u003C/code> exhaustif revient à offrir votre contenu aux modèles gratuitement. C'est une décision business, pas technique.\u003C/p>\n\u003Ch2>Implémenter \u003Ccode>llms.txt\u003C/code> sans offrir votre contenu gratuitement\u003C/h2>\n\u003Cp>Le fichier \u003Ccode>llms.txt\u003C/code> est un standard proposé (pas encore formalisé en RFC). Sa structure est simple : un fichier texte à la racine du site qui décrit le contenu et pointe vers les ressources clés.\u003C/p>\n\u003Cp>Le piège : beaucoup d'implémentations suggèrent d'y lister toutes vos URLs avec des descriptions complètes. Pour un média ou un site dont la valeur réside dans le contenu lui-même, c'est un cadeau empoisonné. Vous facilitez l'ingestion par les LLMs sans aucune garantie de citation ou de trafic retour.\u003C/p>\n\u003Cp>L'approche pragmatique :\u003C/p>\n\u003Cpre>\u003Ccode># cablestore.fr\n\n> CableStore est le spécialiste français des câbles et connectique professionnelle. \n> Catalogue de 15 000 références avec specs techniques détaillées.\n\n## Documentation\n- [Guide de compatibilité USB-C](https://cablestore.fr/guides/compatibilite-usb-c): Matrice complète de compatibilité USB-C par protocole (USB 2.0 à USB4, Thunderbolt 3/4/5)\n- [API Catalogue](https://cablestore.fr/developers/api): Documentation de l'API REST pour intégrations partenaires\n\n## Catégories principales  \n- [Câbles USB-C](https://cablestore.fr/cables-usb-c): Câbles USB-C certifiés, triés par protocole et longueur\n- [Câbles HDMI](https://cablestore.fr/cables-hdmi): Câbles HDMI 2.0 et 2.1, certifiés Ultra High Speed\n- [Adaptateurs](https://cablestore.fr/adaptateurs): Adaptateurs et hubs multiport\n\n## Politique\nPour toute utilisation commerciale de nos données produit, contactez partenariats@cablestore.fr\n\u003C/code>\u003C/pre>\n\u003Cp>Remarquez ce qui n'y figure pas : les fiches produit individuelles, les prix, les avis clients. Vous exposez la \u003Cstrong>structure\u003C/strong> et les \u003Cstrong>contenus éducatifs\u003C/strong> (qui servent votre autorité), pas les données transactionnelles (qui servent votre CA).\u003C/p>\n\u003Cp>Ce positionnement est cohérent avec \u003Ca href=\"/blog/what-makes-a-brand-machine-readable-in-ai-search\">l'approche de Google sur la visibilité des marques dans les résultats IA\u003C/a> : les agents doivent comprendre \u003Cstrong>qui\u003C/strong> vous êtes et \u003Cstrong>ce que\u003C/strong> vous proposez, pas nécessairement accéder à chaque donnée produit sans passer par votre site.\u003C/p>\n\u003Ch2>Gérer les user-agents IA dans \u003Ccode>robots.txt\u003C/code> : au-delà du binaire\u003C/h2>\n\u003Cp>La plupart des implémentations \u003Ccode>robots.txt\u003C/code> traitent les bots IA en bloc : tout autoriser ou tout bloquer. L'approche fine consiste à segmenter par intention :\u003C/p>\n\u003Cpre>\u003Ccode># robots.txt — CableStore\n# Crawlers de recherche classiques\nUser-agent: Googlebot\nAllow: /\n\nUser-agent: Bingbot\nAllow: /\n\n# Agents IA pour l'indexation de contenu (training data)\n# Bloquer — notre contenu n'est pas gratuit pour le training\nUser-agent: GPTBot\nDisallow: /\n\nUser-agent: Google-Extended\nDisallow: /\n\nUser-agent: CCBot\nDisallow: /\n\nUser-agent: anthropic-ai\nDisallow: /\n\n# Agents IA pour le shopping / comparaison (trafic transactionnel)\n# Autoriser — ces agents génèrent des conversions\nUser-agent: Google-Shopping\nAllow: /produits/\nAllow: /api/v1/products/\nDisallow: /compte/\nDisallow: /panier/\n\n# Agent Google généraliste (Gemini dans Search)\nUser-agent: Google-InternalBot\nAllow: /produits/\nAllow: /guides/\nDisallow: /compte/\n\n# Fallback\nUser-agent: *\nAllow: /\nDisallow: /admin/\nDisallow: /compte/\nDisallow: /panier/\n\nSitemap: https://cablestore.fr/sitemap-index.xml\n\u003C/code>\u003C/pre>\n\u003Cp>Un point critique : à ce jour, \u003Ccode>Google-Shopping\u003C/code> n'est pas un user-agent officiel. Google utilise \u003Ccode>Googlebot\u003C/code> pour l'essentiel de ses crawls, y compris Shopping. La segmentation granulaire par user-agent IA est donc encore \u003Cstrong>aspirationnelle\u003C/strong> pour certains agents. Mais \u003Ccode>GPTBot\u003C/code>, \u003Ccode>ClaudeBot\u003C/code>, \u003Ccode>CCBot\u003C/code> et \u003Ccode>Google-Extended\u003C/code> sont documentés et respectés par leurs opérateurs respectifs.\u003C/p>\n\u003Cp>Vérifiez régulièrement dans vos logs serveur quels user-agents IA crawlent effectivement votre site. Un outil comme GoAccess ou une analyse directe des access logs vous donnera la réalité terrain :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Identifier les bots IA dans vos access logs Nginx\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -iE\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"(GPTBot|ClaudeBot|CCBot|Google-Extended|anthropic|Bytespider|PetalBot)\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  /var/log/nginx/access.log\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  awk\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '{print $14}'\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> sort\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> uniq\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> sort\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -rn\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> head\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -20\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Si \u003Ccode>GPTBot\u003C/code> crawle 50 000 URLs/jour sur votre site média et que vous ne le bloquez pas, vous offrez votre production éditoriale à OpenAI sans contrepartie. Le score Cloudflare vous dira que c'est \"bien\" parce que vous êtes \"ouvert\" aux agents. Votre directeur éditorial aura un avis différent.\u003C/p>\n\u003Ch2>Le vrai enjeu derrière le score : la course au protocole\u003C/h2>\n\u003Cp>Le Agent Readiness Score de Cloudflare n'est pas un outil neutre d'évaluation technique. C'est un levier stratégique pour Cloudflare, qui développe activement son propre écosystème d'AI agents (Cloudflare Workers AI, AI Gateway, etc.). En promouvant une grille d'évaluation qui valorise les formats et protocoles qu'ils supportent, Cloudflare se positionne comme l'infrastructure de référence pour l'ère des agents.\u003C/p>\n\u003Cp>Ce n'est pas une critique — c'est un constat. Google fait exactement la même chose avec ses recommandations sur les données structurées et le \u003Ca href=\"/blog/what-google-s-ucp-tells-us-about-agent-ready-websites-via-sejournal-slobodanmanic\">protocole UCP\u003C/a>. Anthropic pousse MCP (\u003Ca href=\"https://modelcontextprotocol.io/\">Model Context Protocol\u003C/a>). Google répond avec A2A (\u003Ca href=\"https://google.github.io/A2A/\">Agent-to-Agent\u003C/a>).\u003C/p>\n\u003Cp>Pour un responsable technique, le risque est d'investir massivement dans un protocole qui ne deviendra pas le standard. L'approche défensive : implémenter les couches de base qui seront utiles quel que soit le protocole gagnant.\u003C/p>\n\u003Cp>Ces couches de base sont :\u003C/p>\n\u003Col>\n\u003Cli>Des données structurées Schema.org complètes (le plus petit dénominateur commun)\u003C/li>\n\u003Cli>Un \u003Ccode>robots.txt\u003C/code> avec des directives granulaires par user-agent\u003C/li>\n\u003Cli>Un \u003Ccode>llms.txt\u003C/code> minimal décrivant la structure du site\u003C/li>\n\u003Cli>Des APIs REST documentées si votre site a une dimension transactionnelle\u003C/li>\n\u003C/ol>\n\u003Cp>Les protocoles MCP et A2A sont encore trop immatures pour justifier un investissement d'implémentation sur un site de production, sauf si vous êtes une marketplace ou une plateforme de réservation où l'interaction agent est déjà une réalité (pensez à Booking.com, pas à votre blog corporate).\u003C/p>\n\u003Ch2>Monitoring continu : ne pas traiter le score comme un snapshot\u003C/h2>\n\u003Cp>Le score Cloudflare est une photo à un instant T. Mais les fichiers de configuration évoluent, les déploiements cassent des choses, et les équipes de développement ne pensent pas toujours au \u003Ccode>llms.txt\u003C/code> quand elles reconfigurent le serveur.\u003C/p>\n\u003Cp>Un scénario classique : votre équipe DevOps migre vers une nouvelle infrastructure. Le reverse proxy est reconfiguré. Le \u003Ccode>/.well-known/agent.json\u003C/code> retourne un 404 parce que personne n'a pensé à ajouter la route dans la nouvelle config Nginx. Pendant 6 semaines, les agents qui tentent de découvrir vos capabilities transactionnelles repartent bredouilles.\u003C/p>\n\u003Cp>Ce type de régression silencieuse est exactement ce qu'un outil de monitoring comme Seogard détecte automatiquement. Comme pour les \u003Ca href=\"/blog/migration-next-js-pages-router-vers-app-router-les-metadata-ignorees-sur-les-pages-client\">metas qui disparaissent lors d'une migration de framework\u003C/a>, les fichiers d'interopérabilité agent sont des cibles de régression que personne ne surveille manuellement.\u003C/p>\n\u003Cp>Intégrez la vérification de ces fichiers dans vos checks de déploiement :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Extrait d'un pipeline CI/CD — vérification post-deploy\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#85E89D\">agent-readiness-check\u003C/span>\u003Cspan style=\"color:#E1E4E8\">:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#85E89D\">  stage\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">post-deploy\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#85E89D\">  script\u003C/span>\u003Cspan style=\"color:#E1E4E8\">:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    - \u003C/span>\u003Cspan style=\"color:#F97583\">|\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      DOMAIN=\"https://cablestore.fr\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      ERRORS=0\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      for path in \"/robots.txt\" \"/llms.txt\" \"/.well-known/agent.json\" \"/sitemap-index.xml\"; do\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        STATUS=$(curl -s -o /dev/null -w \"%{http_code}\" \"${DOMAIN}${path}\")\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        if [ \"$STATUS\" != \"200\" ]; then\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">          echo \"❌ ${path} returned HTTP ${STATUS}\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">          ERRORS=$((ERRORS + 1))\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        else\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">          echo \"✅ ${path} OK\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        fi\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      done\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      # Vérifier que le schema JSON-LD est présent sur la homepage\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      SCHEMA_COUNT=$(curl -s \"${DOMAIN}\" | grep -c \"application/ld+json\")\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      if [ \"$SCHEMA_COUNT\" -eq 0 ]; then\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        echo \"❌ No JSON-LD schema found on homepage\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        ERRORS=$((ERRORS + 1))\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      else\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        echo \"✅ JSON-LD schema found (${SCHEMA_COUNT} blocks)\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      fi\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      if [ \"$ERRORS\" -gt 0 ]; then\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        echo \"⚠️ ${ERRORS} agent readiness check(s) failed\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        exit 1\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      fi\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#85E89D\">  only\u003C/span>\u003Cspan style=\"color:#E1E4E8\">:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    - \u003C/span>\u003Cspan style=\"color:#9ECBFF\">main\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce check de 30 lignes dans votre pipeline CI/CD évite des semaines de régression non détectée. C'est le strict minimum.\u003C/p>\n\u003Ch2>Ce que le score ne dit pas (et qui importe plus)\u003C/h2>\n\u003Cp>Le Agent Readiness Score ne mesure pas :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>La qualité de vos données structurées\u003C/strong> : il vérifie la présence, pas la validité. Un schema \u003Ccode>Product\u003C/code> avec des \u003Ccode>offers\u003C/code> vides passera le check mais sera inutile pour un agent.\u003C/li>\n\u003Cli>\u003Cstrong>La performance de vos endpoints\u003C/strong> : déclarer une API dans \u003Ccode>agent.json\u003C/code> ne sert à rien si elle répond en 8 secondes ou retourne des erreurs 30% du temps.\u003C/li>\n\u003Cli>\u003Cstrong>La fraîcheur de vos données\u003C/strong> : un \u003Ccode>llms.txt\u003C/code> qui pointe vers des URLs 404 est pire que pas de \u003Ccode>llms.txt\u003C/code> du tout.\u003C/li>\n\u003Cli>\u003Cstrong>L'alignement avec votre stratégie business\u003C/strong> : ouvrir tous vos contenus aux agents de training est \"agent-ready\" selon le score, mais potentiellement destructeur de valeur.\u003C/li>\n\u003C/ul>\n\u003Cp>Ces dimensions qualitatives sont invisibles dans un score automatisé. Elles nécessitent un jugement humain informé par une compréhension du modèle business du site.\u003C/p>\n\u003Cp>Le score est un point de départ utile pour identifier les lacunes évidentes — pas une feuille de route d'implémentation. Filtrez chaque recommandation à travers cette question : \u003Cstrong>est-ce qu'un agent AI interagissant avec cette fonctionnalité génère de la valeur pour mon business ?\u003C/strong> Si la réponse est non, le check échoué est du bruit, pas un signal.\u003C/p>\n\u003Cp>Le Cloudflare Agent Readiness Score va probablement évoluer rapidement à mesure que les protocoles se stabilisent. Les actions qui survivront à toutes les itérations sont les fondamentaux : des données structurées complètes, un \u003Ccode>robots.txt\u003C/code> réfléchi, et un monitoring continu pour détecter les régressions dès qu'elles surviennent — ce qui est précisément le type de surveillance automatique que \u003Ca href=\"https://seogard.io\">Seogard surveille en permanence\u003C/a> sur votre périmètre technique.\u003C/p>",null,12,[18,19,20,21,22],"cloudflare","agent readiness","AI agents","crawl","SEO technique","Cloudflare Agent Readiness Score : ce que le chiffre signifie vraiment","Mon May 25 2026 06:02:51 GMT+0000 (Coordinated Universal Time)",[26,41,56],{"_id":27,"slug":28,"__v":6,"author":7,"canonical":29,"category":10,"createdAt":30,"date":31,"description":32,"image":15,"imageAlt":15,"readingTime":16,"tags":33,"title":39,"updatedAt":40},"6a12ccd5aa6b273b0c73f0b9","the-new-rules-of-search-key-aeo-content-marketing-trends-for-2026-via-sejournal-hethr-campbell","https://seogard.io/blog/the-new-rules-of-search-key-aeo-content-marketing-trends-for-2026-via-sejournal-hethr-campbell","2026-05-24T10:03:01.717Z","2026-05-24","Stratégie AEO concrète pour 2026 : structurer le contenu, optimiser le markup et monitorer la visibilité dans les moteurs de recherche IA.",[34,35,36,37,38],"AEO","content marketing","AI search","structured data","GEO","AEO en 2026 : les nouvelles règles du contenu pour la recherche IA","Sun May 24 2026 10:03:01 GMT+0000 (Coordinated Universal Time)",{"_id":42,"slug":43,"__v":6,"author":7,"canonical":44,"category":10,"createdAt":45,"date":46,"description":47,"image":15,"imageAlt":15,"readingTime":16,"tags":48,"title":54,"updatedAt":55},"6a114306aa6b273b0c21d3d7","wordpress-7-0-is-a-winner-here-s-what-you-need-to-know-via-sejournal-martinibuster","https://seogard.io/blog/wordpress-7-0-is-a-winner-here-s-what-you-need-to-know-via-sejournal-martinibuster","2026-05-23T06:02:46.644Z","2026-05-23","Analyse technique de WordPress 7.0 : performances, SSR, block themes, IA native. Ce qui change concrètement pour le SEO de sites 5K-50K pages.",[49,50,51,52,53],"wordpress","wordpress 7.0","seo technique","performance web","cms","WordPress 7.0 : impact SEO technique réel au-delà du buzz IA","Sat May 23 2026 06:02:46 GMT+0000 (Coordinated Universal Time)",{"_id":57,"slug":58,"__v":6,"author":7,"canonical":59,"category":10,"createdAt":60,"date":46,"description":61,"image":15,"imageAlt":15,"readingTime":16,"tags":62,"title":68,"updatedAt":69},"6a117b44aa6b273b0c5041df","fix-everything-is-the-wrong-seo-strategy","https://seogard.io/blog/fix-everything-is-the-wrong-seo-strategy","2026-05-23T10:02:44.929Z","Les outils d'audit traitent chaque erreur de la même façon. Voici comment prioriser les corrections SEO qui génèrent vraiment du trafic.",[63,64,65,66,67],"seo strategy","technical seo","audit prioritization","crawl budget","seo workflow","'Fix Everything' Is the Wrong SEO Strategy","Sat May 23 2026 10:02:44 GMT+0000 (Coordinated Universal Time)"]