[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fXMmLqaaIYk13eBAP8VTWmFKDiiHkeHHzl5I7yNFYCRc":3,"$f_wjtyMRk87oQ7q8jc_qlofhSZfpGwWev-URQWdoCVNU":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},"69dbb421aa6b273b0c9d8f08","how-ai-agents-see-your-website-and-how-to-build-for-them-via-sejournal-slobodanmanic",0,"Equipe Seogard","Un agent IA ne regarde pas votre site. Il le parse. Pas de viewport, pas de scroll, pas de hover. Il reçoit du HTML, tente de comprendre la structure sémantique, et décide en quelques millisecondes s'il peut extraire l'information demandée par l'utilisateur — ou s'il passe au concurrent. Le Search Engine Journal vient de publier une [analyse détaillée](https://www.searchenginejournal.com/how-ai-agents-see-your-website-and-how-to-build-for-them/570443/) sur ce sujet. Allons plus loin sur le plan technique.\n\n## Le modèle mental d'un agent IA : ni navigateur, ni crawler\n\nLes crawlers classiques (Googlebot, Bingbot) et les bots IA (GPTBot, ClaudeBot, Bytespider) partagent un point commun : ils envoient une requête HTTP et traitent la réponse. Mais leurs objectifs divergent radicalement.\n\nGooglebot cherche à indexer. Il suit les liens, stocke le contenu, et passe au document suivant. Un bot IA de type crawler fait la même chose — il ingère du contenu pour entraîner un modèle ou alimenter un index de retrieval.\n\nUn **agent IA**, c'est autre chose. C'est un système autonome qui agit pour le compte d'un utilisateur avec un objectif précis : \"réserve-moi un vol Paris-Tokyo le 15 juin\", \"compare les prix de ces 3 écrans 27 pouces\", \"trouve un plombier disponible demain à Lyon\". L'agent doit comprendre votre page, identifier les éléments interactifs, extraire des données structurées, et potentiellement déclencher des actions (remplir un formulaire, ajouter au panier).\n\n### Ce que l'agent voit réellement\n\nContrairement à ce qu'on pourrait croire, la majorité des agents IA actuels ne lancent pas de headless browser. Ils travaillent sur le HTML brut retourné par le serveur, éventuellement enrichi par un parsing JavaScript limité. Voici ce que l'agent reçoit quand il accède à une page produit typique :\n\n```html\n\u003C!-- Ce que votre serveur renvoie (SPA client-side) -->\n\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>\n  \u003Ctitle>Mon E-commerce\u003C/title>\n  \u003Cscript src=\"/app.bundle.js\" defer>\u003C/script>\n\u003C/head>\n\u003Cbody>\n  \u003Cdiv id=\"root\">\u003C/div>\n\u003C/body>\n\u003C/html>\n```\n\nPour l'agent : c'est une page vide. Aucune donnée produit, aucun prix, aucune disponibilité. Il ne peut rien faire. Comparez avec une page server-rendered :\n\n```html\n\u003C!-- Ce que votre serveur renvoie (SSR) -->\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"fr\">\n\u003Chead>\n  \u003Ctitle>Écran Dell U2723QE 27\" 4K USB-C — 549€ | TechShop\u003C/title>\n  \u003Cmeta name=\"description\" content=\"Écran Dell U2723QE 27 pouces 4K IPS, USB-C 90W. Stock: 12 unités. Livraison 24h.\" />\n  \u003Cscript type=\"application/ld+json\">\n  {\n    \"@context\": \"https://schema.org\",\n    \"@type\": \"Product\",\n    \"name\": \"Dell U2723QE\",\n    \"offers\": {\n      \"@type\": \"Offer\",\n      \"price\": \"549.00\",\n      \"priceCurrency\": \"EUR\",\n      \"availability\": \"https://schema.org/InStock\",\n      \"itemCondition\": \"https://schema.org/NewCondition\"\n    }\n  }\n  \u003C/script>\n\u003C/head>\n\u003Cbody>\n  \u003Cmain>\n    \u003Carticle itemscope itemtype=\"https://schema.org/Product\">\n      \u003Ch1 itemprop=\"name\">Écran Dell U2723QE 27\" 4K USB-C\u003C/h1>\n      \u003Csection aria-label=\"Caractéristiques techniques\">\n        \u003Cdl>\n          \u003Cdt>Résolution\u003C/dt>\u003Cdd>3840 × 2160\u003C/dd>\n          \u003Cdt>Dalle\u003C/dt>\u003Cdd>IPS Black\u003C/dd>\n          \u003Cdt>Connectique\u003C/dt>\u003Cdd>USB-C 90W, HDMI 2.0, DisplayPort 1.4\u003C/dd>\n        \u003C/dl>\n      \u003C/section>\n      \u003Cdiv itemprop=\"offers\" itemscope itemtype=\"https://schema.org/Offer\">\n        \u003Cspan itemprop=\"price\" content=\"549.00\">549 €\u003C/span>\n        \u003Clink itemprop=\"availability\" href=\"https://schema.org/InStock\" />\n        \u003Cbutton type=\"button\" aria-label=\"Ajouter Dell U2723QE au panier\">\n          Ajouter au panier\n        \u003C/button>\n      \u003C/div>\n    \u003C/article>\n  \u003C/main>\n\u003C/body>\n\u003C/html>\n```\n\nL'agent extrait immédiatement : le nom du produit, le prix, la disponibilité, les caractéristiques, et identifie le bouton d'action grâce à l'attribut `aria-label`. Le différentiel entre ces deux réponses HTTP est la différence entre exister et ne pas exister dans le web agentique.\n\nCe constat rejoint directement les problématiques de [rendering budget que Google impose déjà](/blog/rendering-budget-de-google-combien-de-javascript-est-trop) — sauf que les agents IA sont encore moins tolérants que Googlebot envers le JavaScript client-side.\n\n## HTML sémantique : le fondement du web agentique\n\nLes agents IA s'appuient massivement sur la sémantique HTML pour comprendre la hiérarchie et la nature du contenu. Un `\u003Cnav>` leur dit \"voici la navigation\". Un `\u003Cmain>` leur dit \"voici le contenu principal\". Un `\u003Caside>` leur dit \"contenu secondaire, probablement ignorable\".\n\n### Les landmarks HTML5 qui comptent\n\nLes éléments landmarks ne sont pas décoratifs. Pour un agent qui doit extraire l'information pertinente d'une page contenant navigation, sidebar, footer, publicités, et contenu éditorial, ces balises sont le signal primaire de filtrage :\n\n- `\u003Cheader>` — identité du site, navigation principale\n- `\u003Cnav>` — liens de navigation (l'agent peut les suivre pour explorer le site)\n- `\u003Cmain>` — contenu principal, c'est là que l'agent concentre son extraction\n- `\u003Carticle>` — unité de contenu autonome (un produit, un article, une recette)\n- `\u003Csection>` avec `aria-label` — blocs thématiques au sein d'un article\n- `\u003Caside>` — contenu connexe, l'agent le déprioritise\n- `\u003Cfooter>` — mentions légales, contact, liens secondaires\n\nLe problème : la majorité des sites SPA ou basés sur des design systems modernes remplacent tout par des `\u003Cdiv>`. Un audit rapide avec Screaming Frog, en filtrant par éléments HTML, révèle souvent que 95% du DOM est constitué de `\u003Cdiv>` et `\u003Cspan>` sans aucune valeur sémantique.\n\n### Le cas des listes de définitions\n\nUn pattern sous-utilisé et pourtant extrêmement puissant pour les agents IA : `\u003Cdl>` / `\u003Cdt>` / `\u003Cdd>`. Ce triplet exprime une relation clé-valeur native en HTML, exactement ce dont un agent a besoin pour extraire des spécifications produit, des métadonnées, ou des attributs structurés.\n\n```html\n\u003C!-- Anti-pattern : specs dans un tableau stylé en CSS -->\n\u003Cdiv class=\"specs-grid\">\n  \u003Cdiv class=\"spec-row\">\n    \u003Cdiv class=\"spec-label\">Poids\u003C/div>\n    \u003Cdiv class=\"spec-value\">6.6 kg\u003C/div>\n  \u003C/div>\n\u003C/div>\n\n\u003C!-- Pattern sémantique : immédiatement parsable -->\n\u003Cdl aria-label=\"Spécifications techniques\">\n  \u003Cdt>Poids\u003C/dt>\u003Cdd>6.6 kg\u003C/dd>\n  \u003Cdt>Dimensions\u003C/dt>\u003Cdd>611.4 × 364.3 × 185.0 mm\u003C/dd>\n  \u003Cdt>Consommation\u003C/dt>\u003Cdd>27W typique, 160W max\u003C/dd>\n\u003C/dl>\n```\n\nPour un agent qui doit comparer les specs de 3 écrans, la version sémantique est directement exploitable. La version `\u003Cdiv>` nécessite une inférence basée sur les classes CSS — fragile, non standardisée, et susceptible de casser à chaque redesign.\n\n## SSR et contenu visible au first byte : une obligation\n\nLe [débat SSR vs CSR](/blog/headless-cms-et-seo-avantages-et-risques-techniques) n'est plus un débat pour le web agentique. Le server-side rendering (ou au minimum le static site generation) est une obligation fonctionnelle.\n\n### Pourquoi les agents n'exécutent pas votre JavaScript\n\nL'exécution JavaScript est coûteuse. Chaque page nécessite un runtime V8, de la mémoire, du temps CPU. Quand un agent doit évaluer 50 pages en parallèle pour comparer des offres, lancer 50 instances de headless browser est un non-sens économique et technique. La grande majorité des agents IA actuels — et probablement futurs — travaillent en mode \"fetch + parse HTML\", comme `curl`.\n\nCela a des implications directes pour les architectures frontend modernes :\n\n| Architecture | Visibilité agent IA | Action requise |\n|---|---|---|\n| SPA pure (React/Vue CSR) | Nulle | Migration SSR obligatoire |\n| SSR (Next.js, Nuxt) | Complète | Vérifier que le HTML initial contient tout le contenu |\n| SSG (Astro, Hugo, 11ty) | Complète | Idéal pour contenu statique |\n| ISR (Next.js) | Complète | Attention au stale content pendant la régénération |\n| Hybrid (SSR + CSR) | Partielle | Auditer ce qui est rendu côté serveur vs client |\n\n### Scénario concret : migration d'un e-commerce de 18 000 pages\n\nPrenons un cas réaliste. Un e-commerce de matériel informatique, 18 000 pages produit, construit en React SPA avec Create React App. Le site fonctionne parfaitement pour les utilisateurs humains. Mais les logs serveur montrent une tendance claire depuis 6 mois :\n\n- GPTBot : 12 000 requêtes/jour, mais temps moyen sur page = 0.3s (il ne récupère que le shell HTML vide)\n- ClaudeBot : 8 000 requêtes/jour, même constat\n- Trafic depuis les réponses IA (ChatGPT, Perplexity, etc.) : quasi nul malgré un catalogue de 18 000 références\n\nAprès migration vers Next.js App Router avec SSR complet, les résultats à 8 semaines :\n\n- Temps moyen de GPTBot sur les pages produit : 1.2s (il parse maintenant le contenu complet)\n- Apparitions dans les réponses ChatGPT pour des requêtes produit spécifiques : +340%\n- Trafic referral depuis des interfaces agentiques : passage de ~50 à ~2 100 visites/semaine\n- Aucun impact négatif sur le trafic Google organique (la migration SSR a même amélioré le crawl budget classique)\n\nLa migration a pris 14 semaines avec une équipe de 3 développeurs. Le ROI s'est manifesté dès la semaine 6. Ce type de migration est documenté en détail dans notre article sur le [changement de framework sans perte SEO](/blog/changer-de-framework-next-js-vers-nuxt-ou-l-inverse-sans-perte-seo).\n\n### Vérifier ce que l'agent reçoit réellement\n\nAvant toute optimisation, diagnostiquez l'état actuel. La commande la plus simple :\n\n```bash\n# Vérifier le HTML brut reçu sans exécution JavaScript\ncurl -s -A \"Mozilla/5.0 (compatible; GPTBot/1.0)\" https://techshop.fr/produit/dell-u2723qe | \\\n  grep -c '\u003Ch1\\|\u003Carticle\\|\u003Cmain\\|application/ld+json'\n\n# Résultat attendu : au moins 3-4 occurrences\n# Si 0 : votre contenu est invisible pour les agents IA\n\n# Version plus détaillée avec extraction du texte visible\ncurl -s -A \"Mozilla/5.0 (compatible; GPTBot/1.0)\" https://techshop.fr/produit/dell-u2723qe | \\\n  python3 -c \"\nimport sys\nfrom html.parser import HTMLParser\n\nclass TextExtractor(HTMLParser):\n    def __init__(self):\n        super().__init__()\n        self.text = []\n        self.skip = False\n    def handle_starttag(self, tag, attrs):\n        if tag in ('script', 'style', 'noscript'):\n            self.skip = True\n    def handle_endtag(self, tag):\n        if tag in ('script', 'style', 'noscript'):\n            self.skip = False\n    def handle_data(self, data):\n        if not self.skip and data.strip():\n            self.text.append(data.strip())\n\ne = TextExtractor()\ne.feed(sys.stdin.read())\ncontent = ' '.join(e.text)\nprint(f'Contenu textuel visible: {len(content)} caractères')\nprint(f'Premiers 500 chars: {content[:500]}')\n\"\n```\n\nSi le contenu textuel visible est inférieur à 200 caractères sur une page produit, vous avez un problème de rendu serveur.\n\nDans Chrome DevTools, vous pouvez aussi désactiver JavaScript (Settings → Debugger → Disable JavaScript) et recharger la page. Ce que vous voyez est ce que l'agent voit.\n\n## Données structurées : le langage natif des agents\n\nLes agents IA ne lisent pas le texte comme un humain. Ils cherchent d'abord les données structurées — JSON-LD, Microdata, RDFa — qui leur fournissent des informations machine-readable sans ambiguïté.\n\n### Au-delà de Schema.org basique\n\nLa plupart des implémentations Schema.org se limitent au minimum : `Product`, `Article`, `Organization`. Pour le web agentique, il faut aller plus loin et exposer les informations que l'agent pourrait avoir besoin d'extraire pour accomplir sa tâche.\n\nPour un site e-commerce, voici un JSON-LD complet qui répond aux besoins d'un agent de comparaison de prix :\n\n```json\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Product\",\n  \"name\": \"Dell U2723QE\",\n  \"sku\": \"U2723QE-FR\",\n  \"gtin13\": \"5397184505137\",\n  \"brand\": {\n    \"@type\": \"Brand\",\n    \"name\": \"Dell\"\n  },\n  \"category\": \"Écrans PC > Écrans 27 pouces > Écrans 4K\",\n  \"description\": \"Moniteur 27 pouces 4K UHD IPS Black, USB-C 90W, certifié VESA DisplayHDR 400\",\n  \"image\": [\n    \"https://techshop.fr/images/dell-u2723qe-front.webp\",\n    \"https://techshop.fr/images/dell-u2723qe-back.webp\"\n  ],\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"url\": \"https://techshop.fr/produit/dell-u2723qe\",\n    \"price\": \"549.00\",\n    \"priceCurrency\": \"EUR\",\n    \"priceValidUntil\": \"2026-06-30\",\n    \"availability\": \"https://schema.org/InStock\",\n    \"inventoryLevel\": {\n      \"@type\": \"QuantitativeValue\",\n      \"value\": 12\n    },\n    \"itemCondition\": \"https://schema.org/NewCondition\",\n    \"seller\": {\n      \"@type\": \"Organization\",\n      \"name\": \"TechShop\"\n    },\n    \"shippingDetails\": {\n      \"@type\": \"OfferShippingDetails\",\n      \"shippingRate\": {\n        \"@type\": \"MonetaryAmount\",\n        \"value\": \"0\",\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\": 2,\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  \"additionalProperty\": [\n    {\"@type\": \"PropertyValue\", \"name\": \"Résolution\", \"value\": \"3840 × 2160\"},\n    {\"@type\": \"PropertyValue\", \"name\": \"Type de dalle\", \"value\": \"IPS Black\"},\n    {\"@type\": \"PropertyValue\", \"name\": \"Taux de rafraîchissement\", \"value\": \"60 Hz\"},\n    {\"@type\": \"PropertyValue\", \"name\": \"USB-C Power Delivery\", \"value\": \"90W\"},\n    {\"@type\": \"PropertyValue\", \"name\": \"Certification\", \"value\": \"VESA DisplayHDR 400\"}\n  ],\n  \"review\": {\n    \"@type\": \"AggregateRating\",\n    \"ratingValue\": \"4.6\",\n    \"reviewCount\": \"234\"\n  }\n}\n```\n\nNotez les éléments qui font la différence pour un agent IA :\n\n- `inventoryLevel` : l'agent sait qu'il reste 12 unités en stock, pas juste \"en stock\"\n- `shippingDetails` avec `deliveryTime` : l'agent peut promettre \"livré en 1-2 jours\" à l'utilisateur\n- `hasMerchantReturnPolicy` : l'agent peut confirmer le retour sous 30 jours\n- `additionalProperty` : chaque spec technique est une paire clé-valeur exploitable\n- `gtin13` : identifiant unique qui permet à l'agent de croiser les données entre marchands\n\nCe niveau de détail dans les données structurées est ce qui différencie un site \"trouvable\" d'un site \"actionable\" par un agent IA. L'article de Search Engine Journal souligne ce point — nous allons plus loin en montrant que les propriétés comme `shippingDetails` et `inventoryLevel`, souvent ignorées, deviennent critiques dans un contexte agentique.\n\n## Accessibilité = Agent-readability\n\nL'insight le plus contre-intuitif de cette transition vers le web agentique : les patterns d'accessibilité web (ARIA, labels explicites, rôles sémantiques) sont exactement ce dont les agents IA ont besoin pour interagir avec votre site.\n\n### Les attributs ARIA comme API d'interaction\n\nQuand un agent IA doit \"cliquer\" sur un bouton, il ne regarde pas un rectangle bleu sur l'écran. Il cherche dans le DOM un élément interactif avec un label descriptif. Les attributs ARIA deviennent une sorte d'API implicite :\n\n```html\n\u003C!-- Inutilisable par un agent -->\n\u003Cdiv class=\"btn-primary\" onclick=\"addToCart(42)\">\n  \u003Csvg>...\u003C/svg>\n  \u003Cspan>Ajouter\u003C/span>\n\u003C/div>\n\n\u003C!-- Exploitable par un agent -->\n\u003Cbutton \n  type=\"button\"\n  aria-label=\"Ajouter Dell U2723QE au panier — 549€\"\n  data-product-id=\"42\"\n  data-action=\"add-to-cart\">\n  \u003Csvg aria-hidden=\"true\">...\u003C/svg>\n  Ajouter au panier\n\u003C/button>\n```\n\nL'agent extrait de la deuxième version : le type d'action (ajout au panier), le produit concerné, le prix. Le `data-action` et le `data-product-id` sont des bonus qui facilitent l'automatisation.\n\n### Formulaires : l'interface agent par excellence\n\nLes formulaires sont le principal vecteur d'action des agents IA. Un formulaire de recherche, de réservation, de commande — c'est par là que l'agent accomplit la tâche de l'utilisateur. Et c'est là que les mauvaises pratiques HTML coûtent le plus cher.\n\n```html\n\u003C!-- Formulaire de recherche agent-friendly -->\n\u003Cform action=\"/recherche\" method=\"get\" role=\"search\" aria-label=\"Recherche de produits\">\n  \u003Clabel for=\"search-query\">Rechercher un produit\u003C/label>\n  \u003Cinput \n    type=\"search\" \n    id=\"search-query\" \n    name=\"q\" \n    placeholder=\"Ex: écran 4K USB-C\"\n    autocomplete=\"off\"\n    aria-describedby=\"search-help\" />\n  \u003Cspan id=\"search-help\" class=\"sr-only\">\n    Recherchez par nom de produit, marque, ou référence\n  \u003C/span>\n  \u003Cbutton type=\"submit\">Rechercher\u003C/button>\n\u003C/form>\n\n\u003C!-- Filtres avec sémantique exploitable -->\n\u003Cfieldset aria-label=\"Filtres de recherche\">\n  \u003Clegend>Affiner les résultats\u003C/legend>\n  \n  \u003Cfieldset>\n    \u003Clegend>Fourchette de prix\u003C/legend>\n    \u003Clabel for=\"price-min\">Prix minimum (€)\u003C/label>\n    \u003Cinput type=\"number\" id=\"price-min\" name=\"price_min\" min=\"0\" step=\"10\" />\n    \u003Clabel for=\"price-max\">Prix maximum (€)\u003C/label>\n    \u003Cinput type=\"number\" id=\"price-max\" name=\"price_max\" min=\"0\" step=\"10\" />\n  \u003C/fieldset>\n  \n  \u003Cfieldset>\n    \u003Clegend>Marque\u003C/legend>\n    \u003Clabel>\u003Cinput type=\"checkbox\" name=\"brand\" value=\"dell\" /> Dell\u003C/label>\n    \u003Clabel>\u003Cinput type=\"checkbox\" name=\"brand\" value=\"lg\" /> LG\u003C/label>\n    \u003Clabel>\u003Cinput type=\"checkbox\" name=\"brand\" value=\"samsung\" /> Samsung\u003C/label>\n  \u003C/fieldset>\n\u003C/fieldset>\n```\n\nChaque `\u003Clabel>`, chaque `\u003Clegend>`, chaque `\u003Cfieldset>` est un indice que l'agent utilise pour mapper l'intention de l'utilisateur (\"trouve un écran Dell à moins de 600€\") vers les bons champs du formulaire.\n\n## Robots.txt, User-Agent et contrôle d'accès des agents\n\nLa montée en puissance du trafic de bots IA — [qui a explosé de 300% ces derniers mois](/blog/ai-bot-traffic-surged-300-hitting-publishers-hardest-report) — pose une question stratégique : faut-il laisser les agents accéder à votre site, et si oui, lesquels ?\n\n### Différencier crawlers IA et agents IA dans robots.txt\n\nIl existe une distinction importante entre les bots qui crawlent pour entraîner des modèles (GPTBot en mode training) et les agents qui accèdent à votre site pour répondre à une requête utilisateur en temps réel. Bloquer les premiers est légitime si vous ne souhaitez pas alimenter les LLM. Bloquer les seconds revient à vous rendre invisible dans les interfaces agentiques.\n\nLe problème : la plupart des User-Agent sont les mêmes. GPTBot est utilisé à la fois pour le crawl d'entraînement et pour le browsing en temps réel. La seule distinction fiable passe par des headers HTTP spécifiques que certains agents commencent à envoyer, ou par la fréquence et les patterns de requêtes.\n\nVoici une config Nginx qui journalise les accès des agents IA pour vous permettre d'analyser leur comportement avant de décider d'une politique :\n\n```nginx\n# /etc/nginx/conf.d/ai-agents-logging.conf\n\n# Mapper les User-Agent des agents IA connus\nmap $http_user_agent $ai_agent_type {\n    default                     \"none\";\n    \"~*GPTBot\"                  \"openai\";\n    \"~*ChatGPT-User\"           \"openai-browsing\";\n    \"~*ClaudeBot\"              \"anthropic\";\n    \"~*Claude-Web\"             \"anthropic-browsing\";\n    \"~*PerplexityBot\"          \"perplexity\";\n    \"~*Bytespider\"             \"bytedance\";\n    \"~*Google-Extended\"        \"google-ai\";\n    \"~*Applebot-Extended\"      \"apple-ai\";\n    \"~*cohere-ai\"              \"cohere\";\n}\n\n# Log dédié pour le trafic IA\nlog_format ai_access '$remote_addr - $ai_agent_type [$time_local] '\n                     '\"$request\" $status $body_bytes_sent '\n                     '\"$http_referer\" \"$request_time\"';\n\n# Activer le log conditionnel\nserver {\n    # ... votre config existante ...\n    \n    # Log séparé pour les agents IA\n    access_log /var/log/nginx/ai-agents.log ai_access if=$ai_agent_type;\n    \n    # Rate limiting spécifique aux agents IA\n    limit_req_zone $ai_agent_type zone=ai_agents:10m rate=10r/s;\n    \n    location / {\n        # Appliquer le rate limit seulement aux agents IA\n        if ($ai_agent_type != \"none\") {\n            limit_req zone=ai_agents burst=20 nodelay;\n        }\n        # ... proxy_pass ou autre ...\n    }\n}\n```\n\nCette approche vous donne de la visibilité. Analysez `/var/log/nginx/ai-agents.log` pendant 2 semaines avant de prendre des décisions de blocage. Vous pourriez découvrir que `ChatGPT-User` (mode browsing, celui qui répond aux utilisateurs en temps réel) représente un trafic qualifié que vous ne voulez surtout pas bloquer.\n\nPour une approche plus poussée de modification des réponses au niveau CDN, consultez notre guide sur [l'Edge SEO](/blog/edge-seo-modifier-les-reponses-http-au-niveau-cdn).\n\n## Optimiser le contenu pour l'extraction agentique\n\nAu-delà de la structure HTML, le contenu textuel lui-même doit être optimisé pour l'extraction par les agents IA. Cela rejoint les problématiques d'[optimisation pour les moteurs de réponse IA](/blog/optimiser-pour-les-moteurs-de-reponse-ia), mais avec une dimension supplémentaire : l'agent ne cherche pas juste à citer votre contenu, il cherche à agir avec.\n\n### La règle du \"contenu immédiatement extractible\"\n\nChaque information clé de votre page doit être extractible sans inférence contextuelle. Les agents IA sont excellents pour comprendre le langage naturel, mais ils sont bien plus fiables quand l'information est explicite et structurée.\n\nPrenez la disponibilité d'un produit. Comparez :\n\n**Mauvais** : \"Cet article rencontre actuellement un fort succès ! Commandez vite pour ne pas le rater.\" — L'agent ne sait pas si c'est en stock ou non.\n\n**Bon** : \"En stock — 12 unités disponibles. Expédition sous 24h.\" — Information extractible, quantifiable.\n\n**Optimal** : L'information textuelle visible + le JSON-LD `InStock` + l'attribut `aria-live=\"polite\"` sur le statut de stock (pour les mises à jour dynamiques).\n\n### FAQ et contenu Q&A : le format natif des agents\n\nLes agents IA fonctionnent fondamentalement en mode question-réponse. Un format FAQ avec du balisage `FAQPage` est directement consumable :\n\n```html\n\u003Csection itemscope itemtype=\"https://schema.org/FAQPage\">\n  \u003Ch2>Questions fréquentes sur le Dell U2723QE\u003C/h2>\n  \n  \u003Cdiv itemscope itemprop=\"mainEntity\" itemtype=\"https://schema.org/Question\">\n    \u003Ch3 itemprop=\"name\">Le Dell U2723QE est-il compatible avec MacBook Pro M3 ?\u003C/h3>\n    \u003Cdiv itemscope itemprop=\"acceptedAnswer\" itemtype=\"https://schema.org/Answer\">\n      \u003Cp itemprop=\"text\">\n        Oui. Le Dell U2723QE se connecte via USB-C et délivre 90W de charge. \n        Il est compatible avec tous les MacBook Pro depuis 2016. La résolution \n        4K native est supportée à 60Hz via USB-C ou DisplayPort 1.4.\n      \u003C/p>\n    \u003C/div>\n  \u003C/div>\n\u003C/section>\n```\n\nQuand un utilisateur demande à un agent \"est-ce que le Dell U2723QE marche avec mon MacBook ?\", votre FAQ structurée fournit la réponse exacte dans un format que l'agent peut extraire et restituer avec attribution.\n\n## Monitoring : détecter les régressions avant les agents\n\nLe piège le plus courant : vous optimisez votre site pour les agents IA, puis un déploiement casse le SSR sur 2 000 pages produit. Le bundle JavaScript a été mis à jour, le fallback serveur ne renvoie plus que le shell HTML vide, et personne ne s'en aperçoit pendant 3 semaines.\n\nC'est exactement le type de régression que le [crawl par les bots IA](/blog/llms-et-crawl-comment-les-bots-ia-crawlent-votre-site) ne pardonne pas. Un agent qui reçoit une page vide ne revient pas essayer demain. Il blackliste silencieusement votre domaine comme source non fiable.\n\nLes points de monitoring critiques pour le web agentique :\n\n- **SSR integrity** : vérifier que le HTML retourné sans JavaScript contient les éléments sémantiques attendus (`\u003Cmain>`, `\u003Carticle>`, `\u003Ch1>`)\n- **Structured data validity** : les JSON-LD doivent être présents et valides sur 100% des pages concernées\n- **Response time** : les agents IA ont des timeouts a","https://seogard.io/blog/how-ai-agents-see-your-website-and-how-to-build-for-them-via-sejournal-slobodanmanic","Actualités SEO","2026-04-12T15:02:57.130Z","2026-04-12","HTML sémantique, SSR, données structurées : guide technique pour rendre votre site lisible par les agents IA autonomes qui remplacent le navigateur.","\u003Cp>Un agent IA ne regarde pas votre site. Il le parse. Pas de viewport, pas de scroll, pas de hover. Il reçoit du HTML, tente de comprendre la structure sémantique, et décide en quelques millisecondes s'il peut extraire l'information demandée par l'utilisateur — ou s'il passe au concurrent. Le Search Engine Journal vient de publier une \u003Ca href=\"https://www.searchenginejournal.com/how-ai-agents-see-your-website-and-how-to-build-for-them/570443/\">analyse détaillée\u003C/a> sur ce sujet. Allons plus loin sur le plan technique.\u003C/p>\n\u003Ch2>Le modèle mental d'un agent IA : ni navigateur, ni crawler\u003C/h2>\n\u003Cp>Les crawlers classiques (Googlebot, Bingbot) et les bots IA (GPTBot, ClaudeBot, Bytespider) partagent un point commun : ils envoient une requête HTTP et traitent la réponse. Mais leurs objectifs divergent radicalement.\u003C/p>\n\u003Cp>Googlebot cherche à indexer. Il suit les liens, stocke le contenu, et passe au document suivant. Un bot IA de type crawler fait la même chose — il ingère du contenu pour entraîner un modèle ou alimenter un index de retrieval.\u003C/p>\n\u003Cp>Un \u003Cstrong>agent IA\u003C/strong>, c'est autre chose. C'est un système autonome qui agit pour le compte d'un utilisateur avec un objectif précis : \"réserve-moi un vol Paris-Tokyo le 15 juin\", \"compare les prix de ces 3 écrans 27 pouces\", \"trouve un plombier disponible demain à Lyon\". L'agent doit comprendre votre page, identifier les éléments interactifs, extraire des données structurées, et potentiellement déclencher des actions (remplir un formulaire, ajouter au panier).\u003C/p>\n\u003Ch3>Ce que l'agent voit réellement\u003C/h3>\n\u003Cp>Contrairement à ce qu'on pourrait croire, la majorité des agents IA actuels ne lancent pas de headless browser. Ils travaillent sur le HTML brut retourné par le serveur, éventuellement enrichi par un parsing JavaScript limité. Voici ce que l'agent reçoit quand il accède à une page produit typique :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Ce que votre serveur renvoie (SPA client-side) -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;!\u003C/span>\u003Cspan style=\"color:#85E89D\">DOCTYPE\u003C/span>\u003Cspan style=\"color:#B392F0\"> html\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">html\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">title\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Mon E-commerce&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">title\u003C/span>\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:#B392F0\"> src\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"/app.bundle.js\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> defer\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">script\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">body\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> id\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"root\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">body\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">html\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Pour l'agent : c'est une page vide. Aucune donnée produit, aucun prix, aucune disponibilité. Il ne peut rien faire. Comparez avec une page server-rendered :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Ce que votre serveur renvoie (SSR) -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;!\u003C/span>\u003Cspan style=\"color:#85E89D\">DOCTYPE\u003C/span>\u003Cspan style=\"color:#B392F0\"> html\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">html\u003C/span>\u003Cspan style=\"color:#B392F0\"> lang\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"fr\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">title\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Écran Dell U2723QE 27\" 4K USB-C — 549€ | TechShop&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">title\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">meta\u003C/span>\u003Cspan style=\"color:#B392F0\"> name\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"description\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Écran Dell U2723QE 27 pouces 4K IPS, USB-C 90W. Stock: 12 unités. Livraison 24h.\"\u003C/span>\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:#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\": \"Dell U2723QE\",\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\">      \"price\": \"549.00\",\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\">      \"availability\": \"https://schema.org/InStock\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"itemCondition\": \"https://schema.org/NewCondition\"\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>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">head\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">body\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">main\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">article\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemscope\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemtype\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://schema.org/Product\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">h1\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemprop\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"name\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Écran Dell U2723QE 27\" 4K USB-C&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">h1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">section\u003C/span>\u003Cspan style=\"color:#B392F0\"> aria-label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Caractéristiques techniques\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dl\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Résolution&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>3840 × 2160&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Dalle&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>IPS Black&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Connectique&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>USB-C 90W, HDMI 2.0, DisplayPort 1.4&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dl\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">section\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemprop\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"offers\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemscope\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemtype\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://schema.org/Offer\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">span\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemprop\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"price\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> content\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"549.00\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>549 €&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">span\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">link\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemprop\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"availability\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> href\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://schema.org/InStock\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">button\u003C/span>\u003Cspan style=\"color:#B392F0\"> type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"button\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> aria-label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Ajouter Dell U2723QE au panier\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">          Ajouter au panier\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">button\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">article\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">main\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">body\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">html\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>L'agent extrait immédiatement : le nom du produit, le prix, la disponibilité, les caractéristiques, et identifie le bouton d'action grâce à l'attribut \u003Ccode>aria-label\u003C/code>. Le différentiel entre ces deux réponses HTTP est la différence entre exister et ne pas exister dans le web agentique.\u003C/p>\n\u003Cp>Ce constat rejoint directement les problématiques de \u003Ca href=\"/blog/rendering-budget-de-google-combien-de-javascript-est-trop\">rendering budget que Google impose déjà\u003C/a> — sauf que les agents IA sont encore moins tolérants que Googlebot envers le JavaScript client-side.\u003C/p>\n\u003Ch2>HTML sémantique : le fondement du web agentique\u003C/h2>\n\u003Cp>Les agents IA s'appuient massivement sur la sémantique HTML pour comprendre la hiérarchie et la nature du contenu. Un \u003Ccode>&#x3C;nav>\u003C/code> leur dit \"voici la navigation\". Un \u003Ccode>&#x3C;main>\u003C/code> leur dit \"voici le contenu principal\". Un \u003Ccode>&#x3C;aside>\u003C/code> leur dit \"contenu secondaire, probablement ignorable\".\u003C/p>\n\u003Ch3>Les landmarks HTML5 qui comptent\u003C/h3>\n\u003Cp>Les éléments landmarks ne sont pas décoratifs. Pour un agent qui doit extraire l'information pertinente d'une page contenant navigation, sidebar, footer, publicités, et contenu éditorial, ces balises sont le signal primaire de filtrage :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ccode>&#x3C;header>\u003C/code> — identité du site, navigation principale\u003C/li>\n\u003Cli>\u003Ccode>&#x3C;nav>\u003C/code> — liens de navigation (l'agent peut les suivre pour explorer le site)\u003C/li>\n\u003Cli>\u003Ccode>&#x3C;main>\u003C/code> — contenu principal, c'est là que l'agent concentre son extraction\u003C/li>\n\u003Cli>\u003Ccode>&#x3C;article>\u003C/code> — unité de contenu autonome (un produit, un article, une recette)\u003C/li>\n\u003Cli>\u003Ccode>&#x3C;section>\u003C/code> avec \u003Ccode>aria-label\u003C/code> — blocs thématiques au sein d'un article\u003C/li>\n\u003Cli>\u003Ccode>&#x3C;aside>\u003C/code> — contenu connexe, l'agent le déprioritise\u003C/li>\n\u003Cli>\u003Ccode>&#x3C;footer>\u003C/code> — mentions légales, contact, liens secondaires\u003C/li>\n\u003C/ul>\n\u003Cp>Le problème : la majorité des sites SPA ou basés sur des design systems modernes remplacent tout par des \u003Ccode>&#x3C;div>\u003C/code>. Un audit rapide avec Screaming Frog, en filtrant par éléments HTML, révèle souvent que 95% du DOM est constitué de \u003Ccode>&#x3C;div>\u003C/code> et \u003Ccode>&#x3C;span>\u003C/code> sans aucune valeur sémantique.\u003C/p>\n\u003Ch3>Le cas des listes de définitions\u003C/h3>\n\u003Cp>Un pattern sous-utilisé et pourtant extrêmement puissant pour les agents IA : \u003Ccode>&#x3C;dl>\u003C/code> / \u003Ccode>&#x3C;dt>\u003C/code> / \u003Ccode>&#x3C;dd>\u003C/code>. Ce triplet exprime une relation clé-valeur native en HTML, exactement ce dont un agent a besoin pour extraire des spécifications produit, des métadonnées, ou des attributs structurés.\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Anti-pattern : specs dans un tableau stylé en CSS -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"specs-grid\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"spec-row\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"spec-label\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Poids&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"spec-value\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>6.6 kg&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Pattern sémantique : immédiatement parsable -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dl\u003C/span>\u003Cspan style=\"color:#B392F0\"> aria-label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Spécifications techniques\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Poids&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>6.6 kg&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Dimensions&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>611.4 × 364.3 × 185.0 mm&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Consommation&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dt\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>27W typique, 160W max&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dd\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">dl\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Pour un agent qui doit comparer les specs de 3 écrans, la version sémantique est directement exploitable. La version \u003Ccode>&#x3C;div>\u003C/code> nécessite une inférence basée sur les classes CSS — fragile, non standardisée, et susceptible de casser à chaque redesign.\u003C/p>\n\u003Ch2>SSR et contenu visible au first byte : une obligation\u003C/h2>\n\u003Cp>Le \u003Ca href=\"/blog/headless-cms-et-seo-avantages-et-risques-techniques\">débat SSR vs CSR\u003C/a> n'est plus un débat pour le web agentique. Le server-side rendering (ou au minimum le static site generation) est une obligation fonctionnelle.\u003C/p>\n\u003Ch3>Pourquoi les agents n'exécutent pas votre JavaScript\u003C/h3>\n\u003Cp>L'exécution JavaScript est coûteuse. Chaque page nécessite un runtime V8, de la mémoire, du temps CPU. Quand un agent doit évaluer 50 pages en parallèle pour comparer des offres, lancer 50 instances de headless browser est un non-sens économique et technique. La grande majorité des agents IA actuels — et probablement futurs — travaillent en mode \"fetch + parse HTML\", comme \u003Ccode>curl\u003C/code>.\u003C/p>\n\u003Cp>Cela a des implications directes pour les architectures frontend modernes :\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Architecture\u003C/th>\n\u003Cth>Visibilité agent IA\u003C/th>\n\u003Cth>Action requise\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>SPA pure (React/Vue CSR)\u003C/td>\n\u003Ctd>Nulle\u003C/td>\n\u003Ctd>Migration SSR obligatoire\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>SSR (Next.js, Nuxt)\u003C/td>\n\u003Ctd>Complète\u003C/td>\n\u003Ctd>Vérifier que le HTML initial contient tout le contenu\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>SSG (Astro, Hugo, 11ty)\u003C/td>\n\u003Ctd>Complète\u003C/td>\n\u003Ctd>Idéal pour contenu statique\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>ISR (Next.js)\u003C/td>\n\u003Ctd>Complète\u003C/td>\n\u003Ctd>Attention au stale content pendant la régénération\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Hybrid (SSR + CSR)\u003C/td>\n\u003Ctd>Partielle\u003C/td>\n\u003Ctd>Auditer ce qui est rendu côté serveur vs client\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Ch3>Scénario concret : migration d'un e-commerce de 18 000 pages\u003C/h3>\n\u003Cp>Prenons un cas réaliste. Un e-commerce de matériel informatique, 18 000 pages produit, construit en React SPA avec Create React App. Le site fonctionne parfaitement pour les utilisateurs humains. Mais les logs serveur montrent une tendance claire depuis 6 mois :\u003C/p>\n\u003Cul>\n\u003Cli>GPTBot : 12 000 requêtes/jour, mais temps moyen sur page = 0.3s (il ne récupère que le shell HTML vide)\u003C/li>\n\u003Cli>ClaudeBot : 8 000 requêtes/jour, même constat\u003C/li>\n\u003Cli>Trafic depuis les réponses IA (ChatGPT, Perplexity, etc.) : quasi nul malgré un catalogue de 18 000 références\u003C/li>\n\u003C/ul>\n\u003Cp>Après migration vers Next.js App Router avec SSR complet, les résultats à 8 semaines :\u003C/p>\n\u003Cul>\n\u003Cli>Temps moyen de GPTBot sur les pages produit : 1.2s (il parse maintenant le contenu complet)\u003C/li>\n\u003Cli>Apparitions dans les réponses ChatGPT pour des requêtes produit spécifiques : +340%\u003C/li>\n\u003Cli>Trafic referral depuis des interfaces agentiques : passage de ~50 à ~2 100 visites/semaine\u003C/li>\n\u003Cli>Aucun impact négatif sur le trafic Google organique (la migration SSR a même amélioré le crawl budget classique)\u003C/li>\n\u003C/ul>\n\u003Cp>La migration a pris 14 semaines avec une équipe de 3 développeurs. Le ROI s'est manifesté dès la semaine 6. Ce type de migration est documenté en détail dans notre article sur le \u003Ca href=\"/blog/changer-de-framework-next-js-vers-nuxt-ou-l-inverse-sans-perte-seo\">changement de framework sans perte SEO\u003C/a>.\u003C/p>\n\u003Ch3>Vérifier ce que l'agent reçoit réellement\u003C/h3>\n\u003Cp>Avant toute optimisation, diagnostiquez l'état actuel. La commande la plus simple :\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 le HTML brut reçu sans exécution JavaScript\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -A\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Mozilla/5.0 (compatible; GPTBot/1.0)\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> https://techshop.fr/produit/dell-u2723qe\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '&#x3C;h1\\|&#x3C;article\\|&#x3C;main\\|application/ld+json'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Résultat attendu : au moins 3-4 occurrences\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Si 0 : votre contenu est invisible pour les agents IA\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Version plus détaillée avec extraction du texte visible\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -A\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Mozilla/5.0 (compatible; GPTBot/1.0)\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> https://techshop.fr/produit/dell-u2723qe\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  python3\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">import sys\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">from html.parser import HTMLParser\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">class TextExtractor(HTMLParser):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    def __init__(self):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        super().__init__()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        self.text = []\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        self.skip = False\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    def handle_starttag(self, tag, attrs):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        if tag in ('script', 'style', 'noscript'):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            self.skip = True\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    def handle_endtag(self, tag):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        if tag in ('script', 'style', 'noscript'):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            self.skip = False\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    def handle_data(self, data):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        if not self.skip and data.strip():\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            self.text.append(data.strip())\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">e = TextExtractor()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">e.feed(sys.stdin.read())\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">content = ' '.join(e.text)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">print(f'Contenu textuel visible: {len(content)} caractères')\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">print(f'Premiers 500 chars: {content[:500]}')\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Si le contenu textuel visible est inférieur à 200 caractères sur une page produit, vous avez un problème de rendu serveur.\u003C/p>\n\u003Cp>Dans Chrome DevTools, vous pouvez aussi désactiver JavaScript (Settings → Debugger → Disable JavaScript) et recharger la page. Ce que vous voyez est ce que l'agent voit.\u003C/p>\n\u003Ch2>Données structurées : le langage natif des agents\u003C/h2>\n\u003Cp>Les agents IA ne lisent pas le texte comme un humain. Ils cherchent d'abord les données structurées — JSON-LD, Microdata, RDFa — qui leur fournissent des informations machine-readable sans ambiguïté.\u003C/p>\n\u003Ch3>Au-delà de Schema.org basique\u003C/h3>\n\u003Cp>La plupart des implémentations Schema.org se limitent au minimum : \u003Ccode>Product\u003C/code>, \u003Ccode>Article\u003C/code>, \u003Ccode>Organization\u003C/code>. Pour le web agentique, il faut aller plus loin et exposer les informations que l'agent pourrait avoir besoin d'extraire pour accomplir sa tâche.\u003C/p>\n\u003Cp>Pour un site e-commerce, voici un JSON-LD complet qui répond aux besoins d'un agent de comparaison de prix :\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\">  \"@context\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://schema.org\"\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\">\"Product\"\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\">\"Dell U2723QE\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"sku\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"U2723QE-FR\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"gtin13\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"5397184505137\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"brand\"\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\">\"Brand\"\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\">\"Dell\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\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\">\"Écrans PC > Écrans 27 pouces > Écrans 4K\"\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\">\"Moniteur 27 pouces 4K UHD IPS Black, USB-C 90W, certifié VESA DisplayHDR 400\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"image\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"https://techshop.fr/images/dell-u2723qe-front.webp\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"https://techshop.fr/images/dell-u2723qe-back.webp\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  ],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  \"offers\"\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\">\"Offer\"\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://techshop.fr/produit/dell-u2723qe\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"price\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"549.00\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"priceCurrency\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"EUR\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"priceValidUntil\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"2026-06-30\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"availability\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://schema.org/InStock\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"inventoryLevel\"\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\">\"QuantitativeValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      \"value\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">12\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"itemCondition\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://schema.org/NewCondition\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"seller\"\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\">\"Organization\"\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\">\"TechShop\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"shippingDetails\"\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\">\"OfferShippingDetails\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      \"shippingRate\"\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\">\"MonetaryAmount\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        \"value\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"0\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        \"currency\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"EUR\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      \"deliveryTime\"\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\">\"ShippingDeliveryTime\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        \"handlingTime\"\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\">\"QuantitativeValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">          \"minValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">          \"maxValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">          \"unitCode\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"DAY\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">        \"transitTime\"\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\">\"QuantitativeValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">          \"minValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">          \"maxValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">2\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">          \"unitCode\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"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:#79B8FF\">    \"hasMerchantReturnPolicy\"\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\">\"MerchantReturnPolicy\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      \"returnPolicyCategory\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://schema.org/MerchantReturnFiniteReturnWindow\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      \"merchantReturnDays\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">30\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">      \"returnMethod\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"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:#79B8FF\">  \"additionalProperty\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    {\u003C/span>\u003Cspan style=\"color:#79B8FF\">\"@type\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"PropertyValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">\"name\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Résolution\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">\"value\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"3840 × 2160\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">},\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    {\u003C/span>\u003Cspan style=\"color:#79B8FF\">\"@type\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"PropertyValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">\"name\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Type de dalle\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">\"value\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"IPS Black\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">},\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    {\u003C/span>\u003Cspan style=\"color:#79B8FF\">\"@type\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"PropertyValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">\"name\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Taux de rafraîchissement\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">\"value\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"60 Hz\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">},\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    {\u003C/span>\u003Cspan style=\"color:#79B8FF\">\"@type\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"PropertyValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">\"name\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"USB-C Power Delivery\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">\"value\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"90W\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">},\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    {\u003C/span>\u003Cspan style=\"color:#79B8FF\">\"@type\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"PropertyValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">\"name\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Certification\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">\"value\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"VESA DisplayHDR 400\"\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:#79B8FF\">  \"review\"\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\">\"AggregateRating\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"ratingValue\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"4.6\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    \"reviewCount\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"234\"\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>\u003C/code>\u003C/pre>\n\u003Cp>Notez les éléments qui font la différence pour un agent IA :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ccode>inventoryLevel\u003C/code> : l'agent sait qu'il reste 12 unités en stock, pas juste \"en stock\"\u003C/li>\n\u003Cli>\u003Ccode>shippingDetails\u003C/code> avec \u003Ccode>deliveryTime\u003C/code> : l'agent peut promettre \"livré en 1-2 jours\" à l'utilisateur\u003C/li>\n\u003Cli>\u003Ccode>hasMerchantReturnPolicy\u003C/code> : l'agent peut confirmer le retour sous 30 jours\u003C/li>\n\u003Cli>\u003Ccode>additionalProperty\u003C/code> : chaque spec technique est une paire clé-valeur exploitable\u003C/li>\n\u003Cli>\u003Ccode>gtin13\u003C/code> : identifiant unique qui permet à l'agent de croiser les données entre marchands\u003C/li>\n\u003C/ul>\n\u003Cp>Ce niveau de détail dans les données structurées est ce qui différencie un site \"trouvable\" d'un site \"actionable\" par un agent IA. L'article de Search Engine Journal souligne ce point — nous allons plus loin en montrant que les propriétés comme \u003Ccode>shippingDetails\u003C/code> et \u003Ccode>inventoryLevel\u003C/code>, souvent ignorées, deviennent critiques dans un contexte agentique.\u003C/p>\n\u003Ch2>Accessibilité = Agent-readability\u003C/h2>\n\u003Cp>L'insight le plus contre-intuitif de cette transition vers le web agentique : les patterns d'accessibilité web (ARIA, labels explicites, rôles sémantiques) sont exactement ce dont les agents IA ont besoin pour interagir avec votre site.\u003C/p>\n\u003Ch3>Les attributs ARIA comme API d'interaction\u003C/h3>\n\u003Cp>Quand un agent IA doit \"cliquer\" sur un bouton, il ne regarde pas un rectangle bleu sur l'écran. Il cherche dans le DOM un élément interactif avec un label descriptif. Les attributs ARIA deviennent une sorte d'API implicite :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Inutilisable par un agent -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"btn-primary\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> onclick\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#B392F0\">addToCart\u003C/span>\u003Cspan style=\"color:#9ECBFF\">(\u003C/span>\u003Cspan style=\"color:#79B8FF\">42\u003C/span>\u003Cspan style=\"color:#9ECBFF\">)\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">svg\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>...&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">svg\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">span\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Ajouter&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">span\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Exploitable par un agent -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">button\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"button\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  aria-label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Ajouter Dell U2723QE au panier — 549€\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  data-product-id\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"42\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  data-action\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"add-to-cart\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">svg\u003C/span>\u003Cspan style=\"color:#B392F0\"> aria-hidden\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"true\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>...&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">svg\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  Ajouter au panier\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">button\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>L'agent extrait de la deuxième version : le type d'action (ajout au panier), le produit concerné, le prix. Le \u003Ccode>data-action\u003C/code> et le \u003Ccode>data-product-id\u003C/code> sont des bonus qui facilitent l'automatisation.\u003C/p>\n\u003Ch3>Formulaires : l'interface agent par excellence\u003C/h3>\n\u003Cp>Les formulaires sont le principal vecteur d'action des agents IA. Un formulaire de recherche, de réservation, de commande — c'est par là que l'agent accomplit la tâche de l'utilisateur. Et c'est là que les mauvaises pratiques HTML coûtent le plus cher.\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Formulaire de recherche agent-friendly -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">form\u003C/span>\u003Cspan style=\"color:#B392F0\"> action\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"/recherche\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> method\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"get\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> role\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"search\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> aria-label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Recherche de produits\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#B392F0\"> for\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"search-query\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Rechercher un produit&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">input\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">    type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"search\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">    id\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"search-query\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">    name\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"q\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">    placeholder\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Ex: écran 4K USB-C\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">    autocomplete\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"off\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">    aria-describedby\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"search-help\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">span\u003C/span>\u003Cspan style=\"color:#B392F0\"> id\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"search-help\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> class\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"sr-only\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    Recherchez par nom de produit, marque, ou référence\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">span\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">button\u003C/span>\u003Cspan style=\"color:#B392F0\"> type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"submit\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Rechercher&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">button\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">form\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">&#x3C;!-- Filtres avec sémantique exploitable -->\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">fieldset\u003C/span>\u003Cspan style=\"color:#B392F0\"> aria-label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Filtres de recherche\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">legend\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Affiner les résultats&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">legend\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\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">fieldset\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">legend\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Fourchette de prix&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">legend\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#B392F0\"> for\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"price-min\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Prix minimum (€)&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">input\u003C/span>\u003Cspan style=\"color:#B392F0\"> type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"number\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> id\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"price-min\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> name\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"price_min\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> min\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"0\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> step\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"10\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#B392F0\"> for\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"price-max\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Prix maximum (€)&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">input\u003C/span>\u003Cspan style=\"color:#B392F0\"> type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"number\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> id\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"price-max\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> name\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"price_max\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> min\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"0\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> step\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"10\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> />\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">fieldset\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\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">fieldset\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">legend\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Marque&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">legend\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">input\u003C/span>\u003Cspan style=\"color:#B392F0\"> type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"checkbox\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> name\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"brand\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> value\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"dell\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> /> Dell&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">input\u003C/span>\u003Cspan style=\"color:#B392F0\"> type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"checkbox\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> name\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"brand\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> value\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"lg\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> /> LG&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">input\u003C/span>\u003Cspan style=\"color:#B392F0\"> type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"checkbox\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> name\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"brand\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> value\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"samsung\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> /> Samsung&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">label\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">fieldset\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">fieldset\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Chaque \u003Ccode>&#x3C;label>\u003C/code>, chaque \u003Ccode>&#x3C;legend>\u003C/code>, chaque \u003Ccode>&#x3C;fieldset>\u003C/code> est un indice que l'agent utilise pour mapper l'intention de l'utilisateur (\"trouve un écran Dell à moins de 600€\") vers les bons champs du formulaire.\u003C/p>\n\u003Ch2>Robots.txt, User-Agent et contrôle d'accès des agents\u003C/h2>\n\u003Cp>La montée en puissance du trafic de bots IA — \u003Ca href=\"/blog/ai-bot-traffic-surged-300-hitting-publishers-hardest-report\">qui a explosé de 300% ces derniers mois\u003C/a> — pose une question stratégique : faut-il laisser les agents accéder à votre site, et si oui, lesquels ?\u003C/p>\n\u003Ch3>Différencier crawlers IA et agents IA dans robots.txt\u003C/h3>\n\u003Cp>Il existe une distinction importante entre les bots qui crawlent pour entraîner des modèles (GPTBot en mode training) et les agents qui accèdent à votre site pour répondre à une requête utilisateur en temps réel. Bloquer les premiers est légitime si vous ne souhaitez pas alimenter les LLM. Bloquer les seconds revient à vous rendre invisible dans les interfaces agentiques.\u003C/p>\n\u003Cp>Le problème : la plupart des User-Agent sont les mêmes. GPTBot est utilisé à la fois pour le crawl d'entraînement et pour le browsing en temps réel. La seule distinction fiable passe par des headers HTTP spécifiques que certains agents commencent à envoyer, ou par la fréquence et les patterns de requêtes.\u003C/p>\n\u003Cp>Voici une config Nginx qui journalise les accès des agents IA pour vous permettre d'analyser leur comportement avant de décider d'une politique :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># /etc/nginx/conf.d/ai-agents-logging.conf\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Mapper les User-Agent des agents IA connus\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">map\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $\u003C/span>\u003Cspan style=\"color:#FFAB70\">http_user_agent\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> $ai_agent_type {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    default\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                     \"none\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*GPTBot\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                  \"openai\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*ChatGPT-User\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">           \"openai-browsing\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*ClaudeBot\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">              \"anthropic\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*Claude-Web\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">             \"anthropic-browsing\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*PerplexityBot\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">          \"perplexity\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*Bytespider\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">             \"bytedance\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*Google-Extended\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">        \"google-ai\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*Applebot-Extended\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">      \"apple-ai\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"~*cohere-ai\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\">              \"cohere\"\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\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Log dédié pour le trafic IA\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">log_format \u003C/span>\u003Cspan style=\"color:#E1E4E8\">ai_access \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">remote_addr\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> - $\u003C/span>\u003Cspan style=\"color:#E1E4E8\">ai_agent_type\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> [$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">time_local\u003C/span>\u003Cspan style=\"color:#9ECBFF\">] '\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                     '\"$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">request\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\" $\u003C/span>\u003Cspan style=\"color:#E1E4E8\">status\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> $\u003C/span>\u003Cspan style=\"color:#E1E4E8\">body_bytes_sent\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                     '\"$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">http_referer\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\" \"$\u003C/span>\u003Cspan style=\"color:#E1E4E8\">request_time\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Activer le log conditionnel\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">server\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # ... votre config existante ...\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # Log séparé pour les agents IA\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    access_log \u003C/span>\u003Cspan style=\"color:#E1E4E8\">/var/log/nginx/ai-agents.log ai_access if=$ai_agent_type;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # Rate limiting spécifique aux agents IA\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    limit_req_zone \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$ai_agent_type zone=ai_agents:10m rate=10r/s;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    location\u003C/span>\u003Cspan style=\"color:#B392F0\"> / \u003C/span>\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">        # Appliquer le rate limit seulement aux agents IA\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ($ai_agent_type \u003C/span>\u003Cspan style=\"color:#F97583\">!= \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"none\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            limit_req \u003C/span>\u003Cspan style=\"color:#E1E4E8\">zone=ai_agents burst=20 nodelay;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">        # ... proxy_pass ou autre ...\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>\u003C/code>\u003C/pre>\n\u003Cp>Cette approche vous donne de la visibilité. Analysez \u003Ccode>/var/log/nginx/ai-agents.log\u003C/code> pendant 2 semaines avant de prendre des décisions de blocage. Vous pourriez découvrir que \u003Ccode>ChatGPT-User\u003C/code> (mode browsing, celui qui répond aux utilisateurs en temps réel) représente un trafic qualifié que vous ne voulez surtout pas bloquer.\u003C/p>\n\u003Cp>Pour une approche plus poussée de modification des réponses au niveau CDN, consultez notre guide sur \u003Ca href=\"/blog/edge-seo-modifier-les-reponses-http-au-niveau-cdn\">l'Edge SEO\u003C/a>.\u003C/p>\n\u003Ch2>Optimiser le contenu pour l'extraction agentique\u003C/h2>\n\u003Cp>Au-delà de la structure HTML, le contenu textuel lui-même doit être optimisé pour l'extraction par les agents IA. Cela rejoint les problématiques d'\u003Ca href=\"/blog/optimiser-pour-les-moteurs-de-reponse-ia\">optimisation pour les moteurs de réponse IA\u003C/a>, mais avec une dimension supplémentaire : l'agent ne cherche pas juste à citer votre contenu, il cherche à agir avec.\u003C/p>\n\u003Ch3>La règle du \"contenu immédiatement extractible\"\u003C/h3>\n\u003Cp>Chaque information clé de votre page doit être extractible sans inférence contextuelle. Les agents IA sont excellents pour comprendre le langage naturel, mais ils sont bien plus fiables quand l'information est explicite et structurée.\u003C/p>\n\u003Cp>Prenez la disponibilité d'un produit. Comparez :\u003C/p>\n\u003Cp>\u003Cstrong>Mauvais\u003C/strong> : \"Cet article rencontre actuellement un fort succès ! Commandez vite pour ne pas le rater.\" — L'agent ne sait pas si c'est en stock ou non.\u003C/p>\n\u003Cp>\u003Cstrong>Bon\u003C/strong> : \"En stock — 12 unités disponibles. Expédition sous 24h.\" — Information extractible, quantifiable.\u003C/p>\n\u003Cp>\u003Cstrong>Optimal\u003C/strong> : L'information textuelle visible + le JSON-LD \u003Ccode>InStock\u003C/code> + l'attribut \u003Ccode>aria-live=\"polite\"\u003C/code> sur le statut de stock (pour les mises à jour dynamiques).\u003C/p>\n\u003Ch3>FAQ et contenu Q&#x26;A : le format natif des agents\u003C/h3>\n\u003Cp>Les agents IA fonctionnent fondamentalement en mode question-réponse. Un format FAQ avec du balisage \u003Ccode>FAQPage\u003C/code> est directement consumable :\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\">section\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemscope\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemtype\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://schema.org/FAQPage\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">h2\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Questions fréquentes sur le Dell U2723QE&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">h2\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\">  &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemscope\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemprop\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"mainEntity\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemtype\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://schema.org/Question\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">h3\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemprop\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"name\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>Le Dell U2723QE est-il compatible avec MacBook Pro M3 ?&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">h3\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemscope\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemprop\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"acceptedAnswer\"\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemtype\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://schema.org/Answer\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">p\u003C/span>\u003Cspan style=\"color:#B392F0\"> itemprop\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"text\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        Oui. Le Dell U2723QE se connecte via USB-C et délivre 90W de charge. \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        Il est compatible avec tous les MacBook Pro depuis 2016. La résolution \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        4K native est supportée à 60Hz via USB-C ou DisplayPort 1.4.\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">p\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  &#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">div\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">section\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Quand un utilisateur demande à un agent \"est-ce que le Dell U2723QE marche avec mon MacBook ?\", votre FAQ structurée fournit la réponse exacte dans un format que l'agent peut extraire et restituer avec attribution.\u003C/p>\n\u003Ch2>Monitoring : détecter les régressions avant les agents\u003C/h2>\n\u003Cp>Le piège le plus courant : vous optimisez votre site pour les agents IA, puis un déploiement casse le SSR sur 2 000 pages produit. Le bundle JavaScript a été mis à jour, le fallback serveur ne renvoie plus que le shell HTML vide, et personne ne s'en aperçoit pendant 3 semaines.\u003C/p>\n\u003Cp>C'est exactement le type de régression que le \u003Ca href=\"/blog/llms-et-crawl-comment-les-bots-ia-crawlent-votre-site\">crawl par les bots IA\u003C/a> ne pardonne pas. Un agent qui reçoit une page vide ne revient pas essayer demain. Il blackliste silencieusement votre domaine comme source non fiable.\u003C/p>\n\u003Cp>Les points de monitoring critiques pour le web agentique :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>SSR integrity\u003C/strong> : vérifier que le HTML retourné sans JavaScript contient les éléments sémantiques attendus (\u003Ccode>&#x3C;main>\u003C/code>, \u003Ccode>&#x3C;article>\u003C/code>, \u003Ccode>&#x3C;h1>\u003C/code>)\u003C/li>\n\u003Cli>\u003Cstrong>Structured data validity\u003C/strong> : les JSON-LD doivent être présents et valides sur 100% des pages concernées\u003C/li>\n\u003Cli>\u003Cstrong>Response time\u003C/strong> : les agents IA ont des timeouts a\u003C/li>\n\u003C/ul>",null,12,[18,19,20,21,22],"agents IA","HTML sémantique","SSR","accessibilité","agentic web","Comment les agents IA voient votre site (et comment construire pour eux)","Sun Apr 12 2026 15:02:57 GMT+0000 (Coordinated Universal Time)",[26,41,55],{"_id":27,"slug":28,"__v":6,"author":7,"canonical":29,"category":10,"createdAt":30,"date":12,"description":31,"image":15,"imageAlt":15,"readingTime":32,"tags":33,"title":39,"updatedAt":40},"69db3593aa6b273b0c387277","why-product-feeds-shouldn-t-be-the-most-ignored-seo-system-in-ecommerce","https://seogard.io/blog/why-product-feeds-shouldn-t-be-the-most-ignored-seo-system-in-ecommerce","2026-04-12T06:02:59.904Z","Les product feeds pilotent Google Shopping, structured data et AI search. Voici comment les transformer en levier SEO technique majeur.",14,[34,35,36,37,38],"product feeds","ecommerce SEO","structured data","Google Merchant Center","AI search","Product Feeds & SEO : le système le plus négligé du e-commerce","Sun Apr 12 2026 06:02:59 GMT+0000 (Coordinated Universal Time)",{"_id":42,"slug":43,"__v":6,"author":7,"canonical":44,"category":10,"createdAt":45,"date":12,"description":46,"image":15,"imageAlt":15,"readingTime":16,"tags":47,"title":53,"updatedAt":54},"69db6dc1aa6b273b0c6553f6","google-says-it-can-handle-multiple-urls-to-the-same-content-via-sejournal-martinibuster","https://seogard.io/blog/google-says-it-can-handle-multiple-urls-to-the-same-content-via-sejournal-martinibuster","2026-04-12T10:02:41.445Z","Google affirme gérer les URLs multiples pointant vers un même contenu. Analyse technique des mécanismes réels, limites et configurations à maîtriser.",[48,49,50,51,52],"duplicate content","canonical","crawl budget","google indexation","urls multiples","Duplicate content et URLs multiples : ce que Google gère vraiment","Sun Apr 12 2026 10:02:41 GMT+0000 (Coordinated Universal Time)",{"_id":56,"slug":57,"__v":6,"author":7,"canonical":58,"category":10,"createdAt":59,"date":60,"description":61,"image":15,"imageAlt":15,"readingTime":16,"tags":62,"title":68,"updatedAt":69},"69d9abd9aa6b273b0cfdbc43","why-your-new-seo-vendor-can-t-build-on-a-broken-foundation-via-sejournal-taylordanrw","https://seogard.io/blog/why-your-new-seo-vendor-can-t-build-on-a-broken-foundation-via-sejournal-taylordanrw","2026-04-11T02:03:05.178Z","2026-04-11","Technical debt, contenu dégradé, historique de liens toxiques : anatomie des fondations cassées qui plombent tout nouveau prestataire SEO.",[63,64,65,66,67],"dette technique SEO","migration SEO","audit technique","prestataire SEO","fondations SEO","Dette technique SEO : pourquoi un nouveau prestataire ne peut pas tout sauver","Sat Apr 11 2026 02:03:05 GMT+0000 (Coordinated Universal Time)"]