[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fXsopY87F6DoIcHdMXUdmyx0H4f4YrCqWcjGDIDFh3DU":3,"$fNQJJkl6P5fl0x11rLKrSSxUCvGJCBlhXTkndjZDNanQ":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},"69fd7c8eaa6b273b0cd07de7","8-geo-metrics-to-track-in-2026",0,"Equipe Seogard","Un site e-commerce de 22 000 pages qui domine les SERP classiques sur ses 150 requêtes stratégiques. Zéro citation dans ChatGPT Search, deux mentions dans Gemini, aucune apparition dans les AI Overviews. Le trafic organique baisse de 18 % en six mois sans qu'aucune position classique n'ait bougé. Le problème n'est pas le ranking — c'est que les métriques traditionnelles ne capturent plus la réalité de la visibilité.\n\nLe cadre Generative Engine Optimization (GEO) impose un changement fondamental dans ce que vous mesurez. Les 8 métriques qui suivent ne sont pas une liste théorique : ce sont les indicateurs que les équipes SEO avancées instrumentent déjà pour piloter leur visibilité dans un écosystème où les réponses AI remplacent les clics.\n\n## 1. AI Citation Frequency : combien de fois votre domaine est cité\n\nLa métrique la plus directe du GEO. Elle mesure la fréquence à laquelle votre domaine ou votre marque apparaît comme source dans les réponses générées par les modèles AI (ChatGPT, Gemini, Perplexity, Copilot, AI Overviews).\n\nLa difficulté : contrairement aux SERP classiques où Search Console donne les impressions, il n'existe pas encore d'API unifiée pour tracker les citations AI. [Bing Webmaster Tools a commencé à exposer l'AI Citation Share](/blog/bing-previews-ai-citation-share-for-webmaster-tools-via-sejournal-mattgsouthern), mais c'est encore limité à l'écosystème Microsoft.\n\n### Méthode de collecte programmatique\n\nLa seule approche fiable aujourd'hui combine des requêtes systématiques aux API disponibles et un scraping structuré des réponses. Voici un script TypeScript qui interroge l'API Perplexity et extrait les citations pour un domaine donné :\n\n```typescript\nimport Anthropic from \"@anthropic-ai/sdk\";\n\ninterface CitationResult {\n  query: string;\n  cited: boolean;\n  position: number | null;\n  totalCitations: number;\n  snippet: string | null;\n  timestamp: string;\n}\n\nasync function trackAICitations(\n  queries: string[],\n  targetDomain: string\n): Promise\u003CCitationResult[]> {\n  const results: CitationResult[] = [];\n\n  for (const query of queries) {\n    // Requête via l'API Perplexity (ou tout wrapper LLM avec grounding)\n    const response = await fetch(\"https://api.perplexity.ai/chat/completions\", {\n      method: \"POST\",\n      headers: {\n        Authorization: `Bearer ${process.env.PERPLEXITY_API_KEY}`,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify({\n        model: \"llama-3.1-sonar-large-128k-online\",\n        messages: [{ role: \"user\", content: query }],\n        return_citations: true,\n      }),\n    });\n\n    const data = await response.json();\n    const citations: string[] = data.citations || [];\n\n    const domainCitations = citations\n      .map((url: string, idx: number) => ({ url, position: idx + 1 }))\n      .filter((c: { url: string }) =>\n        c.url.includes(targetDomain)\n      );\n\n    results.push({\n      query,\n      cited: domainCitations.length > 0,\n      position: domainCitations.length > 0 ? domainCitations[0].position : null,\n      totalCitations: citations.length,\n      snippet: domainCitations.length > 0 ? domainCitations[0].url : null,\n      timestamp: new Date().toISOString(),\n    });\n\n    // Rate limiting respectueux\n    await new Promise((r) => setTimeout(r, 2000));\n  }\n\n  return results;\n}\n\n// Exemple : tracker 50 requêtes stratégiques pour un site e-commerce outdoor\nconst strategicQueries = [\n  \"best waterproof hiking boots 2026\",\n  \"gore-tex vs proprietary membranes comparison\",\n  \"how to choose trail running shoes for overpronation\",\n  // ... 47 autres requêtes\n];\n\nconst citations = await trackAICitations(strategicQueries, \"trekhausstore.com\");\nconst citationRate = citations.filter((c) => c.cited).length / citations.length;\nconsole.log(`Citation rate: ${(citationRate * 100).toFixed(1)}%`);\n```\n\n### Ce que cette métrique révèle\n\nUn taux de citation inférieur à 10 % sur vos requêtes stratégiques signifie que les modèles AI ne considèrent pas votre contenu comme une source fiable pour ces sujets. La corrélation avec le trafic classique est faible : [une étude sur 500 millions de requêtes AI](/blog/500m-ai-searches-later-how-to-actually-improve-ai-search-visibility-citations-via-sejournal-hethr-campbell) montre que la position classique n'est qu'un facteur parmi d'autres dans la sélection des sources par les LLM.\n\nCible 2026 : visez un taux de citation de 25-40 % sur vos requêtes head et 15-25 % sur la longue traîne.\n\n## 2. Citation Position Index (CPI) : où vous apparaissez dans la réponse\n\nÊtre cité ne suffit pas. La position de votre citation dans la réponse AI détermine la visibilité effective. Une source mentionnée en première position dans une réponse Perplexity reçoit 3 à 5 fois plus de clics que la quatrième source (observable via les referral logs Perplexity dans Google Analytics 4).\n\nLe CPI se calcule ainsi : pour chaque requête où vous êtes cité, divisez 1 par votre position dans la liste de citations. La moyenne de ces scores donne votre CPI global.\n\n```python\n# Citation Position Index calculator\nimport json\nfrom statistics import mean\n\ndef calculate_cpi(citation_data: list[dict]) -> dict:\n    \"\"\"\n    citation_data: [{\"query\": \"...\", \"cited\": true, \"position\": 2, \"total\": 5}, ...]\n    \"\"\"\n    cited_entries = [e for e in citation_data if e[\"cited\"]]\n\n    if not cited_entries:\n        return {\"cpi\": 0, \"avg_position\": None, \"coverage\": 0}\n\n    position_scores = [1 / e[\"position\"] for e in cited_entries]\n    normalized_scores = [\n        (e[\"total\"] - e[\"position\"] + 1) / e[\"total\"]\n        for e in cited_entries\n    ]\n\n    return {\n        \"cpi\": round(mean(position_scores), 4),\n        \"cpi_normalized\": round(mean(normalized_scores), 4),\n        \"avg_position\": round(mean([e[\"position\"] for e in cited_entries]), 1),\n        \"coverage\": round(len(cited_entries) / len(citation_data) * 100, 1),\n        \"top1_rate\": round(\n            len([e for e in cited_entries if e[\"position\"] == 1])\n            / len(citation_data) * 100, 1\n        ),\n    }\n\n# Données réelles d'un SaaS B2B tracking 200 queries\nsample_data = json.loads(open(\"citations_may2026.json\").read())\nmetrics = calculate_cpi(sample_data)\nprint(f\"CPI: {metrics['cpi']} | Coverage: {metrics['coverage']}%\")\nprint(f\"Top-1 rate: {metrics['top1_rate']}% | Avg position: {metrics['avg_position']}\")\n```\n\nUn CPI de 0.50 signifie que vous êtes en moyenne en position 2. Un CPI de 0.25 : position 4. L'objectif est de suivre cette métrique semaine par semaine pour détecter les régressions avant qu'elles n'impactent le trafic.\n\n## 3. Brand Mention Sentiment dans les réponses AI\n\nLes AI Overviews [surfacent les avis négatifs sans que personne ne les cherche](/blog/how-ai-overviews-surface-negative-reviews-without-anyone-searching-for-them-via-sejournal-erasedotcom). Un utilisateur qui tape \"meilleur CRM pour PME\" peut voir apparaître \"cependant, certains utilisateurs rapportent des problèmes de support chez [votre marque]\" dans la réponse synthétisée.\n\nCette métrique mesure le sentiment net de votre marque dans les réponses AI. [Les modèles ne voient pas votre marque comme un message marketing, mais comme un vecteur mathématique](/blog/ai-sees-your-brand-as-math-not-messaging) — et ce vecteur encode les signaux positifs *et* négatifs qu'ils ont ingérés pendant l'entraînement.\n\n### Comment le tracker concrètement\n\nInterrogez systématiquement les modèles avec des requêtes de type \"[votre catégorie] + avis\", \"[votre marque] vs [concurrent]\", \"problèmes avec [votre marque]\". Classifiez chaque mention comme positive, neutre ou négative. Le ratio (positives - négatives) / total donne votre Brand Sentiment Score AI.\n\nScénario concret : un éditeur SaaS de gestion de projet avec 8 000 pages indexées découvre un Brand Sentiment Score de -0.15 dans les réponses Gemini (15 % plus de mentions négatives que positives). En analysant les sources citées, il identifie trois articles de blog tiers datant de 2023 qui décrivent des bugs corrigés depuis. Le problème n'est pas le produit actuel — c'est que [le modèle a intégré ces signaux dans sa compréhension de la marque](/blog/how-ai-models-understand-your-brand) et les restitue dans ses réponses.\n\n## 4. AI Crawl Budget Allocation\n\n[L'activité de crawl d'OpenAI a triplé depuis GPT-5](/blog/openai-crawl-activity-tripled-since-gpt-5-data-shows-via-sejournal-mattgsouthern). GPTBot, Google-Extended, ClaudeBot, PerplexityBot — chacun de ces crawlers consomme du budget serveur et indexe votre contenu selon ses propres règles. Ce que vous leur exposez détermine directement ce qu'ils savent de vous.\n\nLa métrique : le pourcentage de vos pages stratégiques effectivement crawlées par chaque bot AI sur une période de 30 jours.\n\n### Extraction depuis les logs serveur\n\n```bash\n#!/bin/bash\n# ai-crawl-analysis.sh — Analyse du crawl AI depuis les access logs Nginx\n\nLOG_FILE=\"/var/log/nginx/access.log\"\nSTRATEGIC_URLS=\"strategic_urls.txt\"  # une URL par ligne\n\nAI_BOTS=\"GPTBot|ClaudeBot|PerplexityBot|Google-Extended|Applebot-Extended|Amazonbot|CCBot\"\n\necho \"=== AI Crawl Budget Report — $(date +%Y-%m-%d) ===\"\necho \"\"\n\n# Volume de crawl par bot AI\necho \"--- Crawl volume par bot (30 derniers jours) ---\"\ngrep -E \"$AI_BOTS\" \"$LOG_FILE\" | \\\n  grep -oP '(?\u003C=\")GPTBot|ClaudeBot|PerplexityBot|Google-Extended|Applebot-Extended|Amazonbot|CCBot' | \\\n  sort | uniq -c | sort -rn\n\necho \"\"\n\n# Taux de couverture des pages stratégiques\nTOTAL_STRATEGIC=$(wc -l \u003C \"$STRATEGIC_URLS\")\necho \"--- Couverture pages stratégiques ($TOTAL_STRATEGIC URLs) ---\"\n\nfor bot in GPTBot ClaudeBot PerplexityBot Google-Extended; do\n  CRAWLED=$(grep \"$bot\" \"$LOG_FILE\" | \\\n    grep -oP '(?:GET|HEAD) \\K[^ ]+' | \\\n    sort -u | \\\n    grep -cFf \"$STRATEGIC_URLS\")\n  RATE=$(echo \"scale=1; $CRAWLED * 100 / $TOTAL_STRATEGIC\" | bc)\n  echo \"$bot: $CRAWLED/$TOTAL_STRATEGIC pages crawlées ($RATE%)\"\ndone\n\necho \"\"\n\n# Pages jamais crawlées par aucun bot AI\necho \"--- Pages stratégiques non crawlées par aucun bot AI ---\"\ngrep -E \"$AI_BOTS\" \"$LOG_FILE\" | \\\n  grep -oP '(?:GET|HEAD) \\K[^ ]+' | \\\n  sort -u > /tmp/ai_crawled_urls.txt\n\ngrep -vFf /tmp/ai_crawled_urls.txt \"$STRATEGIC_URLS\" | head -20\n```\n\nSi GPTBot ne crawle que 35 % de vos pages produit alors que Googlebot en crawle 92 %, vous avez un problème de découvrabilité spécifique aux bots AI. Les causes courantes : [votre hébergement WordPress bloque les bots AI sans que vous le sachiez](/blog/your-managed-wordpress-might-be-blocking-ai-bots-and-you-can-t-see-it), votre robots.txt exclut certains crawlers, ou votre structure de liens internes ne permet pas la découverte profonde.\n\n## 5. Source Authority Score par plateforme AI\n\nChaque plateforme AI a sa propre logique de sélection de sources. [Bing décrit explicitement que le grounding diffère de l'indexation search classique](/blog/bing-team-describes-how-grounding-differs-from-search-indexing-via-sejournal-mattgsouthern). Votre autorité perçue varie d'un modèle à l'autre.\n\nLe Source Authority Score mesure, pour chaque plateforme, la proportion de requêtes thématiques sur lesquelles vous êtes cité parmi les 3 premières sources. Ce n'est pas une métrique que les plateformes exposent — vous devez la construire par échantillonnage.\n\n### Matrice de visibilité croisée\n\nConstruisez un tableau de bord qui croise vos requêtes stratégiques avec les plateformes :\n\n| Requête | Google AIO | ChatGPT Search | Perplexity | Gemini |\n|---|---|---|---|---|\n| \"meilleur outil monitoring SEO\" | Cité #2 | Non cité | Cité #1 | Cité #4 |\n| \"détecter régression meta tags\" | Non cité | Cité #3 | Non cité | Non cité |\n| \"SSR SEO impact\" | Cité #1 | Cité #1 | Cité #2 | Non cité |\n\nCe mapping révèle des patterns impossibles à voir autrement. Un site peut dominer Perplexity (qui privilégie les sources récentes et bien structurées) tout en étant invisible sur Gemini (qui s'appuie davantage sur les signaux d'autorité du Knowledge Graph de Google).\n\nLes [4 signaux qui définissent la visibilité dans la recherche AI](/blog/4-signals-that-now-define-visibility-in-ai-search) varient en poids selon la plateforme. Tracker le Source Authority Score par plateforme permet d'identifier où concentrer vos efforts d'optimisation.\n\n## 6. Content Inclusion Rate (CIR) par type de page\n\nToutes vos pages ne sont pas des candidates à la citation AI. Une page catégorie e-commerce a peu de chances d'être citée verbatim. Un guide technique approfondi, un benchmark comparatif, une étude de données originales — ces formats ont des CIR radicalement différents.\n\nLe CIR mesure le pourcentage de pages d'un type donné qui ont été citées au moins une fois sur une période de 90 jours.\n\n### Scénario concret : un média tech de 12 000 pages\n\nUn média spécialisé tech avec 12 000 articles publiés décompose son CIR par type de contenu :\n\n- **Études de données originales** (180 pages) : CIR de 62 %\n- **Guides techniques approfondis** (450 pages) : CIR de 41 %\n- **Comparatifs produit** (320 pages) : CIR de 38 %\n- **Articles d'actualité** (8 200 pages) : CIR de 4 %\n- **Pages auteur/about** (150 pages) : CIR de 12 %\n- **Glossaire/définitions** (700 pages) : CIR de 22 %\n\nL'insight clé : les articles d'actualité représentent 68 % du contenu mais seulement 4 % de CIR. Les études de données représentent 1.5 % du contenu mais 62 % de CIR. Le ROI éditorial pour le GEO est inversement proportionnel au volume.\n\nC'est exactement ce que montre l'analyse plus large du secteur : [produire plus de contenu n'est plus un levier fiable de croissance SEO](/blog/why-more-content-is-no-longer-a-reliable-way-to-grow-seo). En GEO, c'est encore plus vrai. Les modèles sélectionnent des sources sur la base de la densité informationnelle et de l'unicité des données, pas du volume.\n\n## 7. AI Referral Traffic Quality\n\nLe trafic issu des plateformes AI (identifiable via les referrers `chat.openai.com`, `perplexity.ai`, `gemini.google.com`, et les paramètres UTM des AI Overviews) a un profil comportemental distinct du trafic search classique.\n\nLes métriques à isoler dans GA4 :\n- **Engagement rate** par source AI vs search classique\n- **Conversion rate** (micro et macro conversions)\n- **Pages par session**\n- **Scroll depth** (via Intersection Observer)\n- **Return visit rate à 7 et 30 jours**\n\n### Configuration GA4 pour isoler le trafic AI\n\nDans Google Analytics 4, créez un segment personnalisé :\n\n```javascript\n// GTM Custom JavaScript Variable — AI Traffic Detector\nfunction() {\n  var referrer = document.referrer.toLowerCase();\n  var aiSources = [\n    'chat.openai.com',\n    'chatgpt.com',\n    'perplexity.ai',\n    'gemini.google.com',\n    'copilot.microsoft.com',\n    'claude.ai',\n    'you.com',\n    'phind.com'\n  ];\n\n  // Détection directe par referrer\n  for (var i = 0; i \u003C aiSources.length; i++) {\n    if (referrer.indexOf(aiSources[i]) !== -1) {\n      return aiSources[i].split('.').slice(-2).join('.');\n    }\n  }\n\n  // Détection des AI Overviews via paramètre URL\n  var urlParams = new URLSearchParams(window.location.search);\n  if (urlParams.get('utm_source') === 'ai_overview' ||\n      urlParams.get('sca_esv') ||  // paramètre Google AI Overview\n      urlParams.get('sei')) {       // paramètre SGE legacy\n    return 'google-ai-overview';\n  }\n\n  return 'non-ai';\n}\n```\n\nAttention cependant : [certains trackers de visibilité AI faussent vos analytics](/blog/your-ai-visibility-tracker-is-quietly-breaking-your-analytics-and-your-strategy-via-sejournal-taylordanrw) en générant du trafic bot comptabilisé comme du trafic réel. Filtrez les user agents suspects avant d'analyser.\n\n### Pourquoi la qualité du trafic AI compte plus que le volume\n\nLes premières données montrent que le trafic Perplexity convertit différemment du trafic Google Search. L'utilisateur arrive avec une question déjà partiellement résolue — il a lu la synthèse AI et clique sur votre lien pour approfondir un point spécifique. Ce visiteur est plus avancé dans son parcours de décision.\n\nPour un e-commerce B2B de fournitures industrielles (15 000 SKUs), le trafic Perplexity représente 3 % du trafic organique total mais 8 % des conversions lead qualifié. Le taux de conversion est 2.7x supérieur au trafic Google classique. Ce ratio justifie à lui seul d'investir dans l'optimisation GEO même si le volume absolu reste modeste.\n\n## 8. Competitive Share of AI Voice\n\nLa dernière métrique — et la plus stratégique. Elle répond à la question : quand un utilisateur pose une question dans votre domaine d'expertise, quel pourcentage des citations revient à votre domaine vs vos concurrents ?\n\nC'est l'équivalent GEO du \"share of voice\" en SEO classique, mais adapté aux réponses génératives. La différence fondamentale : en SEO classique, la position 1 prend tout sur un résultat donné. En GEO, plusieurs sources sont citées dans une même réponse, et la distribution est plus plate.\n\n### Calcul et tracking\n\nPour un panel de 200 requêtes stratégiques, interrogez chaque plateforme AI mensuellement. Pour chaque réponse, relevez toutes les sources citées. Agrégez par domaine.\n\nExemple de résultat pour un marché \"outils de project management\" :\n\n| Domaine | Citations totales (200 queries × 4 plateformes) | Share of AI Voice |\n|---|---|---|\n| asana.com | 142 | 22.3 % |\n| monday.com | 118 | 18.5 % |\n| notion.so | 97 | 15.2 % |\n| clickup.com | 84 | 13.2 % |\n| g2.com | 73 | 11.5 % |\n| votre-outil.com | 38 | 6.0 % |\n| pcmag.com | 34 | 5.3 % |\n| autres | 51 | 8.0 % |\n\nUn Share of AI Voice de 6 % quand votre part de marché réelle est de 12 % indique un déficit de visibilité AI. [Ce gap entre réalité business et perception AI est mesurable et corrigeable](/blog/why-ai-search-skips-your-content-and-how-to-diagnose-where-it-s-failing-via-sejournal-jeffrey-coyle), mais seulement si vous le trackez.\n\nNotez que des sources tierces comme g2.com apparaissent systématiquement : [les agrégateurs restent fortement cités par les modèles AI](/blog/google-s-march-core-update-shifted-visibility-away-from-aggregators-via-sejournal-mattgsouthern), ce qui signifie que votre présence et vos avis sur ces plateformes impactent indirectement votre Share of AI Voice.\n\n## Construire votre stack de mesure GEO\n\nAucun outil unique ne couvre aujourd'hui les 8 métriques. La réalité du terrain en mai 2026 impose une stack composite :\n\n### Couche 1 : Collecte de données\n\n- **Perplexity API** (avec `return_citations: true`) pour le tracking systématique des citations\n- **Bing Webmaster Tools** pour les données AI Citation Share côté Microsoft/Copilot\n- **Google Search Console** pour les données AI Overviews (encore partielles, cf. [les problèmes de logging récemment corrigés](/blog/google-fixes-search-console-s-year-long-data-logging-issue-well-kind-of))\n- **Logs serveur** analysés via ELK stack ou un script custom pour le crawl budget AI\n- **Screaming Frog** configuré avec un custom user agent pour simuler le crawl AI et identifier les pages bloquées\n\n### Couche 2 : Monitoring continu\n\nLes métriques GEO sont volatiles. Une mise à jour du modèle peut faire disparaître vos citations en 48h. Un outil de monitoring comme Seogard permet de détecter ces régressions en temps réel — si votre citation rate chute de 30 % à 8 % sur un cluster de requêtes, vous devez le savoir avant que l'impact business ne soit visible dans GA4 trois semaines plus tard.\n\n### Couche 3 : Analyse et action\n\nLe [pipeline à 10 étapes pour diagnostiquer où votre contenu échoue dans la chaîne AI](/blog/the-10-gate-ai-search-pipeline-find-where-your-content-fails) reste le meilleur framework pour transformer ces métriques en actions correctives. Chaque métrique GEO pointe vers un gate spécifique du pipeline :\n\n- Citation Frequency faible → problème de découvrabilité ou d'autorité perçue (gates 1-3)\n- CPI bas → contenu cité mais pas considéré comme source primaire (gates 4-6)\n- Sentiment négatif → signaux négatifs non gérés dans le corpus d'entraînement (gate 7)\n- CIR faible → format de contenu inadapté au grounding AI (gates 8-9)\n\n## Les limites à connaître\n\nTrois caveats importants avant de bâtir votre reporting GEO :\n\n**La reproductibilité est imparfaite.** Une même requête envoyée à ChatGPT à deux heures d'intervalle peut retourner des citations différentes. Le CPI et le Citation Rate sont des métriques statistiques — elles ont besoin d'un volume d'échantillonnage suffisant (minimum 100 requêtes, idéalement 500+) pour être fiables.\n\n**Le coût de collecte est réel.** Tracker 500 requêtes × 4 plateformes × 4 fois par mois = 8 000 appels API. À ~$0.005 par requête Perplexity, c'est $40/mois en API seul. Pour un site enterprise avec 2 000 requêtes stratégiques, le budget grimpe. [Construire pour les agents AI, pas seulement les humains](/blog/google-tells-developers-to-build-for-ai-agents-not-just-humans-via-sejournal-mattgsouthern), a un coût d'infrastructure qu'il faut budgéter.\n\n**Les métriques GEO ne remplacent pas les métriques SEO classiques.** Les AI Overviews apparaissent sur environ 15-30 % des requêtes selon les secteurs. Pour les 70 % restants, le ranking classique reste le jeu. Le [CTR des AI Overviews montre des signes de stabilisation](/blog/google-ai-overviews-ctr-shows-early-signs-of-recovery-study), ce qui confirme que les deux systèmes vont coexister durablement.\n\n## Wrap-up\n\nLe GEO n'est pas un remplacement du SEO — c'est une couche de mesure supplémentaire qui capture la visibilité dans les canaux où vos métriques classiques sont aveugles. Ces 8 métriques (Citation Frequency, CPI, Brand Sentiment AI, AI Crawl Budget, Source Authority Score, Content Inclusion Rate, AI Referral Quality, Share of AI Voice) forment le socle minimum pour piloter votre présence dans un écosystème search fragmenté. Commencez par les deux plus actionnables — Citation Frequency et AI Crawl Budget — et automatisez la collecte avec Seogard ou votre stack de monitoring pour détecter les régressions avant qu'elles ne deviennent des pertes de revenus.\n```","https://seogard.io/blog/8-geo-metrics-to-track-in-2026","Actualités SEO","2026-05-08T06:02:54.991Z","2026-05-08","AI search crée des gaps de visibilité invisibles. 8 métriques GEO actionnables pour tracker présence, citations et influence en 2026.","\u003Cp>Un site e-commerce de 22 000 pages qui domine les SERP classiques sur ses 150 requêtes stratégiques. Zéro citation dans ChatGPT Search, deux mentions dans Gemini, aucune apparition dans les AI Overviews. Le trafic organique baisse de 18 % en six mois sans qu'aucune position classique n'ait bougé. Le problème n'est pas le ranking — c'est que les métriques traditionnelles ne capturent plus la réalité de la visibilité.\u003C/p>\n\u003Cp>Le cadre Generative Engine Optimization (GEO) impose un changement fondamental dans ce que vous mesurez. Les 8 métriques qui suivent ne sont pas une liste théorique : ce sont les indicateurs que les équipes SEO avancées instrumentent déjà pour piloter leur visibilité dans un écosystème où les réponses AI remplacent les clics.\u003C/p>\n\u003Ch2>1. AI Citation Frequency : combien de fois votre domaine est cité\u003C/h2>\n\u003Cp>La métrique la plus directe du GEO. Elle mesure la fréquence à laquelle votre domaine ou votre marque apparaît comme source dans les réponses générées par les modèles AI (ChatGPT, Gemini, Perplexity, Copilot, AI Overviews).\u003C/p>\n\u003Cp>La difficulté : contrairement aux SERP classiques où Search Console donne les impressions, il n'existe pas encore d'API unifiée pour tracker les citations AI. \u003Ca href=\"/blog/bing-previews-ai-citation-share-for-webmaster-tools-via-sejournal-mattgsouthern\">Bing Webmaster Tools a commencé à exposer l'AI Citation Share\u003C/a>, mais c'est encore limité à l'écosystème Microsoft.\u003C/p>\n\u003Ch3>Méthode de collecte programmatique\u003C/h3>\n\u003Cp>La seule approche fiable aujourd'hui combine des requêtes systématiques aux API disponibles et un scraping structuré des réponses. Voici un script TypeScript qui interroge l'API Perplexity et extrait les citations pour un domaine donné :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Anthropic \u003C/span>\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"@anthropic-ai/sdk\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">interface\u003C/span>\u003Cspan style=\"color:#B392F0\"> CitationResult\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  query\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:#FFAB70\">  cited\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> boolean\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  position\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> number\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  totalCitations\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> number\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  snippet\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  timestamp\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\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">async\u003C/span>\u003Cspan style=\"color:#F97583\"> function\u003C/span>\u003Cspan style=\"color:#B392F0\"> trackAICitations\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  queries\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:#FFAB70\">  targetDomain\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> Promise\u003C/span>\u003Cspan style=\"color:#E1E4E8\">&#x3C;\u003C/span>\u003Cspan style=\"color:#B392F0\">CitationResult\u003C/span>\u003Cspan style=\"color:#E1E4E8\">[]> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> results\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#B392F0\"> CitationResult\u003C/span>\u003Cspan style=\"color:#E1E4E8\">[] \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [];\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> query\u003C/span>\u003Cspan style=\"color:#F97583\"> of\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> queries) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Requête via l'API Perplexity (ou tout wrapper LLM avec grounding)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> response\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#B392F0\"> fetch\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"https://api.perplexity.ai/chat/completions\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      method: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"POST\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      headers: {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        Authorization: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">`Bearer ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">process\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#E1E4E8\">env\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">PERPLEXITY_API_KEY\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        \"Content-Type\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"application/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\">      body: \u003C/span>\u003Cspan style=\"color:#79B8FF\">JSON\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#B392F0\">stringify\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        model: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"llama-3.1-sonar-large-128k-online\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        messages: [{ role: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"user\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, content: query }],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        return_citations: \u003C/span>\u003Cspan style=\"color:#79B8FF\">true\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\"> data\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> response.\u003C/span>\u003Cspan style=\"color:#B392F0\">json\u003C/span>\u003Cspan style=\"color:#E1E4E8\">();\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> citations\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">[] \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> data.citations \u003C/span>\u003Cspan style=\"color:#F97583\">||\u003C/span>\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\"> domainCitations\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> citations\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      .\u003C/span>\u003Cspan style=\"color:#B392F0\">map\u003C/span>\u003Cspan style=\"color:#E1E4E8\">((\u003C/span>\u003Cspan style=\"color:#FFAB70\">url\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">idx\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> number\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">=>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ({ url, position: idx \u003C/span>\u003Cspan style=\"color:#F97583\">+\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 1\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> }))\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      .\u003C/span>\u003Cspan style=\"color:#B392F0\">filter\u003C/span>\u003Cspan style=\"color:#E1E4E8\">((\u003C/span>\u003Cspan style=\"color:#FFAB70\">c\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> { \u003C/span>\u003Cspan style=\"color:#FFAB70\">url\u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> string\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> }) \u003C/span>\u003Cspan style=\"color:#F97583\">=>\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        c.url.\u003C/span>\u003Cspan style=\"color:#B392F0\">includes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(targetDomain)\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:#E1E4E8\">    results.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      query,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      cited: domainCitations.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> >\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      position: domainCitations.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> >\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#F97583\"> ?\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> domainCitations[\u003C/span>\u003Cspan style=\"color:#79B8FF\">0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">].position \u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      totalCitations: citations.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      snippet: domainCitations.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> >\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#F97583\"> ?\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> domainCitations[\u003C/span>\u003Cspan style=\"color:#79B8FF\">0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">].url \u003C/span>\u003Cspan style=\"color:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> null\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      timestamp: \u003C/span>\u003Cspan style=\"color:#F97583\">new\u003C/span>\u003Cspan style=\"color:#B392F0\"> Date\u003C/span>\u003Cspan style=\"color:#E1E4E8\">().\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\">    });\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Rate limiting respectueux\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    await\u003C/span>\u003Cspan style=\"color:#F97583\"> new\u003C/span>\u003Cspan style=\"color:#79B8FF\"> Promise\u003C/span>\u003Cspan style=\"color:#E1E4E8\">((\u003C/span>\u003Cspan style=\"color:#FFAB70\">r\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">=>\u003C/span>\u003Cspan style=\"color:#B392F0\"> setTimeout\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(r, \u003C/span>\u003Cspan style=\"color:#79B8FF\">2000\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\">  return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> results;\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\">// Exemple : tracker 50 requêtes stratégiques pour un site e-commerce outdoor\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> strategicQueries\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  \"best waterproof hiking boots 2026\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  \"gore-tex vs proprietary membranes comparison\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  \"how to choose trail running shoes for overpronation\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  // ... 47 autres requêtes\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\"> citations\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#B392F0\"> trackAICitations\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(strategicQueries, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"trekhausstore.com\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> citationRate\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> citations.\u003C/span>\u003Cspan style=\"color:#B392F0\">filter\u003C/span>\u003Cspan style=\"color:#E1E4E8\">((\u003C/span>\u003Cspan style=\"color:#FFAB70\">c\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">=>\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> c.cited).\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> /\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> citations.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">console.\u003C/span>\u003Cspan style=\"color:#B392F0\">log\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">`Citation rate: ${\u003C/span>\u003Cspan style=\"color:#9ECBFF\">(\u003C/span>\u003Cspan style=\"color:#E1E4E8\">citationRate\u003C/span>\u003Cspan style=\"color:#F97583\"> *\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 100\u003C/span>\u003Cspan style=\"color:#9ECBFF\">).\u003C/span>\u003Cspan style=\"color:#B392F0\">toFixed\u003C/span>\u003Cspan style=\"color:#9ECBFF\">(\u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#9ECBFF\">)\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}%`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch3>Ce que cette métrique révèle\u003C/h3>\n\u003Cp>Un taux de citation inférieur à 10 % sur vos requêtes stratégiques signifie que les modèles AI ne considèrent pas votre contenu comme une source fiable pour ces sujets. La corrélation avec le trafic classique est faible : \u003Ca href=\"/blog/500m-ai-searches-later-how-to-actually-improve-ai-search-visibility-citations-via-sejournal-hethr-campbell\">une étude sur 500 millions de requêtes AI\u003C/a> montre que la position classique n'est qu'un facteur parmi d'autres dans la sélection des sources par les LLM.\u003C/p>\n\u003Cp>Cible 2026 : visez un taux de citation de 25-40 % sur vos requêtes head et 15-25 % sur la longue traîne.\u003C/p>\n\u003Ch2>2. Citation Position Index (CPI) : où vous apparaissez dans la réponse\u003C/h2>\n\u003Cp>Être cité ne suffit pas. La position de votre citation dans la réponse AI détermine la visibilité effective. Une source mentionnée en première position dans une réponse Perplexity reçoit 3 à 5 fois plus de clics que la quatrième source (observable via les referral logs Perplexity dans Google Analytics 4).\u003C/p>\n\u003Cp>Le CPI se calcule ainsi : pour chaque requête où vous êtes cité, divisez 1 par votre position dans la liste de citations. La moyenne de ces scores donne votre CPI global.\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Citation Position Index calculator\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> json\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> statistics \u003C/span>\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> mean\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">def\u003C/span>\u003Cspan style=\"color:#B392F0\"> calculate_cpi\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(citation_data: list[\u003C/span>\u003Cspan style=\"color:#79B8FF\">dict\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]) -> \u003C/span>\u003Cspan style=\"color:#79B8FF\">dict\u003C/span>\u003Cspan style=\"color:#E1E4E8\">:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"\"\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    citation_data: [{\"query\": \"...\", \"cited\": true, \"position\": 2, \"total\": 5}, ...]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"\"\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    cited_entries \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [e \u003C/span>\u003Cspan style=\"color:#F97583\">for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> e \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> citation_data \u003C/span>\u003Cspan style=\"color:#F97583\">if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> e[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"cited\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#F97583\"> not\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> cited_entries:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"cpi\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"avg_position\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">None\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"coverage\"\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\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    position_scores \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [\u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#F97583\"> /\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> e[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"position\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> e \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> cited_entries]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    normalized_scores \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        (e[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"total\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">-\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> e[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"position\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">+\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">/\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> e[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"total\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">        for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> e \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> cited_entries\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\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        \"cpi\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(mean(position_scores), \u003C/span>\u003Cspan style=\"color:#79B8FF\">4\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        \"cpi_normalized\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(mean(normalized_scores), \u003C/span>\u003Cspan style=\"color:#79B8FF\">4\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        \"avg_position\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(mean([e[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"position\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> e \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> cited_entries]), \u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        \"coverage\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#79B8FF\">len\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(cited_entries) \u003C/span>\u003Cspan style=\"color:#F97583\">/\u003C/span>\u003Cspan style=\"color:#79B8FF\"> len\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(citation_data) \u003C/span>\u003Cspan style=\"color:#F97583\">*\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 100\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:#9ECBFF\">        \"top1_rate\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">round\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">            len\u003C/span>\u003Cspan style=\"color:#E1E4E8\">([e \u003C/span>\u003Cspan style=\"color:#F97583\">for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> e \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> cited_entries \u003C/span>\u003Cspan style=\"color:#F97583\">if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> e[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"position\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">==\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">])\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">            /\u003C/span>\u003Cspan style=\"color:#79B8FF\"> len\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(citation_data) \u003C/span>\u003Cspan style=\"color:#F97583\">*\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 100\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#79B8FF\">1\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:#6A737D\"># Données réelles d'un SaaS B2B tracking 200 queries\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">sample_data \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> json.loads(\u003C/span>\u003Cspan style=\"color:#79B8FF\">open\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"citations_may2026.json\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">).read())\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">metrics \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> calculate_cpi(sample_data)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">print\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#F97583\">f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"CPI: \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">metrics[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'cpi'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> | Coverage: \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">metrics[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'coverage'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">%\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">print\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#F97583\">f\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Top-1 rate: \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">metrics[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'top1_rate'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">% | Avg position: \u003C/span>\u003Cspan style=\"color:#79B8FF\">{\u003C/span>\u003Cspan style=\"color:#E1E4E8\">metrics[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'avg_position'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">]\u003C/span>\u003Cspan style=\"color:#79B8FF\">}\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Un CPI de 0.50 signifie que vous êtes en moyenne en position 2. Un CPI de 0.25 : position 4. L'objectif est de suivre cette métrique semaine par semaine pour détecter les régressions avant qu'elles n'impactent le trafic.\u003C/p>\n\u003Ch2>3. Brand Mention Sentiment dans les réponses AI\u003C/h2>\n\u003Cp>Les AI Overviews \u003Ca href=\"/blog/how-ai-overviews-surface-negative-reviews-without-anyone-searching-for-them-via-sejournal-erasedotcom\">surfacent les avis négatifs sans que personne ne les cherche\u003C/a>. Un utilisateur qui tape \"meilleur CRM pour PME\" peut voir apparaître \"cependant, certains utilisateurs rapportent des problèmes de support chez [votre marque]\" dans la réponse synthétisée.\u003C/p>\n\u003Cp>Cette métrique mesure le sentiment net de votre marque dans les réponses AI. \u003Ca href=\"/blog/ai-sees-your-brand-as-math-not-messaging\">Les modèles ne voient pas votre marque comme un message marketing, mais comme un vecteur mathématique\u003C/a> — et ce vecteur encode les signaux positifs \u003Cem>et\u003C/em> négatifs qu'ils ont ingérés pendant l'entraînement.\u003C/p>\n\u003Ch3>Comment le tracker concrètement\u003C/h3>\n\u003Cp>Interrogez systématiquement les modèles avec des requêtes de type \"[votre catégorie] + avis\", \"[votre marque] vs [concurrent]\", \"problèmes avec [votre marque]\". Classifiez chaque mention comme positive, neutre ou négative. Le ratio (positives - négatives) / total donne votre Brand Sentiment Score AI.\u003C/p>\n\u003Cp>Scénario concret : un éditeur SaaS de gestion de projet avec 8 000 pages indexées découvre un Brand Sentiment Score de -0.15 dans les réponses Gemini (15 % plus de mentions négatives que positives). En analysant les sources citées, il identifie trois articles de blog tiers datant de 2023 qui décrivent des bugs corrigés depuis. Le problème n'est pas le produit actuel — c'est que \u003Ca href=\"/blog/how-ai-models-understand-your-brand\">le modèle a intégré ces signaux dans sa compréhension de la marque\u003C/a> et les restitue dans ses réponses.\u003C/p>\n\u003Ch2>4. AI Crawl Budget Allocation\u003C/h2>\n\u003Cp>\u003Ca href=\"/blog/openai-crawl-activity-tripled-since-gpt-5-data-shows-via-sejournal-mattgsouthern\">L'activité de crawl d'OpenAI a triplé depuis GPT-5\u003C/a>. GPTBot, Google-Extended, ClaudeBot, PerplexityBot — chacun de ces crawlers consomme du budget serveur et indexe votre contenu selon ses propres règles. Ce que vous leur exposez détermine directement ce qu'ils savent de vous.\u003C/p>\n\u003Cp>La métrique : le pourcentage de vos pages stratégiques effectivement crawlées par chaque bot AI sur une période de 30 jours.\u003C/p>\n\u003Ch3>Extraction depuis les logs serveur\u003C/h3>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">#!/bin/bash\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># ai-crawl-analysis.sh — Analyse du crawl AI depuis les access logs Nginx\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">LOG_FILE\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"/var/log/nginx/access.log\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">STRATEGIC_URLS\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"strategic_urls.txt\"\u003C/span>\u003Cspan style=\"color:#6A737D\">  # une URL par ligne\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">AI_BOTS\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"GPTBot|ClaudeBot|PerplexityBot|Google-Extended|Applebot-Extended|Amazonbot|CCBot\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"=== AI Crawl Budget Report — $(\u003C/span>\u003Cspan style=\"color:#B392F0\">date\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> +%Y-%m-%d) ===\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Volume de crawl par bot AI\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"--- Crawl volume par bot (30 derniers jours) ---\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -E\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$AI_BOTS\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$LOG_FILE\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\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\"> -oP\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '(?&#x3C;=\")GPTBot|ClaudeBot|PerplexityBot|Google-Extended|Applebot-Extended|Amazonbot|CCBot'\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  sort\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> uniq\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> sort\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -rn\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Taux de couverture des pages stratégiques\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">TOTAL_STRATEGIC\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$(\u003C/span>\u003Cspan style=\"color:#B392F0\">wc\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -l\u003C/span>\u003Cspan style=\"color:#F97583\"> &#x3C;\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$STRATEGIC_URLS\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"--- Couverture pages stratégiques (\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$TOTAL_STRATEGIC\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> URLs) ---\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> bot \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> GPTBot\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> ClaudeBot\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> PerplexityBot\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> Google-Extended\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; \u003C/span>\u003Cspan style=\"color:#F97583\">do\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  CRAWLED\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$(\u003C/span>\u003Cspan style=\"color:#B392F0\">grep\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$bot\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$LOG_FILE\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\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\"> -oP\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '(?:GET|HEAD) \\K[^ ]+'\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">    sort\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -u\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\"> -cFf\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$STRATEGIC_URLS\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  RATE\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$(\u003C/span>\u003Cspan style=\"color:#79B8FF\">echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"scale=1; \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$CRAWLED\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> * 100 / \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$TOTAL_STRATEGIC\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> bc\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$bot\u003C/span>\u003Cspan style=\"color:#9ECBFF\">: \u003C/span>\u003Cspan style=\"color:#E1E4E8\">$CRAWLED\u003C/span>\u003Cspan style=\"color:#9ECBFF\">/\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$TOTAL_STRATEGIC\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> pages crawlées (\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$RATE\u003C/span>\u003Cspan style=\"color:#9ECBFF\">%)\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">done\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Pages jamais crawlées par aucun bot AI\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">echo\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"--- Pages stratégiques non crawlées par aucun bot AI ---\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -E\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$AI_BOTS\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$LOG_FILE\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\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\"> -oP\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '(?:GET|HEAD) \\K[^ ]+'\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">  sort\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -u\u003C/span>\u003Cspan style=\"color:#F97583\"> >\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /tmp/ai_crawled_urls.txt\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -vFf\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> /tmp/ai_crawled_urls.txt\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C/span>\u003Cspan style=\"color:#E1E4E8\">$STRATEGIC_URLS\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"\u003C/span>\u003Cspan style=\"color:#F97583\"> |\u003C/span>\u003Cspan style=\"color:#B392F0\"> head\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -20\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Si GPTBot ne crawle que 35 % de vos pages produit alors que Googlebot en crawle 92 %, vous avez un problème de découvrabilité spécifique aux bots AI. Les causes courantes : \u003Ca href=\"/blog/your-managed-wordpress-might-be-blocking-ai-bots-and-you-can-t-see-it\">votre hébergement WordPress bloque les bots AI sans que vous le sachiez\u003C/a>, votre robots.txt exclut certains crawlers, ou votre structure de liens internes ne permet pas la découverte profonde.\u003C/p>\n\u003Ch2>5. Source Authority Score par plateforme AI\u003C/h2>\n\u003Cp>Chaque plateforme AI a sa propre logique de sélection de sources. \u003Ca href=\"/blog/bing-team-describes-how-grounding-differs-from-search-indexing-via-sejournal-mattgsouthern\">Bing décrit explicitement que le grounding diffère de l'indexation search classique\u003C/a>. Votre autorité perçue varie d'un modèle à l'autre.\u003C/p>\n\u003Cp>Le Source Authority Score mesure, pour chaque plateforme, la proportion de requêtes thématiques sur lesquelles vous êtes cité parmi les 3 premières sources. Ce n'est pas une métrique que les plateformes exposent — vous devez la construire par échantillonnage.\u003C/p>\n\u003Ch3>Matrice de visibilité croisée\u003C/h3>\n\u003Cp>Construisez un tableau de bord qui croise vos requêtes stratégiques avec les plateformes :\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Requête\u003C/th>\n\u003Cth>Google AIO\u003C/th>\n\u003Cth>ChatGPT Search\u003C/th>\n\u003Cth>Perplexity\u003C/th>\n\u003Cth>Gemini\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\"meilleur outil monitoring SEO\"\u003C/td>\n\u003Ctd>Cité #2\u003C/td>\n\u003Ctd>Non cité\u003C/td>\n\u003Ctd>Cité #1\u003C/td>\n\u003Ctd>Cité #4\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\"détecter régression meta tags\"\u003C/td>\n\u003Ctd>Non cité\u003C/td>\n\u003Ctd>Cité #3\u003C/td>\n\u003Ctd>Non cité\u003C/td>\n\u003Ctd>Non cité\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\"SSR SEO impact\"\u003C/td>\n\u003Ctd>Cité #1\u003C/td>\n\u003Ctd>Cité #1\u003C/td>\n\u003Ctd>Cité #2\u003C/td>\n\u003Ctd>Non cité\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>Ce mapping révèle des patterns impossibles à voir autrement. Un site peut dominer Perplexity (qui privilégie les sources récentes et bien structurées) tout en étant invisible sur Gemini (qui s'appuie davantage sur les signaux d'autorité du Knowledge Graph de Google).\u003C/p>\n\u003Cp>Les \u003Ca href=\"/blog/4-signals-that-now-define-visibility-in-ai-search\">4 signaux qui définissent la visibilité dans la recherche AI\u003C/a> varient en poids selon la plateforme. Tracker le Source Authority Score par plateforme permet d'identifier où concentrer vos efforts d'optimisation.\u003C/p>\n\u003Ch2>6. Content Inclusion Rate (CIR) par type de page\u003C/h2>\n\u003Cp>Toutes vos pages ne sont pas des candidates à la citation AI. Une page catégorie e-commerce a peu de chances d'être citée verbatim. Un guide technique approfondi, un benchmark comparatif, une étude de données originales — ces formats ont des CIR radicalement différents.\u003C/p>\n\u003Cp>Le CIR mesure le pourcentage de pages d'un type donné qui ont été citées au moins une fois sur une période de 90 jours.\u003C/p>\n\u003Ch3>Scénario concret : un média tech de 12 000 pages\u003C/h3>\n\u003Cp>Un média spécialisé tech avec 12 000 articles publiés décompose son CIR par type de contenu :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Études de données originales\u003C/strong> (180 pages) : CIR de 62 %\u003C/li>\n\u003Cli>\u003Cstrong>Guides techniques approfondis\u003C/strong> (450 pages) : CIR de 41 %\u003C/li>\n\u003Cli>\u003Cstrong>Comparatifs produit\u003C/strong> (320 pages) : CIR de 38 %\u003C/li>\n\u003Cli>\u003Cstrong>Articles d'actualité\u003C/strong> (8 200 pages) : CIR de 4 %\u003C/li>\n\u003Cli>\u003Cstrong>Pages auteur/about\u003C/strong> (150 pages) : CIR de 12 %\u003C/li>\n\u003Cli>\u003Cstrong>Glossaire/définitions\u003C/strong> (700 pages) : CIR de 22 %\u003C/li>\n\u003C/ul>\n\u003Cp>L'insight clé : les articles d'actualité représentent 68 % du contenu mais seulement 4 % de CIR. Les études de données représentent 1.5 % du contenu mais 62 % de CIR. Le ROI éditorial pour le GEO est inversement proportionnel au volume.\u003C/p>\n\u003Cp>C'est exactement ce que montre l'analyse plus large du secteur : \u003Ca href=\"/blog/why-more-content-is-no-longer-a-reliable-way-to-grow-seo\">produire plus de contenu n'est plus un levier fiable de croissance SEO\u003C/a>. En GEO, c'est encore plus vrai. Les modèles sélectionnent des sources sur la base de la densité informationnelle et de l'unicité des données, pas du volume.\u003C/p>\n\u003Ch2>7. AI Referral Traffic Quality\u003C/h2>\n\u003Cp>Le trafic issu des plateformes AI (identifiable via les referrers \u003Ccode>chat.openai.com\u003C/code>, \u003Ccode>perplexity.ai\u003C/code>, \u003Ccode>gemini.google.com\u003C/code>, et les paramètres UTM des AI Overviews) a un profil comportemental distinct du trafic search classique.\u003C/p>\n\u003Cp>Les métriques à isoler dans GA4 :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Engagement rate\u003C/strong> par source AI vs search classique\u003C/li>\n\u003Cli>\u003Cstrong>Conversion rate\u003C/strong> (micro et macro conversions)\u003C/li>\n\u003Cli>\u003Cstrong>Pages par session\u003C/strong>\u003C/li>\n\u003Cli>\u003Cstrong>Scroll depth\u003C/strong> (via Intersection Observer)\u003C/li>\n\u003Cli>\u003Cstrong>Return visit rate à 7 et 30 jours\u003C/strong>\u003C/li>\n\u003C/ul>\n\u003Ch3>Configuration GA4 pour isoler le trafic AI\u003C/h3>\n\u003Cp>Dans Google Analytics 4, créez un segment personnalisé :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// GTM Custom JavaScript Variable — AI Traffic Detector\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">function\u003C/span>\u003Cspan style=\"color:#E1E4E8\">() {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  var\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> referrer \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> document.referrer.\u003C/span>\u003Cspan style=\"color:#B392F0\">toLowerCase\u003C/span>\u003Cspan style=\"color:#E1E4E8\">();\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  var\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> aiSources \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'chat.openai.com'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'chatgpt.com'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'perplexity.ai'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'gemini.google.com'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'copilot.microsoft.com'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'claude.ai'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'you.com'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    'phind.com'\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\">  // Détection directe par referrer\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  for\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#F97583\">var\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> i \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; i \u003C/span>\u003Cspan style=\"color:#F97583\">&#x3C;\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> aiSources.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#E1E4E8\">; i\u003C/span>\u003Cspan style=\"color:#F97583\">++\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (referrer.\u003C/span>\u003Cspan style=\"color:#B392F0\">indexOf\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(aiSources[i]) \u003C/span>\u003Cspan style=\"color:#F97583\">!==\u003C/span>\u003Cspan style=\"color:#F97583\"> -\u003C/span>\u003Cspan style=\"color:#79B8FF\">1\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> aiSources[i].\u003C/span>\u003Cspan style=\"color:#B392F0\">split\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'.'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">).\u003C/span>\u003Cspan style=\"color:#B392F0\">slice\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#F97583\">-\u003C/span>\u003Cspan style=\"color:#79B8FF\">2\u003C/span>\u003Cspan style=\"color:#E1E4E8\">).\u003C/span>\u003Cspan style=\"color:#B392F0\">join\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'.'\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:#6A737D\">  // Détection des AI Overviews via paramètre URL\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  var\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> urlParams \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#F97583\"> new\u003C/span>\u003Cspan style=\"color:#B392F0\"> URLSearchParams\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(window.location.search);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (urlParams.\u003C/span>\u003Cspan style=\"color:#B392F0\">get\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'utm_source'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">===\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'ai_overview'\u003C/span>\u003Cspan style=\"color:#F97583\"> ||\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      urlParams.\u003C/span>\u003Cspan style=\"color:#B392F0\">get\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'sca_esv'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">||\u003C/span>\u003Cspan style=\"color:#6A737D\">  // paramètre Google AI Overview\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      urlParams.\u003C/span>\u003Cspan style=\"color:#B392F0\">get\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'sei'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">)) {       \u003C/span>\u003Cspan style=\"color:#6A737D\">// paramètre SGE legacy\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'google-ai-overview'\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\">  return\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'non-ai'\u003C/span>\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>Attention cependant : \u003Ca href=\"/blog/your-ai-visibility-tracker-is-quietly-breaking-your-analytics-and-your-strategy-via-sejournal-taylordanrw\">certains trackers de visibilité AI faussent vos analytics\u003C/a> en générant du trafic bot comptabilisé comme du trafic réel. Filtrez les user agents suspects avant d'analyser.\u003C/p>\n\u003Ch3>Pourquoi la qualité du trafic AI compte plus que le volume\u003C/h3>\n\u003Cp>Les premières données montrent que le trafic Perplexity convertit différemment du trafic Google Search. L'utilisateur arrive avec une question déjà partiellement résolue — il a lu la synthèse AI et clique sur votre lien pour approfondir un point spécifique. Ce visiteur est plus avancé dans son parcours de décision.\u003C/p>\n\u003Cp>Pour un e-commerce B2B de fournitures industrielles (15 000 SKUs), le trafic Perplexity représente 3 % du trafic organique total mais 8 % des conversions lead qualifié. Le taux de conversion est 2.7x supérieur au trafic Google classique. Ce ratio justifie à lui seul d'investir dans l'optimisation GEO même si le volume absolu reste modeste.\u003C/p>\n\u003Ch2>8. Competitive Share of AI Voice\u003C/h2>\n\u003Cp>La dernière métrique — et la plus stratégique. Elle répond à la question : quand un utilisateur pose une question dans votre domaine d'expertise, quel pourcentage des citations revient à votre domaine vs vos concurrents ?\u003C/p>\n\u003Cp>C'est l'équivalent GEO du \"share of voice\" en SEO classique, mais adapté aux réponses génératives. La différence fondamentale : en SEO classique, la position 1 prend tout sur un résultat donné. En GEO, plusieurs sources sont citées dans une même réponse, et la distribution est plus plate.\u003C/p>\n\u003Ch3>Calcul et tracking\u003C/h3>\n\u003Cp>Pour un panel de 200 requêtes stratégiques, interrogez chaque plateforme AI mensuellement. Pour chaque réponse, relevez toutes les sources citées. Agrégez par domaine.\u003C/p>\n\u003Cp>Exemple de résultat pour un marché \"outils de project management\" :\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Domaine\u003C/th>\n\u003Cth>Citations totales (200 queries × 4 plateformes)\u003C/th>\n\u003Cth>Share of AI Voice\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>asana.com\u003C/td>\n\u003Ctd>142\u003C/td>\n\u003Ctd>22.3 %\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>monday.com\u003C/td>\n\u003Ctd>118\u003C/td>\n\u003Ctd>18.5 %\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>notion.so\u003C/td>\n\u003Ctd>97\u003C/td>\n\u003Ctd>15.2 %\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>clickup.com\u003C/td>\n\u003Ctd>84\u003C/td>\n\u003Ctd>13.2 %\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>g2.com\u003C/td>\n\u003Ctd>73\u003C/td>\n\u003Ctd>11.5 %\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>votre-outil.com\u003C/td>\n\u003Ctd>38\u003C/td>\n\u003Ctd>6.0 %\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>pcmag.com\u003C/td>\n\u003Ctd>34\u003C/td>\n\u003Ctd>5.3 %\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>autres\u003C/td>\n\u003Ctd>51\u003C/td>\n\u003Ctd>8.0 %\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>Un Share of AI Voice de 6 % quand votre part de marché réelle est de 12 % indique un déficit de visibilité AI. \u003Ca href=\"/blog/why-ai-search-skips-your-content-and-how-to-diagnose-where-it-s-failing-via-sejournal-jeffrey-coyle\">Ce gap entre réalité business et perception AI est mesurable et corrigeable\u003C/a>, mais seulement si vous le trackez.\u003C/p>\n\u003Cp>Notez que des sources tierces comme g2.com apparaissent systématiquement : \u003Ca href=\"/blog/google-s-march-core-update-shifted-visibility-away-from-aggregators-via-sejournal-mattgsouthern\">les agrégateurs restent fortement cités par les modèles AI\u003C/a>, ce qui signifie que votre présence et vos avis sur ces plateformes impactent indirectement votre Share of AI Voice.\u003C/p>\n\u003Ch2>Construire votre stack de mesure GEO\u003C/h2>\n\u003Cp>Aucun outil unique ne couvre aujourd'hui les 8 métriques. La réalité du terrain en mai 2026 impose une stack composite :\u003C/p>\n\u003Ch3>Couche 1 : Collecte de données\u003C/h3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Perplexity API\u003C/strong> (avec \u003Ccode>return_citations: true\u003C/code>) pour le tracking systématique des citations\u003C/li>\n\u003Cli>\u003Cstrong>Bing Webmaster Tools\u003C/strong> pour les données AI Citation Share côté Microsoft/Copilot\u003C/li>\n\u003Cli>\u003Cstrong>Google Search Console\u003C/strong> pour les données AI Overviews (encore partielles, cf. \u003Ca href=\"/blog/google-fixes-search-console-s-year-long-data-logging-issue-well-kind-of\">les problèmes de logging récemment corrigés\u003C/a>)\u003C/li>\n\u003Cli>\u003Cstrong>Logs serveur\u003C/strong> analysés via ELK stack ou un script custom pour le crawl budget AI\u003C/li>\n\u003Cli>\u003Cstrong>Screaming Frog\u003C/strong> configuré avec un custom user agent pour simuler le crawl AI et identifier les pages bloquées\u003C/li>\n\u003C/ul>\n\u003Ch3>Couche 2 : Monitoring continu\u003C/h3>\n\u003Cp>Les métriques GEO sont volatiles. Une mise à jour du modèle peut faire disparaître vos citations en 48h. Un outil de monitoring comme Seogard permet de détecter ces régressions en temps réel — si votre citation rate chute de 30 % à 8 % sur un cluster de requêtes, vous devez le savoir avant que l'impact business ne soit visible dans GA4 trois semaines plus tard.\u003C/p>\n\u003Ch3>Couche 3 : Analyse et action\u003C/h3>\n\u003Cp>Le \u003Ca href=\"/blog/the-10-gate-ai-search-pipeline-find-where-your-content-fails\">pipeline à 10 étapes pour diagnostiquer où votre contenu échoue dans la chaîne AI\u003C/a> reste le meilleur framework pour transformer ces métriques en actions correctives. Chaque métrique GEO pointe vers un gate spécifique du pipeline :\u003C/p>\n\u003Cul>\n\u003Cli>Citation Frequency faible → problème de découvrabilité ou d'autorité perçue (gates 1-3)\u003C/li>\n\u003Cli>CPI bas → contenu cité mais pas considéré comme source primaire (gates 4-6)\u003C/li>\n\u003Cli>Sentiment négatif → signaux négatifs non gérés dans le corpus d'entraînement (gate 7)\u003C/li>\n\u003Cli>CIR faible → format de contenu inadapté au grounding AI (gates 8-9)\u003C/li>\n\u003C/ul>\n\u003Ch2>Les limites à connaître\u003C/h2>\n\u003Cp>Trois caveats importants avant de bâtir votre reporting GEO :\u003C/p>\n\u003Cp>\u003Cstrong>La reproductibilité est imparfaite.\u003C/strong> Une même requête envoyée à ChatGPT à deux heures d'intervalle peut retourner des citations différentes. Le CPI et le Citation Rate sont des métriques statistiques — elles ont besoin d'un volume d'échantillonnage suffisant (minimum 100 requêtes, idéalement 500+) pour être fiables.\u003C/p>\n\u003Cp>\u003Cstrong>Le coût de collecte est réel.\u003C/strong> Tracker 500 requêtes × 4 plateformes × 4 fois par mois = 8 000 appels API. À ~$0.005 par requête Perplexity, c'est $40/mois en API seul. Pour un site enterprise avec 2 000 requêtes stratégiques, le budget grimpe. \u003Ca href=\"/blog/google-tells-developers-to-build-for-ai-agents-not-just-humans-via-sejournal-mattgsouthern\">Construire pour les agents AI, pas seulement les humains\u003C/a>, a un coût d'infrastructure qu'il faut budgéter.\u003C/p>\n\u003Cp>\u003Cstrong>Les métriques GEO ne remplacent pas les métriques SEO classiques.\u003C/strong> Les AI Overviews apparaissent sur environ 15-30 % des requêtes selon les secteurs. Pour les 70 % restants, le ranking classique reste le jeu. Le \u003Ca href=\"/blog/google-ai-overviews-ctr-shows-early-signs-of-recovery-study\">CTR des AI Overviews montre des signes de stabilisation\u003C/a>, ce qui confirme que les deux systèmes vont coexister durablement.\u003C/p>\n\u003Ch2>Wrap-up\u003C/h2>\n\u003Cp>Le GEO n'est pas un remplacement du SEO — c'est une couche de mesure supplémentaire qui capture la visibilité dans les canaux où vos métriques classiques sont aveugles. Ces 8 métriques (Citation Frequency, CPI, Brand Sentiment AI, AI Crawl Budget, Source Authority Score, Content Inclusion Rate, AI Referral Quality, Share of AI Voice) forment le socle minimum pour piloter votre présence dans un écosystème search fragmenté. Commencez par les deux plus actionnables — Citation Frequency et AI Crawl Budget — et automatisez la collecte avec Seogard ou votre stack de monitoring pour détecter les régressions avant qu'elles ne deviennent des pertes de revenus.\u003C/p>\n\u003Cpre>\u003Ccode>\u003C/code>\u003C/pre>",null,14,[18,19,20,21,22],"GEO metrics","AI search","track 2026","generative engine optimization","AI visibility","8 GEO Metrics to Track in 2026: Beyond Rankings","Fri May 08 2026 06:02:54 GMT+0000 (Coordinated Universal Time)",[26,41,56],{"_id":27,"slug":28,"__v":6,"author":7,"canonical":29,"category":10,"createdAt":30,"date":31,"description":32,"image":15,"imageAlt":15,"readingTime":33,"tags":34,"title":39,"updatedAt":40},"6a041412aa6b273b0c40f181","how-to-build-local-pages-that-win-in-ai-powered-search-via-sejournal-lorenbaker","https://seogard.io/blog/how-to-build-local-pages-that-win-in-ai-powered-search-via-sejournal-lorenbaker","2026-05-13T06:02:58.743Z","2026-05-13","Guide technique pour construire des pages locales qui performent dans les AI Overviews et AI Mode. Schema, SSR, contenu structuré.",12,[35,19,36,37,38],"local SEO","pages locales","schema markup","SSR","Pages locales pour l'AI Search : architecture technique","Wed May 13 2026 06:02:58 GMT+0000 (Coordinated Universal Time)",{"_id":42,"slug":43,"__v":6,"author":7,"canonical":44,"category":10,"createdAt":45,"date":46,"description":47,"image":15,"imageAlt":15,"readingTime":16,"tags":48,"title":54,"updatedAt":55},"6a02c291aa6b273b0c2a74f9","the-tech-seo-audit-for-the-ai-search-era-how-to-maximize-your-ai-visibility-via-sejournal-jetoctopus","https://seogard.io/blog/the-tech-seo-audit-for-the-ai-search-era-how-to-maximize-your-ai-visibility-via-sejournal-jetoctopus","2026-05-12T06:02:57.339Z","2026-05-12","Comment adapter votre audit technique SEO aux exigences des AI Overviews, du crawl par les LLMs et du grounding. Méthodes, code et scénarios concrets.",[49,50,51,52,53],"tech seo audit","ai search","ai visibility","crawl budget","structured data","Audit SEO technique pour l'ère AI Search : guide avancé","Tue May 12 2026 06:02:57 GMT+0000 (Coordinated Universal Time)",{"_id":57,"slug":58,"__v":6,"author":7,"canonical":59,"category":10,"createdAt":60,"date":46,"description":61,"image":15,"imageAlt":15,"readingTime":33,"tags":62,"title":67,"updatedAt":68},"6a02fac0aa6b273b0c58d096","the-consensus-gap-via-sejournal-kevin-indig","https://seogard.io/blog/the-consensus-gap-via-sejournal-kevin-indig","2026-05-12T10:02:40.519Z","Une marque peut dominer dans un dashboard AI agrégé et être absente de deux moteurs sur trois. Analyse technique du Consensus Gap et méthodes pour le détecter.",[63,19,64,65,66],"consensus gap","LLM visibility","GEO","multi-engine","The Consensus Gap : votre marque visible sur un LLM, invisible sur deux autres","Tue May 12 2026 10:02:40 GMT+0000 (Coordinated Universal Time)"]