[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f-nPuTW3Bmj2DJsuNfBLUZoGV23n8LNJCE8ZKgmlUdYw":3,"$fRAFgAFjaMj4mfs_mB3CbhmwaaegqobtpRo_ZUmpGuKU":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},"69dfa898aa6b273b0cc6fde2","agentic-engine-optimization-google-ai-director-outlines-new-content-playbook",0,"Equipe Seogard","Un directeur de Google Cloud AI vient de formaliser ce que beaucoup pressentaient : le SEO doit désormais cibler des agents autonomes, pas uniquement des humains derrière un navigateur. Le terme qu'il pose — **Agentic Engine Optimization** — n'est pas un rebranding marketing du SEO classique. C'est un changement de paradigme dans la manière dont le contenu doit être structuré, exposé et consommé par des machines capables de raisonner, de planifier et d'exécuter des tâches en chaîne.\n\n## Ce que dit réellement le framework de Google\n\nLe directeur en question, Kaz Sato, ne se contente pas de dire \"adaptez votre contenu à l'IA\". Il décrit un modèle où les agents IA — qu'il s'agisse de Gemini, de GPT-based agents, ou de n'importe quel orchestrateur LLM — consomment le web de manière fondamentalement différente d'un crawler traditionnel.\n\n### Le passage du crawl indexation-first au crawl task-first\n\nUn crawler classique (Googlebot, Bingbot) suit un pattern simple : découvrir des URLs, les rendre, extraire le contenu, indexer. L'objectif est de construire un index inversé pour répondre à des requêtes.\n\nUn agent IA suit un pattern radicalement différent :\n1. Il reçoit une **tâche** (ex : \"trouve-moi le meilleur hébergement WordPress pour un site e-commerce de 8000 SKUs avec du SSR Next.js\")\n2. Il **planifie** une séquence d'actions (chercher, comparer, vérifier des specs, croiser des avis)\n3. Il **consomme** du contenu structuré pour alimenter son raisonnement\n4. Il **agit** (recommande, achète, configure)\n\nLa différence critique : l'agent ne cherche pas une page à afficher à un humain. Il cherche des **données exploitables** pour avancer dans sa chaîne de raisonnement. Si votre contenu n'est pas parsable de manière fiable par une machine, l'agent passe à la source suivante.\n\n### Les trois piliers du framework AEO\n\nD'après l'analyse du framework présenté par Sato, trois axes structurent l'Agentic Engine Optimization :\n\n**1. Structured consumability** — Le contenu doit être consommable par un programme, pas seulement lisible par un humain. JSON-LD, données structurées riches, APIs ouvertes.\n\n**2. Task relevance** — Le contenu doit répondre à des intentions d'action, pas seulement des intentions informationnelles. \"Quel est le prix de X\" est plus utile à un agent que \"L'histoire de X\".\n\n**3. Trust signals machine-readable** — Les signaux de confiance (auteur, date de mise à jour, sources citées, certifications) doivent être exposés dans un format que l'agent peut parser, pas enterrés dans un paragraphe de prose.\n\nCe framework rejoint des réflexions déjà engagées autour de [la manière dont les agents IA perçoivent votre site](/blog/how-ai-agents-see-your-website-and-how-to-build-for-them-via-sejournal-slobodanmanic) et de [l'impact de la recherche agentique de Google](/blog/google-s-task-based-agentic-search-is-disrupting-seo-today-not-tomorrow-via-sejournal-martinibuster).\n\n## Rendre votre contenu consommable par des agents : l'implémentation technique\n\nLa théorie est une chose. Voyons ce que ça implique sur votre codebase.\n\n### Structured data : aller au-delà du minimum\n\nLa plupart des sites implémentent le JSON-LD minimum pour les rich snippets — un `Product`, un `Article`, un `BreadcrumbList`. Pour l'AEO, il faut penser en termes de **complétude informationnelle** : chaque entité mentionnée dans votre contenu devrait être décrite de manière machine-readable.\n\nPrenons un site e-commerce de 15 000 produits qui vend du matériel réseau. La fiche produit classique a un schema `Product` avec nom, prix, disponibilité. Pour un agent qui exécute la tâche \"configure un réseau mesh pour un entrepôt de 2000m²\", ce n'est pas suffisant. L'agent a besoin de specs exploitables :\n\n```html\n\u003Cscript type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Product\",\n  \"name\": \"UniFi U7 Pro Access Point\",\n  \"sku\": \"U7-PRO\",\n  \"brand\": {\n    \"@type\": \"Brand\",\n    \"name\": \"Ubiquiti\"\n  },\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"price\": \"189.00\",\n    \"priceCurrency\": \"EUR\",\n    \"availability\": \"https://schema.org/InStock\",\n    \"priceValidUntil\": \"2026-06-30\"\n  },\n  \"additionalProperty\": [\n    {\n      \"@type\": \"PropertyValue\",\n      \"name\": \"wifi_standard\",\n      \"value\": \"Wi-Fi 7 (802.11be)\"\n    },\n    {\n      \"@type\": \"PropertyValue\",\n      \"name\": \"max_coverage_sqm\",\n      \"value\": \"350\",\n      \"unitCode\": \"MTK\"\n    },\n    {\n      \"@type\": \"PropertyValue\",\n      \"name\": \"poe_standard\",\n      \"value\": \"802.3at (PoE+)\"\n    },\n    {\n      \"@type\": \"PropertyValue\",\n      \"name\": \"max_concurrent_clients\",\n      \"value\": \"600\"\n    },\n    {\n      \"@type\": \"PropertyValue\",\n      \"name\": \"mounting_type\",\n      \"value\": \"ceiling\"\n    }\n  ],\n  \"isRelatedTo\": [\n    {\n      \"@type\": \"Product\",\n      \"name\": \"UniFi Switch Pro 24 PoE\",\n      \"sku\": \"USW-PRO-24-POE\",\n      \"url\": \"https://reseau-pro.fr/produits/usw-pro-24-poe\"\n    }\n  ]\n}\n\u003C/script>\n```\n\nLes `additionalProperty` avec des noms normalisés et des valeurs unitaires sont ce qui permet à un agent de **raisonner** sur votre produit : \"350m² de couverture × 6 APs = 2100m², suffisant pour l'entrepôt\". Sans ces données structurées, l'agent doit parser du texte libre, ce qui est moins fiable et le pousse vers des sources mieux structurées.\n\nL'utilisation de `isRelatedTo` permet à l'agent de naviguer votre catalogue de manière programmatique, sans dépendre du DOM de votre page.\n\n### Exposer une API de contenu crawlable\n\nLe framework AEO pousse une idée qui existait déjà en SEO technique mais qui prend une dimension nouvelle : votre contenu doit être accessible via une **API structurée**, pas seulement via des pages HTML.\n\nCela ne signifie pas remplacer vos pages — les humains en ont toujours besoin. Mais ajouter un endpoint API parallèle qui sert le même contenu dans un format machine-optimized change la donne pour les agents.\n\nVoici un exemple d'implémentation avec un endpoint Next.js App Router qui sert le contenu produit en JSON :\n\n```typescript\n// app/api/products/[sku]/route.ts\nimport { NextRequest, NextResponse } from 'next/server';\nimport { getProductBySku } from '@/lib/catalog';\n\nexport async function GET(\n  request: NextRequest,\n  { params }: { params: { sku: string } }\n) {\n  const product = await getProductBySku(params.sku);\n  \n  if (!product) {\n    return NextResponse.json(\n      { error: 'product_not_found', sku: params.sku },\n      { status: 404 }\n    );\n  }\n\n  const agentPayload = {\n    '@context': 'https://schema.org',\n    '@type': 'Product',\n    identifier: product.sku,\n    name: product.name,\n    description: product.shortDescription,\n    brand: product.brand,\n    category: product.categoryPath,\n    offers: {\n      price: product.price,\n      currency: 'EUR',\n      availability: product.inStock ? 'InStock' : 'OutOfStock',\n      deliveryLeadTime: {\n        value: product.shippingDays,\n        unitCode: 'DAY'\n      }\n    },\n    specs: product.technicalSpecs.map(spec => ({\n      name: spec.key,\n      value: spec.value,\n      unit: spec.unit || null\n    })),\n    compatibility: product.compatibleWith.map(compat => ({\n      sku: compat.sku,\n      name: compat.name,\n      relationship: compat.type // 'requires' | 'recommended' | 'alternative'\n    })),\n    lastVerified: product.updatedAt.toISOString(),\n    source: `https://reseau-pro.fr/produits/${product.slug}`\n  };\n\n  return NextResponse.json(agentPayload, {\n    headers: {\n      'Cache-Control': 'public, max-age=3600, s-maxage=86400',\n      'X-Content-Type': 'agent-consumable',\n      'Link': `\u003Chttps://reseau-pro.fr/produits/${product.slug}>; rel=\"canonical\"`,\n    }\n  });\n}\n```\n\nQuelques points à noter :\n\n- Le champ `compatibility` avec des types de relation (`requires`, `recommended`, `alternative`) permet à un agent de construire un panier cohérent sans intervention humaine.\n- Le `lastVerified` est un signal de fraîcheur critique pour un agent qui doit évaluer la fiabilité de l'information.\n- Le header `Link` avec `rel=\"canonical\"` pointe vers la page HTML correspondante, ce qui préserve la cohérence SEO.\n\nCette approche API-first rejoint les bonnes pratiques décrites dans notre guide sur [servir du contenu crawlable depuis une API](/blog/api-first-et-seo-servir-du-contenu-crawlable-depuis-une-api).\n\n## Contrôler l'accès des agents IA à votre contenu\n\nL'AEO n'est pas un chèque en blanc donné à tous les bots. Le framework de Sato insiste sur un point : vous devez **choisir** quels agents accèdent à quoi. La configuration serveur devient un levier stratégique.\n\n### robots.txt pour les agents IA : l'état de l'art\n\nLe `robots.txt` reste le premier point de contrôle, mais la prolifération des user-agents IA rend sa gestion complexe. En avril 2026, voici les principaux bots IA documentés :\n\n```nginx\n# robots.txt — Configuration AEO-aware\n\n# Googlebot classique — accès complet\nUser-agent: Googlebot\nAllow: /\n\n# Google-Extended (entraînement Gemini) — bloqué\nUser-agent: Google-Extended\nDisallow: /\n\n# GPTBot (OpenAI) — accès aux pages produits et guides, pas au reste\nUser-agent: GPTBot\nAllow: /produits/\nAllow: /guides/\nAllow: /api/products/\nDisallow: /compte/\nDisallow: /panier/\nDisallow: /admin/\n\n# Claude-Web (Anthropic)\nUser-agent: Claude-Web\nAllow: /produits/\nAllow: /guides/\nAllow: /api/products/\nDisallow: /\n\n# CCBot (Common Crawl — entraînement LLM)\nUser-agent: CCBot\nDisallow: /\n\n# Bytespider (ByteDance)\nUser-agent: Bytespider\nDisallow: /\n\n# Agents autorisés — accès API\nUser-agent: PerplexityBot\nAllow: /api/products/\nAllow: /produits/\nDisallow: /\n\n# Sitemap\nSitemap: https://reseau-pro.fr/sitemap-index.xml\n```\n\nLa logique ici est différenciée : vous bloquez l'entraînement de modèles (Google-Extended, CCBot, Bytespider) mais vous autorisez la consommation par des agents de recherche (GPTBot, PerplexityBot) sur les sections qui ont une valeur commerciale pour vous.\n\nLe trafic généré par les bots IA [ne cesse de croître](/blog/openai-meta-bytedance-lead-ai-bot-traffic-in-publishing-via-sejournal-mattgsouthern), ce qui rend cette configuration non-optionnelle pour tout site de taille significative.\n\n### Rate limiting par catégorie d'agent\n\nLe robots.txt ne gère pas le débit. Pour ça, il faut du rate limiting côté serveur. Voici une config Nginx qui différencie les limites par type de bot :\n\n```nginx\n# /etc/nginx/conf.d/ai-agents-ratelimit.conf\n\n# Zones de rate limiting\nmap $http_user_agent $agent_category {\n    default                \"human\";\n    ~*Googlebot            \"googlebot\";\n    ~*GPTBot               \"ai_search\";\n    ~*PerplexityBot        \"ai_search\";\n    ~*Claude-Web           \"ai_search\";\n    ~*Bytespider           \"ai_blocked\";\n    ~*CCBot                \"ai_blocked\";\n    ~*Google-Extended      \"ai_blocked\";\n}\n\nlimit_req_zone $binary_remote_addr zone=human:10m rate=30r/s;\nlimit_req_zone $binary_remote_addr zone=googlebot:10m rate=50r/s;\nlimit_req_zone $binary_remote_addr zone=ai_search:10m rate=5r/s;\nlimit_req_zone $binary_remote_addr zone=ai_blocked:10m rate=0r/s;\n\nserver {\n    listen 443 ssl http2;\n    server_name reseau-pro.fr;\n\n    # Rate limiting conditionnel\n    location /api/products/ {\n        limit_req zone=$agent_category burst=10 nodelay;\n        \n        # Headers de traçabilité\n        add_header X-Agent-Category $agent_category;\n        add_header X-RateLimit-Policy \"aeo-aware\";\n        \n        proxy_pass http://backend;\n    }\n\n    # Bloquer complètement les agents non autorisés\n    if ($agent_category = \"ai_blocked\") {\n        return 403;\n    }\n}\n```\n\nCe setup vous donne une visibilité granulaire sur qui consomme quoi, et à quel rythme. Les logs Nginx avec `$agent_category` permettent ensuite d'analyser le trafic agent dans votre stack de monitoring.\n\n## Scénario concret : migration AEO d'un site média de 22 000 pages\n\nPrenons le cas d'un site média tech francophone — appelons-le `technews.fr` — avec 22 000 articles, 4 millions de visites organiques mensuelles, et une stack Nuxt.js 3 avec SSR.\n\n### L'état initial\n\nAvant AEO, le site a un schema `Article` basique sur chaque page, un sitemap XML standard, et un `robots.txt` qui autorise tout. Screaming Frog révèle :\n- 22 000 pages avec du JSON-LD `Article` (nom, date, auteur)\n- 0% de pages avec des `additionalProperty` ou des entités liées\n- 65% des articles n'ont pas de `dateModified` dans leur schema\n- L'API interne (utilisée par le front) retourne du JSON non-structuré, sans contexte Schema.org\n\n### Le plan de migration en 4 phases\n\n**Phase 1 (semaine 1-2) : enrichissement du schema existant**\n\nL'équipe ajoute à chaque `Article` :\n- `dateModified` systématique (alimenté par le CMS)\n- `about` avec des entités Wikidata liées au sujet\n- `speakable` pour les sections clés (utilisé par Google Assistant et les agents vocaux)\n- `citation` pour les sources référencées\n\nRésultat mesurable : le taux de rich results dans Search Console passe de 12% à 31% en 3 semaines.\n\n**Phase 2 (semaine 3-4) : API de contenu agent-friendly**\n\nCréation d'un endpoint `/api/articles/[slug]` qui expose chaque article avec :\n- Le contenu en texte structuré (sections titrées, pas du HTML brut)\n- Les entités mentionnées avec leurs identifiants Wikidata\n- Les relations entre articles (sujet connexe, mise à jour de, contredit)\n- Un `confidence_score` sur la fraîcheur (basé sur `dateModified` vs la volatilité du sujet)\n\n**Phase 3 (semaine 5-6) : robots.txt et rate limiting AEO**\n\nDéploiement de la configuration robots.txt différenciée et du rate limiting Nginx. Monitoring du trafic agent via des logs structurés.\n\nObservation à J+14 : les requêtes de GPTBot passent de 800/jour à 3 200/jour, concentrées sur les articles de moins de 90 jours. PerplexityBot monte de 200 à 1 400 requêtes/jour, principalement sur l'endpoint API.\n\n**Phase 4 (semaine 7-8) : contenu task-oriented**\n\nL'équipe éditoriale restructure les 500 articles les plus performants pour inclure des sections \"actionables\" : comparatifs avec des tableaux structurés, checklists, recommandations avec des conditions explicites (\"si votre budget est inférieur à X, alors Y\").\n\n### Résultats à 3 mois\n\n- Les citations dans les AI Overviews de Google passent de 45/mois à 280/mois\n- Le trafic referral depuis les interfaces d'agents (Perplexity, ChatGPT avec browsing) représente 8% du trafic total, contre 1.2% avant la migration\n- Le trafic organique classique reste stable (variation de -2%, dans la marge d'erreur)\n- Le crawl budget consommé par les bots IA est maîtrisé : pas de dégradation du crawl de Googlebot classique\n\nCe type de résultat est cohérent avec ce que [les analyses de 400 sites révèlent sur les gains de trafic organique](/blog/what-400-sites-reveal-about-organic-traffic-gains-via-sejournal-mattgsouthern) — les sites qui structurent mieux leur contenu captent une part croissante du trafic.\n\n## Les trade-offs et limites de l'AEO\n\nIl serait malhonnête de présenter l'AEO comme une solution universelle sans frictions. Plusieurs points méritent une analyse critique.\n\n### Le problème de l'attribution\n\nQuand un agent IA utilise votre contenu pour répondre à une requête, vous n'obtenez pas toujours un lien retour. Perplexity cite ses sources. ChatGPT ne le fait pas systématiquement. Les AI Overviews de Google citent parfois, parfois non. Optimiser pour les agents, c'est potentiellement nourrir une machine qui cannibalise votre trafic direct.\n\nLa réponse pragmatique : si votre contenu n'est pas consommé par les agents, celui de vos concurrents le sera. L'AEO n'est pas un choix d'optimisme — c'est un choix de positionnement défensif. Comme le confirme [l'analyse de la direction prise par Google avec la recherche agentique](/blog/google-s-ceo-predicts-search-will-become-an-ai-agent-manager-via-sejournal-martinibuster), le mouvement est irréversible.\n\n### Le coût de la double maintenance\n\nMaintenir des pages HTML + un endpoint API + un schema JSON-LD enrichi pour chaque contenu représente un coût d'ingénierie réel. Pour un site de 22 000 pages, il faut que le pipeline soit automatisé. Si vous gérez votre schema à la main, l'AEO à grande échelle n'est pas viable.\n\nUn headless CMS avec des modèles de contenu structurés résout une partie du problème : le contenu est stocké une fois, et chaque format de sortie (HTML, JSON-LD, API endpoint) est un rendu différent de la même source. C'est un argument de plus pour les architectures décrites dans notre article sur [headless CMS et SEO](/blog/headless-cms-et-seo-avantages-et-risques-techniques).\n\n### L'instabilité des user-agents IA\n\nContrairement à Googlebot, dont le comportement est documenté depuis 20 ans, les bots IA changent de user-agent, de patterns de crawl et de fréquence de manière imprévisible. Un rate limiting trop agressif peut bloquer un agent qui a changé de user-agent. Un rate limiting trop laxiste peut laisser un bot non identifié aspirer tout votre contenu.\n\nC'est un domaine où le monitoring continu est indispensable. Un outil comme Seogard, qui détecte les changements de patterns de crawl en temps réel, permet de réagir quand un nouveau bot apparaît ou quand un bot existant change de comportement, avant que l'impact ne soit visible dans vos métriques de trafic.\n\n## Ce qui change concrètement dans votre workflow SEO\n\nL'AEO ne remplace pas le SEO classique. Il l'étend. Voici les ajustements concrets à intégrer dans votre workflow :\n\n### Dans vos audits techniques\n\nAjoutez à votre grille d'audit Screaming Frog :\n- **Complétude du JSON-LD** : vérifiez que chaque type d'entité a ses `additionalProperty`, pas seulement les champs obligatoires\n- **Présence de `dateModified`** : un article sans date de modification est un article que les agents considéreront comme potentiellement obsolète\n- **Endpoints API** : crawlez vos endpoints API comme vos pages HTML. Vérifiez qu'ils retournent du JSON valide, avec les bons status codes et les bons headers de cache\n\n### Dans votre monitoring\n\nLes métriques classiques (positions, impressions, CTR) restent pertinentes pour le SEO classique. Pour l'AEO, ajoutez :\n- **Volume de requêtes par bot IA** : dans vos logs serveur, filtrez par user-agent et trackez l'évolution\n- **Taux de citation dans les AI Overviews** : via Search Console (l'onglet \"Search appearance\" > \"AI Overviews\" est disponible depuis fin 2025)\n- **Trafic referral des interfaces d'agents** : créez des segments dans votre analytics pour `perplexity.ai`, `chat.openai.com`, et les autres surfaces d'agents\n\nL'enjeu de [mesurer les intent gaps avec les données Search Console](/blog/how-to-measure-intent-gaps-using-google-search-console-data) prend une dimension supplémentaire : les intent gaps ne sont plus seulement entre ce que les humains cherchent et ce que vous proposez, mais entre ce que les agents ont besoin de savoir et ce que votre contenu expose de manière structurée.\n\n### Dans votre stratégie de contenu\n\nLe contenu \"AEO-ready\" n'est pas du contenu écrit pour des robots. C'est du contenu qui répond à des tâches, pas seulement à des questions. La nuance est fondamentale.\n\nUn article classique : \"Qu'est-ce que le Wi-Fi 7 ?\"\nUn article AEO-ready : \"Wi-Fi 7 vs Wi-Fi 6E : quel standard pour un déploiement mesh en entrepôt logistique — specs, coûts, compatibilité\"\n\nLe second est utile à un humain ET exploitable par un agent qui doit recommander une solution réseau. Le premier est informatif mais n'alimente pas une chaîne de décision.\n\nCela rejoint directement la problématique soulevée par [Dell sur la croissance de l'IA agentique face à la recherche classique](/blog/dell-agentic-ai-is-growing-but-search-still-wins) : les deux coexistent, et votre contenu doit servir les deux.\n\n## Préparer l'infrastructure pour le crawl agentique\n\nLe dernier point technique concerne la capacité de votre infrastructure à absorber un nouveau type de charge. Les agents IA ne crawlent pas comme Googlebot. Ils font des requêtes plus ciblées mais potentiellement plus fréquentes, et ils attendent des réponses rapides.\n\n### CDN et cache différencié\n\nVotre stratégie de cache doit tenir compte du fait que les agents consomment vos endpoints API, pas vos pages HTML rendues. Assurez-vous que votre CDN cache les réponses API avec des TTL appropriés :\n\n- Pages produit (prix, stock) : TTL court (1h), avec `stale-while-revalidate`\n- Articles éditoriaux : TTL long (24h), invalidation à la publication\n- Endpoints API : même politique que la page HTML correspondante\n\nLa performance de livraison est d'autant plus critique pour les agents qui opèrent dans des contextes de [livraison géolocalisée](/blog/content-delivery-et-seo-international-latence-et-geolocalisation) — un agent qui sert un utilisateur en Europe doit obtenir une réponse depuis un edge européen, pas depuis un origin US.\n\n### Monitoring des régressions\n\nL'AEO ajoute de nouvelles surfaces de régression potentielle. Un déploiement qui casse votre endpoint API `/api/products/` ne sera pas détecté par un test end-to-end classique qui vérifie seulement le rendu HTML. Votre pipeline CI/CD doit inclure des tests spécifiques :\n\n- Validation du JSON-LD sur un échantillon de pages après chaque déploiement\n- Vérification des status codes des endpoints API\n- Contrôle de la conformité Schema.org via le [Schema Markup Validator](https://validator.schema.org/)\n\nUn outil de monitoring comme Seogard qui surveille en continu la présence et la validité de vos données structurées détecte ces régressions avant qu'elles n'impactent votre visibilité dans les surfaces agentiques.\n\n---\n\nL'Agentic Engine Optimization n'est pas une mode ni un pivot radical. C'est une extension logique du SEO technique vers un web où les consommateurs de contenu ne sont plus seulement des humains et des crawlers d'indexation, mais des agents autonomes capables de raisonner sur vos données. Les sites qui structurent leur contenu pour ces agents maintenant prendront un avantage mesurable — les autres devront rattraper.","https://seogard.io/blog/agentic-engine-optimization-google-ai-director-outlines-new-content-playbook","Actualités SEO","2026-04-15T15:02:48.961Z","2026-04-15","Un directeur IA de Google pousse l'Agentic Engine Optimization. Analyse technique du framework, impact sur le crawl, et implémentations concrètes.","\u003Cp>Un directeur de Google Cloud AI vient de formaliser ce que beaucoup pressentaient : le SEO doit désormais cibler des agents autonomes, pas uniquement des humains derrière un navigateur. Le terme qu'il pose — \u003Cstrong>Agentic Engine Optimization\u003C/strong> — n'est pas un rebranding marketing du SEO classique. C'est un changement de paradigme dans la manière dont le contenu doit être structuré, exposé et consommé par des machines capables de raisonner, de planifier et d'exécuter des tâches en chaîne.\u003C/p>\n\u003Ch2>Ce que dit réellement le framework de Google\u003C/h2>\n\u003Cp>Le directeur en question, Kaz Sato, ne se contente pas de dire \"adaptez votre contenu à l'IA\". Il décrit un modèle où les agents IA — qu'il s'agisse de Gemini, de GPT-based agents, ou de n'importe quel orchestrateur LLM — consomment le web de manière fondamentalement différente d'un crawler traditionnel.\u003C/p>\n\u003Ch3>Le passage du crawl indexation-first au crawl task-first\u003C/h3>\n\u003Cp>Un crawler classique (Googlebot, Bingbot) suit un pattern simple : découvrir des URLs, les rendre, extraire le contenu, indexer. L'objectif est de construire un index inversé pour répondre à des requêtes.\u003C/p>\n\u003Cp>Un agent IA suit un pattern radicalement différent :\u003C/p>\n\u003Col>\n\u003Cli>Il reçoit une \u003Cstrong>tâche\u003C/strong> (ex : \"trouve-moi le meilleur hébergement WordPress pour un site e-commerce de 8000 SKUs avec du SSR Next.js\")\u003C/li>\n\u003Cli>Il \u003Cstrong>planifie\u003C/strong> une séquence d'actions (chercher, comparer, vérifier des specs, croiser des avis)\u003C/li>\n\u003Cli>Il \u003Cstrong>consomme\u003C/strong> du contenu structuré pour alimenter son raisonnement\u003C/li>\n\u003Cli>Il \u003Cstrong>agit\u003C/strong> (recommande, achète, configure)\u003C/li>\n\u003C/ol>\n\u003Cp>La différence critique : l'agent ne cherche pas une page à afficher à un humain. Il cherche des \u003Cstrong>données exploitables\u003C/strong> pour avancer dans sa chaîne de raisonnement. Si votre contenu n'est pas parsable de manière fiable par une machine, l'agent passe à la source suivante.\u003C/p>\n\u003Ch3>Les trois piliers du framework AEO\u003C/h3>\n\u003Cp>D'après l'analyse du framework présenté par Sato, trois axes structurent l'Agentic Engine Optimization :\u003C/p>\n\u003Cp>\u003Cstrong>1. Structured consumability\u003C/strong> — Le contenu doit être consommable par un programme, pas seulement lisible par un humain. JSON-LD, données structurées riches, APIs ouvertes.\u003C/p>\n\u003Cp>\u003Cstrong>2. Task relevance\u003C/strong> — Le contenu doit répondre à des intentions d'action, pas seulement des intentions informationnelles. \"Quel est le prix de X\" est plus utile à un agent que \"L'histoire de X\".\u003C/p>\n\u003Cp>\u003Cstrong>3. Trust signals machine-readable\u003C/strong> — Les signaux de confiance (auteur, date de mise à jour, sources citées, certifications) doivent être exposés dans un format que l'agent peut parser, pas enterrés dans un paragraphe de prose.\u003C/p>\n\u003Cp>Ce framework rejoint des réflexions déjà engagées autour de \u003Ca href=\"/blog/how-ai-agents-see-your-website-and-how-to-build-for-them-via-sejournal-slobodanmanic\">la manière dont les agents IA perçoivent votre site\u003C/a> et de \u003Ca href=\"/blog/google-s-task-based-agentic-search-is-disrupting-seo-today-not-tomorrow-via-sejournal-martinibuster\">l'impact de la recherche agentique de Google\u003C/a>.\u003C/p>\n\u003Ch2>Rendre votre contenu consommable par des agents : l'implémentation technique\u003C/h2>\n\u003Cp>La théorie est une chose. Voyons ce que ça implique sur votre codebase.\u003C/p>\n\u003Ch3>Structured data : aller au-delà du minimum\u003C/h3>\n\u003Cp>La plupart des sites implémentent le JSON-LD minimum pour les rich snippets — un \u003Ccode>Product\u003C/code>, un \u003Ccode>Article\u003C/code>, un \u003Ccode>BreadcrumbList\u003C/code>. Pour l'AEO, il faut penser en termes de \u003Cstrong>complétude informationnelle\u003C/strong> : chaque entité mentionnée dans votre contenu devrait être décrite de manière machine-readable.\u003C/p>\n\u003Cp>Prenons un site e-commerce de 15 000 produits qui vend du matériel réseau. La fiche produit classique a un schema \u003Ccode>Product\u003C/code> avec nom, prix, disponibilité. Pour un agent qui exécute la tâche \"configure un réseau mesh pour un entrepôt de 2000m²\", ce n'est pas suffisant. L'agent a besoin de specs exploitables :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#85E89D\">script\u003C/span>\u003Cspan style=\"color:#B392F0\"> type\u003C/span>\u003Cspan style=\"color:#E1E4E8\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"application/ld+json\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"@context\": \"https://schema.org\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"@type\": \"Product\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"name\": \"UniFi U7 Pro Access Point\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"sku\": \"U7-PRO\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"brand\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"Brand\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"name\": \"Ubiquiti\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"offers\": {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"@type\": \"Offer\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    \"price\": \"189.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\">    \"priceValidUntil\": \"2026-06-30\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \"additionalProperty\": [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"@type\": \"PropertyValue\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"name\": \"wifi_standard\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"value\": \"Wi-Fi 7 (802.11be)\"\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\">      \"@type\": \"PropertyValue\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"name\": \"max_coverage_sqm\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"value\": \"350\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"unitCode\": \"MTK\"\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\">      \"@type\": \"PropertyValue\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"name\": \"poe_standard\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"value\": \"802.3at (PoE+)\"\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\">      \"@type\": \"PropertyValue\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"name\": \"max_concurrent_clients\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"value\": \"600\"\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\">      \"@type\": \"PropertyValue\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"name\": \"mounting_type\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"value\": \"ceiling\"\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\">  \"isRelatedTo\": [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    {\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\": \"UniFi Switch Pro 24 PoE\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"sku\": \"USW-PRO-24-POE\",\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      \"url\": \"https://reseau-pro.fr/produits/usw-pro-24-poe\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  ]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">&#x3C;/\u003C/span>\u003Cspan style=\"color:#85E89D\">script\u003C/span>\u003Cspan style=\"color:#E1E4E8\">>\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Les \u003Ccode>additionalProperty\u003C/code> avec des noms normalisés et des valeurs unitaires sont ce qui permet à un agent de \u003Cstrong>raisonner\u003C/strong> sur votre produit : \"350m² de couverture × 6 APs = 2100m², suffisant pour l'entrepôt\". Sans ces données structurées, l'agent doit parser du texte libre, ce qui est moins fiable et le pousse vers des sources mieux structurées.\u003C/p>\n\u003Cp>L'utilisation de \u003Ccode>isRelatedTo\u003C/code> permet à l'agent de naviguer votre catalogue de manière programmatique, sans dépendre du DOM de votre page.\u003C/p>\n\u003Ch3>Exposer une API de contenu crawlable\u003C/h3>\n\u003Cp>Le framework AEO pousse une idée qui existait déjà en SEO technique mais qui prend une dimension nouvelle : votre contenu doit être accessible via une \u003Cstrong>API structurée\u003C/strong>, pas seulement via des pages HTML.\u003C/p>\n\u003Cp>Cela ne signifie pas remplacer vos pages — les humains en ont toujours besoin. Mais ajouter un endpoint API parallèle qui sert le même contenu dans un format machine-optimized change la donne pour les agents.\u003C/p>\n\u003Cp>Voici un exemple d'implémentation avec un endpoint Next.js App Router qui sert le contenu produit en JSON :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// app/api/products/[sku]/route.ts\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> { NextRequest, NextResponse } \u003C/span>\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'next/server'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> { getProductBySku } \u003C/span>\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '@/lib/catalog'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">export\u003C/span>\u003Cspan style=\"color:#F97583\"> async\u003C/span>\u003Cspan style=\"color:#F97583\"> function\u003C/span>\u003Cspan style=\"color:#B392F0\"> GET\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  request\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> NextRequest\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  { \u003C/span>\u003Cspan style=\"color:#FFAB70\">params\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> }\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> { \u003C/span>\u003Cspan style=\"color:#FFAB70\">params\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> { \u003C/span>\u003Cspan style=\"color:#FFAB70\">sku\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\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:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> product\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#B392F0\"> getProductBySku\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(params.sku);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  \u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#F97583\">!\u003C/span>\u003Cspan style=\"color:#E1E4E8\">product) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> NextResponse.\u003C/span>\u003Cspan style=\"color:#B392F0\">json\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      { error: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'product_not_found'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, sku: params.sku },\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      { status: \u003C/span>\u003Cspan style=\"color:#79B8FF\">404\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\">  }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> agentPayload\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    '@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:#9ECBFF\">    '@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:#E1E4E8\">    identifier: product.sku,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    name: product.name,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    description: product.shortDescription,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    brand: product.brand,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    category: product.categoryPath,\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\">      price: product.price,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      currency: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'EUR'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      availability: product.inStock \u003C/span>\u003Cspan style=\"color:#F97583\">?\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'InStock'\u003C/span>\u003Cspan style=\"color:#F97583\"> :\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'OutOfStock'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      deliveryLeadTime: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        value: product.shippingDays,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        unitCode: \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\">    specs: product.technicalSpecs.\u003C/span>\u003Cspan style=\"color:#B392F0\">map\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">spec\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      name: spec.key,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      value: spec.value,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      unit: spec.unit \u003C/span>\u003Cspan style=\"color:#F97583\">||\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    })),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    compatibility: product.compatibleWith.\u003C/span>\u003Cspan style=\"color:#B392F0\">map\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#FFAB70\">compat\u003C/span>\u003Cspan style=\"color:#F97583\"> =>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      sku: compat.sku,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      name: compat.name,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      relationship: compat.type \u003C/span>\u003Cspan style=\"color:#6A737D\">// 'requires' | 'recommended' | 'alternative'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    })),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    lastVerified: product.updatedAt.\u003C/span>\u003Cspan style=\"color:#B392F0\">toISOString\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    source: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">`https://reseau-pro.fr/produits/${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">product\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">slug\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\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:#F97583\">  return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> NextResponse.\u003C/span>\u003Cspan style=\"color:#B392F0\">json\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(agentPayload, {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    headers: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      'Cache-Control'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'public, max-age=3600, s-maxage=86400'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      'X-Content-Type'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'agent-consumable'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      'Link'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">`&#x3C;https://reseau-pro.fr/produits/${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">product\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">slug\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}>; rel=\"canonical\"`\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\">  });\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Quelques points à noter :\u003C/p>\n\u003Cul>\n\u003Cli>Le champ \u003Ccode>compatibility\u003C/code> avec des types de relation (\u003Ccode>requires\u003C/code>, \u003Ccode>recommended\u003C/code>, \u003Ccode>alternative\u003C/code>) permet à un agent de construire un panier cohérent sans intervention humaine.\u003C/li>\n\u003Cli>Le \u003Ccode>lastVerified\u003C/code> est un signal de fraîcheur critique pour un agent qui doit évaluer la fiabilité de l'information.\u003C/li>\n\u003Cli>Le header \u003Ccode>Link\u003C/code> avec \u003Ccode>rel=\"canonical\"\u003C/code> pointe vers la page HTML correspondante, ce qui préserve la cohérence SEO.\u003C/li>\n\u003C/ul>\n\u003Cp>Cette approche API-first rejoint les bonnes pratiques décrites dans notre guide sur \u003Ca href=\"/blog/api-first-et-seo-servir-du-contenu-crawlable-depuis-une-api\">servir du contenu crawlable depuis une API\u003C/a>.\u003C/p>\n\u003Ch2>Contrôler l'accès des agents IA à votre contenu\u003C/h2>\n\u003Cp>L'AEO n'est pas un chèque en blanc donné à tous les bots. Le framework de Sato insiste sur un point : vous devez \u003Cstrong>choisir\u003C/strong> quels agents accèdent à quoi. La configuration serveur devient un levier stratégique.\u003C/p>\n\u003Ch3>robots.txt pour les agents IA : l'état de l'art\u003C/h3>\n\u003Cp>Le \u003Ccode>robots.txt\u003C/code> reste le premier point de contrôle, mais la prolifération des user-agents IA rend sa gestion complexe. En avril 2026, voici les principaux bots IA documenté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\"># robots.txt — Configuration AEO-aware\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Googlebot classique — accès complet\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">User-agent: \u003C/span>\u003Cspan style=\"color:#F97583\">Googlebot\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Allow: /\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Google-Extended (entraînement Gemini) — bloqué\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">User-agent: Google-\u003C/span>\u003Cspan style=\"color:#F97583\">Extended\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Disallow: /\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># GPTBot (OpenAI) — accès aux pages produits et guides, pas au reste\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">User-agent: \u003C/span>\u003Cspan style=\"color:#F97583\">GPTBot\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Allow: /produits/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Allow: /guides/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Allow: /\u003C/span>\u003Cspan style=\"color:#79B8FF\">api/products\u003C/span>\u003Cspan style=\"color:#E1E4E8\">/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Disallow: /compte/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Disallow: /panier/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Disallow: /admin/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Claude-Web (Anthropic)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">User-agent: Claude-Web\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Allow: /produits/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Allow: /guides/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Allow: /api/products/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Disallow: /\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># CCBot (Common Crawl — entraînement LLM)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">User-agent: CCBot\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Disallow: /\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Bytespider (ByteDance)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">User-agent: Bytespider\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Disallow: /\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Agents autorisés — accès API\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">User-agent: PerplexityBot\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Allow: /api/products/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Allow: /produits/\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Disallow: /\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Sitemap\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">Sitemap: https://reseau-pro.fr/sitemap-index.xml\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>La logique ici est différenciée : vous bloquez l'entraînement de modèles (Google-Extended, CCBot, Bytespider) mais vous autorisez la consommation par des agents de recherche (GPTBot, PerplexityBot) sur les sections qui ont une valeur commerciale pour vous.\u003C/p>\n\u003Cp>Le trafic généré par les bots IA \u003Ca href=\"/blog/openai-meta-bytedance-lead-ai-bot-traffic-in-publishing-via-sejournal-mattgsouthern\">ne cesse de croître\u003C/a>, ce qui rend cette configuration non-optionnelle pour tout site de taille significative.\u003C/p>\n\u003Ch3>Rate limiting par catégorie d'agent\u003C/h3>\n\u003Cp>Le robots.txt ne gère pas le débit. Pour ça, il faut du rate limiting côté serveur. Voici une config Nginx qui différencie les limites par type de bot :\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-ratelimit.conf\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Zones de rate limiting\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\"> $agent_category {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">    default\u003C/span>\u003Cspan style=\"color:#9ECBFF\">                \"human\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    ~*\u003C/span>\u003Cspan style=\"color:#E1E4E8\">Googlebot            \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"googlebot\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    ~*\u003C/span>\u003Cspan style=\"color:#E1E4E8\">GPTBot               \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"ai_search\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    ~*\u003C/span>\u003Cspan style=\"color:#E1E4E8\">PerplexityBot        \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"ai_search\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    ~*\u003C/span>\u003Cspan style=\"color:#E1E4E8\">Claude-Web           \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"ai_search\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    ~*\u003C/span>\u003Cspan style=\"color:#E1E4E8\">Bytespider           \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"ai_blocked\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    ~*\u003C/span>\u003Cspan style=\"color:#E1E4E8\">CCBot                \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"ai_blocked\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    ~*\u003C/span>\u003Cspan style=\"color:#E1E4E8\">Google-Extended      \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"ai_blocked\"\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:#F97583\">limit_req_zone \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$binary_remote_addr zone=human:10m rate=30r/s;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">limit_req_zone \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$binary_remote_addr zone=googlebot:10m rate=50r/s;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">limit_req_zone \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$binary_remote_addr zone=ai_search:10m rate=5r/s;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">limit_req_zone \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$binary_remote_addr zone=ai_blocked:10m rate=0r/s;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\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:#F97583\">    listen \u003C/span>\u003Cspan style=\"color:#79B8FF\">443\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ssl http2;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    server_name \u003C/span>\u003Cspan style=\"color:#E1E4E8\">reseau-pro.fr;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    # Rate limiting conditionnel\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    location\u003C/span>\u003Cspan style=\"color:#B392F0\"> /api/products/ \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=$agent_category burst=10 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\">        # Headers de traçabilité\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        add_header \u003C/span>\u003Cspan style=\"color:#E1E4E8\">X-Agent-Category $agent_category;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        add_header \u003C/span>\u003Cspan style=\"color:#E1E4E8\">X-RateLimit-Policy \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"aeo-aware\"\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:#F97583\">        proxy_pass \u003C/span>\u003Cspan style=\"color:#E1E4E8\">http://backend;\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\">    # Bloquer complètement les agents non autorisés\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ($agent_category \u003C/span>\u003Cspan style=\"color:#F97583\">= \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"ai_blocked\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        return\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 403\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\">}\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce setup vous donne une visibilité granulaire sur qui consomme quoi, et à quel rythme. Les logs Nginx avec \u003Ccode>$agent_category\u003C/code> permettent ensuite d'analyser le trafic agent dans votre stack de monitoring.\u003C/p>\n\u003Ch2>Scénario concret : migration AEO d'un site média de 22 000 pages\u003C/h2>\n\u003Cp>Prenons le cas d'un site média tech francophone — appelons-le \u003Ccode>technews.fr\u003C/code> — avec 22 000 articles, 4 millions de visites organiques mensuelles, et une stack Nuxt.js 3 avec SSR.\u003C/p>\n\u003Ch3>L'état initial\u003C/h3>\n\u003Cp>Avant AEO, le site a un schema \u003Ccode>Article\u003C/code> basique sur chaque page, un sitemap XML standard, et un \u003Ccode>robots.txt\u003C/code> qui autorise tout. Screaming Frog révèle :\u003C/p>\n\u003Cul>\n\u003Cli>22 000 pages avec du JSON-LD \u003Ccode>Article\u003C/code> (nom, date, auteur)\u003C/li>\n\u003Cli>0% de pages avec des \u003Ccode>additionalProperty\u003C/code> ou des entités liées\u003C/li>\n\u003Cli>65% des articles n'ont pas de \u003Ccode>dateModified\u003C/code> dans leur schema\u003C/li>\n\u003Cli>L'API interne (utilisée par le front) retourne du JSON non-structuré, sans contexte Schema.org\u003C/li>\n\u003C/ul>\n\u003Ch3>Le plan de migration en 4 phases\u003C/h3>\n\u003Cp>\u003Cstrong>Phase 1 (semaine 1-2) : enrichissement du schema existant\u003C/strong>\u003C/p>\n\u003Cp>L'équipe ajoute à chaque \u003Ccode>Article\u003C/code> :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ccode>dateModified\u003C/code> systématique (alimenté par le CMS)\u003C/li>\n\u003Cli>\u003Ccode>about\u003C/code> avec des entités Wikidata liées au sujet\u003C/li>\n\u003Cli>\u003Ccode>speakable\u003C/code> pour les sections clés (utilisé par Google Assistant et les agents vocaux)\u003C/li>\n\u003Cli>\u003Ccode>citation\u003C/code> pour les sources référencées\u003C/li>\n\u003C/ul>\n\u003Cp>Résultat mesurable : le taux de rich results dans Search Console passe de 12% à 31% en 3 semaines.\u003C/p>\n\u003Cp>\u003Cstrong>Phase 2 (semaine 3-4) : API de contenu agent-friendly\u003C/strong>\u003C/p>\n\u003Cp>Création d'un endpoint \u003Ccode>/api/articles/[slug]\u003C/code> qui expose chaque article avec :\u003C/p>\n\u003Cul>\n\u003Cli>Le contenu en texte structuré (sections titrées, pas du HTML brut)\u003C/li>\n\u003Cli>Les entités mentionnées avec leurs identifiants Wikidata\u003C/li>\n\u003Cli>Les relations entre articles (sujet connexe, mise à jour de, contredit)\u003C/li>\n\u003Cli>Un \u003Ccode>confidence_score\u003C/code> sur la fraîcheur (basé sur \u003Ccode>dateModified\u003C/code> vs la volatilité du sujet)\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cstrong>Phase 3 (semaine 5-6) : robots.txt et rate limiting AEO\u003C/strong>\u003C/p>\n\u003Cp>Déploiement de la configuration robots.txt différenciée et du rate limiting Nginx. Monitoring du trafic agent via des logs structurés.\u003C/p>\n\u003Cp>Observation à J+14 : les requêtes de GPTBot passent de 800/jour à 3 200/jour, concentrées sur les articles de moins de 90 jours. PerplexityBot monte de 200 à 1 400 requêtes/jour, principalement sur l'endpoint API.\u003C/p>\n\u003Cp>\u003Cstrong>Phase 4 (semaine 7-8) : contenu task-oriented\u003C/strong>\u003C/p>\n\u003Cp>L'équipe éditoriale restructure les 500 articles les plus performants pour inclure des sections \"actionables\" : comparatifs avec des tableaux structurés, checklists, recommandations avec des conditions explicites (\"si votre budget est inférieur à X, alors Y\").\u003C/p>\n\u003Ch3>Résultats à 3 mois\u003C/h3>\n\u003Cul>\n\u003Cli>Les citations dans les AI Overviews de Google passent de 45/mois à 280/mois\u003C/li>\n\u003Cli>Le trafic referral depuis les interfaces d'agents (Perplexity, ChatGPT avec browsing) représente 8% du trafic total, contre 1.2% avant la migration\u003C/li>\n\u003Cli>Le trafic organique classique reste stable (variation de -2%, dans la marge d'erreur)\u003C/li>\n\u003Cli>Le crawl budget consommé par les bots IA est maîtrisé : pas de dégradation du crawl de Googlebot classique\u003C/li>\n\u003C/ul>\n\u003Cp>Ce type de résultat est cohérent avec ce que \u003Ca href=\"/blog/what-400-sites-reveal-about-organic-traffic-gains-via-sejournal-mattgsouthern\">les analyses de 400 sites révèlent sur les gains de trafic organique\u003C/a> — les sites qui structurent mieux leur contenu captent une part croissante du trafic.\u003C/p>\n\u003Ch2>Les trade-offs et limites de l'AEO\u003C/h2>\n\u003Cp>Il serait malhonnête de présenter l'AEO comme une solution universelle sans frictions. Plusieurs points méritent une analyse critique.\u003C/p>\n\u003Ch3>Le problème de l'attribution\u003C/h3>\n\u003Cp>Quand un agent IA utilise votre contenu pour répondre à une requête, vous n'obtenez pas toujours un lien retour. Perplexity cite ses sources. ChatGPT ne le fait pas systématiquement. Les AI Overviews de Google citent parfois, parfois non. Optimiser pour les agents, c'est potentiellement nourrir une machine qui cannibalise votre trafic direct.\u003C/p>\n\u003Cp>La réponse pragmatique : si votre contenu n'est pas consommé par les agents, celui de vos concurrents le sera. L'AEO n'est pas un choix d'optimisme — c'est un choix de positionnement défensif. Comme le confirme \u003Ca href=\"/blog/google-s-ceo-predicts-search-will-become-an-ai-agent-manager-via-sejournal-martinibuster\">l'analyse de la direction prise par Google avec la recherche agentique\u003C/a>, le mouvement est irréversible.\u003C/p>\n\u003Ch3>Le coût de la double maintenance\u003C/h3>\n\u003Cp>Maintenir des pages HTML + un endpoint API + un schema JSON-LD enrichi pour chaque contenu représente un coût d'ingénierie réel. Pour un site de 22 000 pages, il faut que le pipeline soit automatisé. Si vous gérez votre schema à la main, l'AEO à grande échelle n'est pas viable.\u003C/p>\n\u003Cp>Un headless CMS avec des modèles de contenu structurés résout une partie du problème : le contenu est stocké une fois, et chaque format de sortie (HTML, JSON-LD, API endpoint) est un rendu différent de la même source. C'est un argument de plus pour les architectures décrites dans notre article sur \u003Ca href=\"/blog/headless-cms-et-seo-avantages-et-risques-techniques\">headless CMS et SEO\u003C/a>.\u003C/p>\n\u003Ch3>L'instabilité des user-agents IA\u003C/h3>\n\u003Cp>Contrairement à Googlebot, dont le comportement est documenté depuis 20 ans, les bots IA changent de user-agent, de patterns de crawl et de fréquence de manière imprévisible. Un rate limiting trop agressif peut bloquer un agent qui a changé de user-agent. Un rate limiting trop laxiste peut laisser un bot non identifié aspirer tout votre contenu.\u003C/p>\n\u003Cp>C'est un domaine où le monitoring continu est indispensable. Un outil comme Seogard, qui détecte les changements de patterns de crawl en temps réel, permet de réagir quand un nouveau bot apparaît ou quand un bot existant change de comportement, avant que l'impact ne soit visible dans vos métriques de trafic.\u003C/p>\n\u003Ch2>Ce qui change concrètement dans votre workflow SEO\u003C/h2>\n\u003Cp>L'AEO ne remplace pas le SEO classique. Il l'étend. Voici les ajustements concrets à intégrer dans votre workflow :\u003C/p>\n\u003Ch3>Dans vos audits techniques\u003C/h3>\n\u003Cp>Ajoutez à votre grille d'audit Screaming Frog :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Complétude du JSON-LD\u003C/strong> : vérifiez que chaque type d'entité a ses \u003Ccode>additionalProperty\u003C/code>, pas seulement les champs obligatoires\u003C/li>\n\u003Cli>\u003Cstrong>Présence de \u003Ccode>dateModified\u003C/code>\u003C/strong> : un article sans date de modification est un article que les agents considéreront comme potentiellement obsolète\u003C/li>\n\u003Cli>\u003Cstrong>Endpoints API\u003C/strong> : crawlez vos endpoints API comme vos pages HTML. Vérifiez qu'ils retournent du JSON valide, avec les bons status codes et les bons headers de cache\u003C/li>\n\u003C/ul>\n\u003Ch3>Dans votre monitoring\u003C/h3>\n\u003Cp>Les métriques classiques (positions, impressions, CTR) restent pertinentes pour le SEO classique. Pour l'AEO, ajoutez :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Volume de requêtes par bot IA\u003C/strong> : dans vos logs serveur, filtrez par user-agent et trackez l'évolution\u003C/li>\n\u003Cli>\u003Cstrong>Taux de citation dans les AI Overviews\u003C/strong> : via Search Console (l'onglet \"Search appearance\" > \"AI Overviews\" est disponible depuis fin 2025)\u003C/li>\n\u003Cli>\u003Cstrong>Trafic referral des interfaces d'agents\u003C/strong> : créez des segments dans votre analytics pour \u003Ccode>perplexity.ai\u003C/code>, \u003Ccode>chat.openai.com\u003C/code>, et les autres surfaces d'agents\u003C/li>\n\u003C/ul>\n\u003Cp>L'enjeu de \u003Ca href=\"/blog/how-to-measure-intent-gaps-using-google-search-console-data\">mesurer les intent gaps avec les données Search Console\u003C/a> prend une dimension supplémentaire : les intent gaps ne sont plus seulement entre ce que les humains cherchent et ce que vous proposez, mais entre ce que les agents ont besoin de savoir et ce que votre contenu expose de manière structurée.\u003C/p>\n\u003Ch3>Dans votre stratégie de contenu\u003C/h3>\n\u003Cp>Le contenu \"AEO-ready\" n'est pas du contenu écrit pour des robots. C'est du contenu qui répond à des tâches, pas seulement à des questions. La nuance est fondamentale.\u003C/p>\n\u003Cp>Un article classique : \"Qu'est-ce que le Wi-Fi 7 ?\"\nUn article AEO-ready : \"Wi-Fi 7 vs Wi-Fi 6E : quel standard pour un déploiement mesh en entrepôt logistique — specs, coûts, compatibilité\"\u003C/p>\n\u003Cp>Le second est utile à un humain ET exploitable par un agent qui doit recommander une solution réseau. Le premier est informatif mais n'alimente pas une chaîne de décision.\u003C/p>\n\u003Cp>Cela rejoint directement la problématique soulevée par \u003Ca href=\"/blog/dell-agentic-ai-is-growing-but-search-still-wins\">Dell sur la croissance de l'IA agentique face à la recherche classique\u003C/a> : les deux coexistent, et votre contenu doit servir les deux.\u003C/p>\n\u003Ch2>Préparer l'infrastructure pour le crawl agentique\u003C/h2>\n\u003Cp>Le dernier point technique concerne la capacité de votre infrastructure à absorber un nouveau type de charge. Les agents IA ne crawlent pas comme Googlebot. Ils font des requêtes plus ciblées mais potentiellement plus fréquentes, et ils attendent des réponses rapides.\u003C/p>\n\u003Ch3>CDN et cache différencié\u003C/h3>\n\u003Cp>Votre stratégie de cache doit tenir compte du fait que les agents consomment vos endpoints API, pas vos pages HTML rendues. Assurez-vous que votre CDN cache les réponses API avec des TTL appropriés :\u003C/p>\n\u003Cul>\n\u003Cli>Pages produit (prix, stock) : TTL court (1h), avec \u003Ccode>stale-while-revalidate\u003C/code>\u003C/li>\n\u003Cli>Articles éditoriaux : TTL long (24h), invalidation à la publication\u003C/li>\n\u003Cli>Endpoints API : même politique que la page HTML correspondante\u003C/li>\n\u003C/ul>\n\u003Cp>La performance de livraison est d'autant plus critique pour les agents qui opèrent dans des contextes de \u003Ca href=\"/blog/content-delivery-et-seo-international-latence-et-geolocalisation\">livraison géolocalisée\u003C/a> — un agent qui sert un utilisateur en Europe doit obtenir une réponse depuis un edge européen, pas depuis un origin US.\u003C/p>\n\u003Ch3>Monitoring des régressions\u003C/h3>\n\u003Cp>L'AEO ajoute de nouvelles surfaces de régression potentielle. Un déploiement qui casse votre endpoint API \u003Ccode>/api/products/\u003C/code> ne sera pas détecté par un test end-to-end classique qui vérifie seulement le rendu HTML. Votre pipeline CI/CD doit inclure des tests spécifiques :\u003C/p>\n\u003Cul>\n\u003Cli>Validation du JSON-LD sur un échantillon de pages après chaque déploiement\u003C/li>\n\u003Cli>Vérification des status codes des endpoints API\u003C/li>\n\u003Cli>Contrôle de la conformité Schema.org via le \u003Ca href=\"https://validator.schema.org/\">Schema Markup Validator\u003C/a>\u003C/li>\n\u003C/ul>\n\u003Cp>Un outil de monitoring comme Seogard qui surveille en continu la présence et la validité de vos données structurées détecte ces régressions avant qu'elles n'impactent votre visibilité dans les surfaces agentiques.\u003C/p>\n\u003Chr>\n\u003Cp>L'Agentic Engine Optimization n'est pas une mode ni un pivot radical. C'est une extension logique du SEO technique vers un web où les consommateurs de contenu ne sont plus seulement des humains et des crawlers d'indexation, mais des agents autonomes capables de raisonner sur vos données. Les sites qui structurent leur contenu pour ces agents maintenant prendront un avantage mesurable — les autres devront rattraper.\u003C/p>",null,12,[18,19,20,21,22],"agentic","engine optimization","google AI","SEO technique","agents IA","Agentic Engine Optimization : ce que ça change techniquement","Wed Apr 15 2026 15:02:48 GMT+0000 (Coordinated Universal Time)",[26,40,55],{"_id":27,"slug":28,"__v":6,"author":7,"canonical":29,"category":10,"createdAt":30,"date":12,"description":31,"image":15,"imageAlt":15,"readingTime":16,"tags":32,"title":38,"updatedAt":39},"69df624faa6b273b0c8ec88c","google-ask-maps-is-moving-from-listings-to-recommendations","https://seogard.io/blog/google-ask-maps-is-moving-from-listings-to-recommendations","2026-04-15T10:02:55.660Z","Ask Maps passe aux recommandations IA. Impact technique sur le local SEO, les données structurées et la visibilité des fiches Google Business Profile.",[33,34,35,36,37],"google maps","local seo","recommandations ia","données structurées","google business profile","Google Ask Maps : des listings aux recommandations IA","Wed Apr 15 2026 10:02:55 GMT+0000 (Coordinated Universal Time)",{"_id":41,"slug":42,"__v":6,"author":7,"canonical":43,"category":10,"createdAt":44,"date":45,"description":46,"image":15,"imageAlt":15,"readingTime":16,"tags":47,"title":53,"updatedAt":54},"69de570daa6b273b0cb90dc2","google-lists-9-scenarios-that-explain-how-it-picks-canonical-urls-via-sejournal-martinibuster","https://seogard.io/blog/google-lists-9-scenarios-that-explain-how-it-picks-canonical-urls-via-sejournal-martinibuster","2026-04-14T15:02:37.538Z","2026-04-14","Analyse technique des 9 scénarios où Google choisit une URL canonique. Code, configs et stratégies pour garder le contrôle de vos canonicals.",[48,49,50,51,52],"canonical","google","indexation","duplicate-content","seo-technique","Canonicalisation Google : les 9 scénarios décryptés","Tue Apr 14 2026 15:02:37 GMT+0000 (Coordinated Universal Time)",{"_id":56,"slug":57,"__v":6,"author":7,"canonical":58,"category":10,"createdAt":59,"date":45,"description":60,"image":15,"imageAlt":15,"readingTime":16,"tags":61,"title":65,"updatedAt":66},"69de8142aa6b273b0cdacf99","google-s-task-based-agentic-search-is-disrupting-seo-today-not-tomorrow-via-sejournal-martinibuster","https://seogard.io/blog/google-s-task-based-agentic-search-is-disrupting-seo-today-not-tomorrow-via-sejournal-martinibuster","2026-04-14T18:02:42.687Z","Google passe à la recherche agentique par tâches. Analyse technique des impacts sur le crawl, le rendering et l'architecture SEO de vos sites.",[62,20,21,63,64],"agentic search","crawl budget","structured data","Agentic Search Google : impact SEO technique concret","Tue Apr 14 2026 18:02:42 GMT+0000 (Coordinated Universal Time)"]