[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fy9HyHt_Q4UeQowDiqRGpy80hWew23M2shLBrOzAVdsQ":3,"$f2wVPIf1aatY_GgnHllhyWXjegQV3EEhD61KEqUxs-Ug":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},"6a0aab8eaa6b273b0cb15785","how-to-measure-ai-search-current-kpis-you-need-to-know-webinar-via-sejournal-hethr-campbell",0,"Equipe Seogard","Google ne vous donne toujours pas de données de clic granulaires pour les AI Overviews. Pourtant, ces résultats générés par IA occupent désormais la majorité de la surface visible au-dessus de la ligne de flottaison sur les requêtes informationnelles. Le problème n'est plus \"faut-il s'intéresser à l'AI Search ?\" mais \"comment diable mesure-t-on quelque chose que Google refuse de rendre transparent ?\".\n\n## Le vide métrologique de l'AI Search\n\nLe Search Engine Journal a récemment organisé un webinaire sur la mesure de l'AI Search, mettant en lumière un constat que tout SEO technique expérimente au quotidien : les KPIs traditionnels — impressions, clics, CTR, position moyenne — ne capturent plus la réalité de la SERP.\n\nLe problème est structurel. Google Search Console regroupe les AI Overviews (AIO) dans les données organiques sans les isoler. Quand un de vos résultats apparaît comme source citée dans une AIO, vous voyez une impression dans la GSC, mais vous ne savez pas si l'utilisateur a vu votre lien, cliqué sur le chevron d'expansion, ou simplement lu la réponse synthétisée et quitté la page. Cette opacité [a déjà été documentée](/blog/google-expands-ai-search-links-without-new-click-data-via-sejournal-mattgsouthern) et ne semble pas en voie de résolution.\n\nLe vrai danger : prendre des décisions stratégiques sur des métriques contaminées. Si votre CTR organique chute de 4,2% à 2,8% sur un cluster de mots-clés, est-ce que votre contenu a perdu en pertinence, ou est-ce que les AIO ont simplement absorbé le clic ? Sans segmentation, vous ne pouvez pas répondre.\n\n### Ce que la GSC montre — et ce qu'elle cache\n\nDepuis début 2025, la Search Console affiche un filtre \"AI Overviews\" dans le rapport Performance. C'est un progrès, mais il reste limité. Ce filtre vous dit combien d'impressions proviennent de résultats où une AIO est présente. Il ne vous dit pas :\n\n- Si votre site est effectivement cité dans l'AIO elle-même\n- Le taux de clic spécifique au lien dans l'AIO vs. le lien organique classique en dessous\n- Si l'utilisateur a interagi avec l'AIO (expansion, scroll, clic sur \"Show more\")\n\nRésultat : vous pilotez à l'aveugle sur la portion de trafic qui croît le plus vite.\n\n## Construire un framework de KPIs pour l'AI Search\n\nPlutôt que d'attendre que Google daigne fournir des données granulaires, il faut construire votre propre couche de mesure. Voici un framework en trois niveaux.\n\n### Niveau 1 : Visibilité dans les AIO (Share of AI Voice)\n\nLe premier KPI à tracker est votre taux de présence dans les AI Overviews pour vos mots-clés stratégiques. Ce n'est pas un CTR, ce n'est pas un ranking classique — c'est une métrique de visibilité de marque.\n\nL'approche technique : scraper les SERPs de manière programmatique pour détecter la présence d'AIO et vérifier si votre domaine y est cité. Voici un script Node.js qui utilise l'API SerpAPI (ou tout wrapper SERP de votre choix) pour collecter ces données :\n\n```typescript\nimport fetch from 'node-fetch';\n\ninterface AIOResult {\n  keyword: string;\n  hasAIO: boolean;\n  citedDomains: string[];\n  isOurDomainCited: boolean;\n  timestamp: string;\n}\n\nasync function checkAIOPresence(\n  keyword: string,\n  targetDomain: string,\n  apiKey: string\n): Promise\u003CAIOResult> {\n  const params = new URLSearchParams({\n    q: keyword,\n    api_key: apiKey,\n    engine: 'google',\n    gl: 'fr',\n    hl: 'fr',\n  });\n\n  const response = await fetch(\n    `https://serpapi.com/search.json?${params.toString()}`\n  );\n  const data = await response.json();\n\n  const aiOverview = data.ai_overview;\n  const citedDomains: string[] = [];\n\n  if (aiOverview?.references) {\n    for (const ref of aiOverview.references) {\n      try {\n        const domain = new URL(ref.link).hostname.replace('www.', '');\n        citedDomains.push(domain);\n      } catch {\n        // URL malformée, on ignore\n      }\n    }\n  }\n\n  return {\n    keyword,\n    hasAIO: !!aiOverview,\n    citedDomains: [...new Set(citedDomains)],\n    isOurDomainCited: citedDomains.includes(targetDomain.replace('www.', '')),\n    timestamp: new Date().toISOString(),\n  };\n}\n\n// Batch check sur un cluster de mots-clés\nasync function auditAIOVisibility(\n  keywords: string[],\n  targetDomain: string,\n  apiKey: string\n) {\n  const results: AIOResult[] = [];\n\n  for (const kw of keywords) {\n    const result = await checkAIOPresence(kw, targetDomain, apiKey);\n    results.push(result);\n    // Rate limiting — respectez les limites de votre API\n    await new Promise((r) => setTimeout(r, 2000));\n  }\n\n  const totalWithAIO = results.filter((r) => r.hasAIO).length;\n  const totalCited = results.filter((r) => r.isOurDomainCited).length;\n\n  console.log(`Keywords analysés: ${results.length}`);\n  console.log(`SERPs avec AIO: ${totalWithAIO} (${((totalWithAIO / results.length) * 100).toFixed(1)}%)`);\n  console.log(`Notre domaine cité dans AIO: ${totalCited} (${totalWithAIO > 0 ? ((totalCited / totalWithAIO) * 100).toFixed(1) : 0}%)`);\n\n  return results;\n}\n```\n\nCe script vous donne votre **Share of AI Voice** : le pourcentage de requêtes où votre domaine est cité dans les AIO parmi toutes les requêtes qui déclenchent une AIO. C'est l'équivalent moderne du Share of Voice classique, adapté au nouveau paradigme.\n\n### Niveau 2 : Impact sur le trafic (Delta Analysis)\n\nLe deuxième KPI est le delta de trafic organique corrélé à l'apparition des AIO. L'idée : pour chaque cluster de mots-clés, comparer le trafic avant et après le déploiement des AIO sur ces requêtes.\n\nEn pratique, vous pouvez extraire les données de la Search Console via l'API et les croiser avec vos données de scraping AIO :\n\n```python\nimport pandas as pd\nfrom google.oauth2.credentials import Credentials\nfrom googleapiclient.discovery import build\n\ndef get_gsc_data(property_url: str, start_date: str, end_date: str, credentials: Credentials):\n    service = build('searchconsole', 'v1', credentials=credentials)\n\n    request_body = {\n        'startDate': start_date,\n        'endDate': end_date,\n        'dimensions': ['query', 'date'],\n        'rowLimit': 25000,\n        'dimensionFilterGroups': [{\n            'filters': [{\n                'dimension': 'searchAppearance',\n                'operator': 'equals',\n                'expression': 'AI_OVERVIEW'\n            }]\n        }]\n    }\n\n    response = service.searchanalytics().query(\n        siteUrl=property_url,\n        body=request_body\n    ).execute()\n\n    rows = response.get('rows', [])\n    data = []\n    for row in rows:\n        data.append({\n            'query': row['keys'][0],\n            'date': row['keys'][1],\n            'clicks': row['clicks'],\n            'impressions': row['impressions'],\n            'ctr': row['ctr'],\n            'position': row['position']\n        })\n\n    return pd.DataFrame(data)\n\n# Comparer AIO vs non-AIO pour les mêmes requêtes\ndef compute_aio_impact(df_aio: pd.DataFrame, df_all: pd.DataFrame):\n    \"\"\"\n    df_aio: données filtrées AI_OVERVIEW\n    df_all: données sans filtre searchAppearance\n    \"\"\"\n    aio_queries = set(df_aio['query'].unique())\n\n    df_all['has_aio'] = df_all['query'].isin(aio_queries)\n\n    summary = df_all.groupby('has_aio').agg(\n        avg_ctr=('ctr', 'mean'),\n        avg_clicks=('clicks', 'mean'),\n        total_impressions=('impressions', 'sum')\n    )\n\n    print(\"Impact AIO sur les métriques:\")\n    print(summary)\n    return summary\n```\n\nCe type d'analyse révèle souvent un pattern contre-intuitif : sur certains clusters, les requêtes avec AIO affichent un CTR **plus élevé** que celles sans AIO. Cela arrive quand votre contenu est cité dans l'AIO avec un lien visible — l'utilisateur vous voit comme une source de confiance et clique davantage. Sur d'autres clusters, le CTR s'effondre parce que la réponse AIO est auto-suffisante. La granularité par cluster est essentielle.\n\n### Niveau 3 : Attribution multi-touch avec marquage UTM avancé\n\nLe troisième niveau consiste à tracer l'origine exacte des visites provenant d'une AIO dans votre outil d'analytics. GA4 a commencé à [identifier le trafic provenant des assistants IA](/blog/ga4-tracks-ai-assistant-traffic-faq-results-gone-seo-pulse-via-sejournal-mattgsouthern), mais le suivi reste rudimentaire.\n\nPour aller plus loin, vous pouvez détecter côté client si l'utilisateur arrive via un contexte AIO en analysant le referrer et les paramètres de l'URL :\n\n```javascript\n// Détection heuristique d'un clic provenant d'une AI Overview\n(function detectAIOTraffic() {\n  const referrer = document.referrer;\n  const urlParams = new URLSearchParams(window.location.search);\n\n  // Google utilise parfois des fragments ou paramètres spécifiques\n  // pour les clics provenant des AIO\n  const isGoogleReferrer = referrer.includes('google.com/search') ||\n                           referrer.includes('google.fr/search');\n\n  // Heuristique : si le paramètre sxsrf ou ved contient des patterns\n  // associés aux AIO (ce qui nécessite un reverse engineering régulier)\n  const ved = urlParams.get('ved');\n  const isLikelyAIO = ved && (\n    ved.includes('2ahUKEw') && ved.length > 80\n    // Pattern observé — à valider sur vos propres données\n  );\n\n  if (isGoogleReferrer && isLikelyAIO) {\n    // Envoyer un événement GA4\n    if (typeof gtag === 'function') {\n      gtag('event', 'aio_click', {\n        event_category: 'ai_search',\n        event_label: window.location.pathname,\n        page_referrer: referrer,\n      });\n    }\n\n    // Ou envoyer vers votre propre endpoint analytics\n    navigator.sendBeacon('/api/analytics/aio-click', JSON.stringify({\n      path: window.location.pathname,\n      timestamp: Date.now(),\n      referrer: referrer,\n      ved: ved,\n    }));\n  }\n})();\n```\n\nAvertissement : cette approche repose sur du reverse engineering des paramètres Google, qui changent régulièrement. C'est fragile par nature. Croisez toujours avec vos données GSC pour valider la cohérence.\n\n## Le scénario concret : un e-commerce de 8 000 produits face aux AIO\n\nPrenons un cas réaliste. **TechDirect**, un e-commerce français spécialisé en matériel informatique, exploite 8 200 pages produit et 340 guides d'achat. Avant le déploiement massif des AIO en France (Q3 2025), leur trafic organique mensuel était de 420 000 sessions, dont 38% provenait de requêtes informationnelles (\"meilleur écran 4K pour le gaming\", \"différence DDR4 vs DDR5\").\n\n**Ce qui s'est passé** : entre septembre 2025 et janvier 2026, le trafic informationnel a chuté de 23%. Pas de perte de positions classiques — les pages rankaient toujours en P1-P3. Mais les AIO absorbaient le clic.\n\n**Le diagnostic** : en appliquant le framework ci-dessus, l'équipe SEO a découvert :\n\n- 72% de leurs requêtes informationnelles déclenchaient désormais une AIO\n- TechDirect était cité comme source dans seulement 31% de ces AIO\n- Le CTR sur les requêtes avec AIO était de 1,8% contre 5,4% sur les requêtes sans AIO\n- Mais les requêtes où TechDirect était cité dans l'AIO affichaient un CTR de 6,2% — supérieur au baseline\n\n**La stratégie** : plutôt que de lutter contre la marée, l'équipe a pivoté vers une optimisation pour la citation dans les AIO. Ils ont restructuré leurs guides d'achat avec des réponses directes, factuelles, dans les 150 premiers mots de chaque page. Ils ont ajouté du balisage structuré plus granulaire. Après 3 mois, leur taux de citation dans les AIO est passé de 31% à 54%, et le trafic informationnel a récupéré 14 des 23 points perdus.\n\nLe point clé : sans le KPI de \"Share of AI Voice\", l'équipe aurait vu une chute de trafic et aurait peut-être conclu à un problème de contenu ou de positionnement. La métrique correcte a permis d'identifier le vrai levier.\n\n## Les KPIs traditionnels à recalibrer\n\nL'AI Search ne rend pas les KPIs classiques obsolètes — elle impose de les recalibrer.\n\n### Le CTR : segmenter ou mourir\n\nLe CTR organique global est désormais une métrique polluée. Vous devez le segmenter en trois buckets :\n\n1. **CTR sur SERPs sans AIO** : votre baseline réel, comparable aux données historiques\n2. **CTR sur SERPs avec AIO, votre site cité** : votre performance en contexte IA favorable\n3. **CTR sur SERPs avec AIO, votre site non cité** : le trafic que vous êtes en train de perdre\n\nPour obtenir cette segmentation dans un dashboard Looker Studio, croisez vos données GSC (via le filtre `searchAppearance: AI_OVERVIEW`) avec vos données de scraping SERP. La requête BigQuery ressemble à ceci si vous exportez vos données GSC vers BigQuery :\n\n```sql\nWITH aio_queries AS (\n  SELECT DISTINCT query\n  FROM `project.dataset.searchconsole_data`\n  WHERE search_appearance = 'AI_OVERVIEW'\n    AND data_date BETWEEN '2026-04-01' AND '2026-04-30'\n),\ncited_queries AS (\n  SELECT DISTINCT keyword AS query\n  FROM `project.dataset.aio_scraping_results`\n  WHERE is_our_domain_cited = TRUE\n    AND scrape_date BETWEEN '2026-04-01' AND '2026-04-30'\n)\nSELECT\n  CASE\n    WHEN aq.query IS NULL THEN 'no_aio'\n    WHEN cq.query IS NOT NULL THEN 'aio_cited'\n    ELSE 'aio_not_cited'\n  END AS segment,\n  AVG(gsc.ctr) AS avg_ctr,\n  SUM(gsc.clicks) AS total_clicks,\n  SUM(gsc.impressions) AS total_impressions\nFROM `project.dataset.searchconsole_data` gsc\nLEFT JOIN aio_queries aq ON gsc.query = aq.query\nLEFT JOIN cited_queries cq ON gsc.query = cq.query\nWHERE gsc.data_date BETWEEN '2026-04-01' AND '2026-04-30'\nGROUP BY segment\nORDER BY segment;\n```\n\n### Les impressions : distinguer la vanité de la valeur\n\nUne impression dans une AIO n'a pas la même valeur qu'une impression en position 3 organique. Dans le premier cas, votre marque apparaît dans un contexte de réponse synthétisée — l'utilisateur peut ne jamais voir votre nom. Dans le second, votre title et votre meta description sont affichés en pleine page.\n\nLe KPI pertinent ici est le **taux de conversion par impression** plutôt que le volume brut d'impressions. Si 10 000 impressions AIO génèrent 50 conversions et que 10 000 impressions organiques classiques en génèrent 200, vous savez où concentrer vos efforts.\n\n### Le positionnement : la fin de la \"position 1\"\n\nLe concept de position 1 perd son sens quand une AIO occupe 400 pixels au-dessus de votre résultat. Ce qui compte désormais, c'est la **visibilité effective au-dessus du fold**. Des outils comme Screaming Frog, combinés avec des captures de SERP automatisées (via Puppeteer ou Playwright), permettent de mesurer le **pixel rank** — la position en pixels de votre premier résultat visible par rapport au haut de la viewport.\n\nScreaming Frog permet d'exporter les SERP features détectées pour chaque mot-clé via son mode SERP. Combiné avec un script de capture, vous pouvez construire une base de données de l'évolution du pixel rank dans le temps.\n\n## Ce que les LLMs ne mesurent pas (et pourquoi c'est un problème)\n\nUn angle rarement abordé : l'AI Search ne se limite plus à Google. ChatGPT, Perplexity, Claude, Gemini — chacun de ces systèmes peut citer votre contenu comme source. Et aucun d'entre eux ne vous fournit de données de performance.\n\nPerplexity affiche les sources, mais ne vous envoie pas de trafic avec un referrer traçable de manière fiable. ChatGPT avec navigation web peut visiter votre page, extraire l'information, et la restituer à l'utilisateur sans jamais générer un clic dans vos analytics.\n\nLe KPI émergent ici est le **Brand Mention Rate** dans les réponses LLM. Vous pouvez le mesurer en exécutant régulièrement des prompts liés à votre domaine d'expertise sur les principaux LLMs et en comptant la fréquence à laquelle votre marque est mentionnée ou votre contenu est cité. C'est l'approche détaillée dans les [expérimentations au niveau du prompt](/blog/how-to-run-prompt-level-seo-experiments-for-ai-search).\n\nCe monitoring est fastidieux manuellement. C'est exactement le type de tâche où un outil de monitoring automatisé comme Seogard prend tout son sens — détecter les variations de citations, les disparitions de mentions, les régressions dans la visibilité IA de manière continue plutôt que ponctuelle.\n\n## L'audit technique adapté à l'AI Search\n\nVos pages doivent être techniquement irréprochables pour être sélectionnées comme sources par les systèmes d'IA. Les critères vont au-delà du SEO classique.\n\n### Le SSR comme prérequis absolu\n\nLes AI Overviews et les systèmes de grounding de Bing (qui alimente Copilot) [ont des exigences spécifiques](/blog/bing-reveals-what-grounding-means-for-ai-search-visibility-via-sejournal-slobodanmanic) sur l'accessibilité du contenu. Un SPA React qui rend son contenu côté client a peu de chances d'être cité. Le contenu doit être dans le HTML initial.\n\nVérifiez avec un `curl` simple :\n\n```bash\n# Vérifier que le contenu principal est dans le HTML initial (SSR)\ncurl -s -A \"Mozilla/5.0 (compatible; Googlebot/2.1)\" \\\n  \"https://techdirect.fr/guides/meilleur-ecran-4k-gaming\" \\\n  | grep -c \"DDR5\\|temps de réponse\\|taux de rafraîchissement\"\n\n# Si le count est 0, votre contenu est rendu côté client\n# et probablement invisible pour les systèmes d'IA\n```\n\nLes [leçons de JavaScript SEO sur les sites e-commerce](/blog/5-javascript-seo-lessons-from-top-ecommerce-sites) s'appliquent doublement dans le contexte de l'AI Search. Un contenu invisible au premier rendu est un contenu inexistant pour les LLMs qui grounding leurs réponses.\n\n### Le balisage structuré comme signal de confiance\n\nLes systèmes d'IA privilégient le contenu structuré, vérifiable, attribuable. Le schema markup n'est plus seulement un levier pour les rich results (d'autant que Google [a retiré les FAQ rich results](/blog/google-drops-faq-rich-results-from-search-via-sejournal-mattgsouthern)) — il sert de signal de confiance pour les systèmes de grounding.\n\nAssurez-vous au minimum d'implémenter :\n- `Article` ou `TechArticle` avec `dateModified` à jour\n- `author` avec un lien vers une page auteur qui elle-même a un schema `Person`\n- `citation` pour toute donnée sourcée\n- `speakable` pour les portions de contenu que vous voulez voir reprises vocalement\n\n### Le crawl des agents IA\n\nUn nouveau type de visiteur apparaît : les agents IA qui [crawlent votre site](/blog/google-agent-the-web-s-new-visitor-just-got-an-identity-via-sejournal-slobodanmanic) pour alimenter leurs réponses. Vérifiez vos logs serveur pour les user-agents comme `ChatGPT-User`, `PerplexityBot`, `ClaudeBot`, `Google-Extended`. Si vous les bloquez dans votre robots.txt, vous disparaissez de ces systèmes.\n\nLe KPI associé : le volume de crawl par agent IA, mesuré via l'analyse de logs. Une baisse soudaine du crawl par `PerplexityBot` peut indiquer un problème technique (erreurs 5xx, timeout) avant même que vous ne constatiez une baisse de citations.\n\n## La couche de monitoring manquante\n\nLe problème fondamental de la mesure en AI Search, c'est que chaque métrique décrite ci-dessus provient d'une source différente : GSC pour les impressions, scraping SERP pour la présence AIO, logs serveur pour le crawl des agents, prompts manuels pour le Brand Mention Rate, GA4 pour l'attribution.\n\nSans consolidation, vous passez votre temps à croiser des fichiers Excel au lieu d'analyser des tendances. L'approche la plus résiliente — et celle que les équipes [d'audit technique pour l'ère AI Search](/blog/the-tech-seo-audit-for-the-ai-search-era-how-to-maximize-your-ai-visibility-via-sejournal-jetoctopus) recommandent — consiste à centraliser ces signaux dans un pipeline automatisé.\n\nLe pipeline idéal :\n\n1. **Extraction quotidienne** des données GSC via l'API (avec filtre AIO)\n2. **Scraping hebdomadaire** des SERPs pour vos top 500 mots-clés (présence AIO + domaines cités)\n3. **Analyse de logs** continue pour les user-agents IA\n4. **Prompting mensuel** des LLMs sur 50 requêtes stratégiques\n5. **Consolidation** dans un dashboard unique avec alertes sur les variations significatives\n\nSeogard adresse une partie de cette problématique en détectant automatiquement les régressions techniques (meta disparues, SSR cassé, erreurs de crawl) qui pourraient vous faire perdre votre éligibilité comme source IA — mais la couche de mesure de visibilité IA reste un chantier ouvert pour l'ensemble de l'industrie.\n\n## Les limites de toute approche de mesure actuelle\n\nSoyons honnêtes sur les trade-offs. Chaque méthode décrite dans cet article a des failles :\n\n- **Le scraping SERP** est fragile face aux changements de layout Google et potentiellement en violation des ToS\n- **L'analyse de logs** ne capture que les crawls, pas l'utilisation effective de votre contenu dans les réponses\n- **Le Brand Mention Rate via prompting** dépend de la variabilité des réponses LLM (le même prompt peut donner des résultats différents)\n- **Le filtre AIO de la GSC** mélange les impressions où vous êtes cité et celles où vous êtes simplement présent dans la SERP qui contient une AIO\n\nAucune de ces métriques, prise isolément, ne raconte l'histoire complète. C'est leur combinaison et leur suivi dans le temps qui révèle les tendances actionnables. Le SEO qui attend la métrique parfaite ne mesure rien. Le SEO qui triangule des signaux imparfaits prend des décisions éclairées.\n\nL'AI Search est un problème de visibilité à [trois couches distinctes](/blog/stop-treating-ai-visibility-as-one-problem-it-s-actually-three-on-three-different-layers-via-sejournal-duaneforrester) : la couche technique (votre contenu est-il crawlable et structuré ?), la couche éditoriale (votre contenu est-il la meilleure source disponible ?), et la couche de mesure (pouvez-vous prouver ce qui fonctionne ?). Les deux premières sont matures. La troisième est le chantier de 2026. Commencez à instrumenter dès maintenant — ceux qui auront 6 mois de données historiques quand Google ouvrira enfin le robinet des métriques AIO auront un avantage décisif.\n```","https://seogard.io/blog/how-to-measure-ai-search-current-kpis-you-need-to-know-webinar-via-sejournal-hethr-campbell","Actualités SEO","2026-05-18T06:02:54.785Z","2026-05-18","Quels KPIs suivre pour mesurer votre visibilité dans l'AI Search ? Méthodes concrètes, code et métriques actionnables pour les SEO techniques.","\u003Cp>Google ne vous donne toujours pas de données de clic granulaires pour les AI Overviews. Pourtant, ces résultats générés par IA occupent désormais la majorité de la surface visible au-dessus de la ligne de flottaison sur les requêtes informationnelles. Le problème n'est plus \"faut-il s'intéresser à l'AI Search ?\" mais \"comment diable mesure-t-on quelque chose que Google refuse de rendre transparent ?\".\u003C/p>\n\u003Ch2>Le vide métrologique de l'AI Search\u003C/h2>\n\u003Cp>Le Search Engine Journal a récemment organisé un webinaire sur la mesure de l'AI Search, mettant en lumière un constat que tout SEO technique expérimente au quotidien : les KPIs traditionnels — impressions, clics, CTR, position moyenne — ne capturent plus la réalité de la SERP.\u003C/p>\n\u003Cp>Le problème est structurel. Google Search Console regroupe les AI Overviews (AIO) dans les données organiques sans les isoler. Quand un de vos résultats apparaît comme source citée dans une AIO, vous voyez une impression dans la GSC, mais vous ne savez pas si l'utilisateur a vu votre lien, cliqué sur le chevron d'expansion, ou simplement lu la réponse synthétisée et quitté la page. Cette opacité \u003Ca href=\"/blog/google-expands-ai-search-links-without-new-click-data-via-sejournal-mattgsouthern\">a déjà été documentée\u003C/a> et ne semble pas en voie de résolution.\u003C/p>\n\u003Cp>Le vrai danger : prendre des décisions stratégiques sur des métriques contaminées. Si votre CTR organique chute de 4,2% à 2,8% sur un cluster de mots-clés, est-ce que votre contenu a perdu en pertinence, ou est-ce que les AIO ont simplement absorbé le clic ? Sans segmentation, vous ne pouvez pas répondre.\u003C/p>\n\u003Ch3>Ce que la GSC montre — et ce qu'elle cache\u003C/h3>\n\u003Cp>Depuis début 2025, la Search Console affiche un filtre \"AI Overviews\" dans le rapport Performance. C'est un progrès, mais il reste limité. Ce filtre vous dit combien d'impressions proviennent de résultats où une AIO est présente. Il ne vous dit pas :\u003C/p>\n\u003Cul>\n\u003Cli>Si votre site est effectivement cité dans l'AIO elle-même\u003C/li>\n\u003Cli>Le taux de clic spécifique au lien dans l'AIO vs. le lien organique classique en dessous\u003C/li>\n\u003Cli>Si l'utilisateur a interagi avec l'AIO (expansion, scroll, clic sur \"Show more\")\u003C/li>\n\u003C/ul>\n\u003Cp>Résultat : vous pilotez à l'aveugle sur la portion de trafic qui croît le plus vite.\u003C/p>\n\u003Ch2>Construire un framework de KPIs pour l'AI Search\u003C/h2>\n\u003Cp>Plutôt que d'attendre que Google daigne fournir des données granulaires, il faut construire votre propre couche de mesure. Voici un framework en trois niveaux.\u003C/p>\n\u003Ch3>Niveau 1 : Visibilité dans les AIO (Share of AI Voice)\u003C/h3>\n\u003Cp>Le premier KPI à tracker est votre taux de présence dans les AI Overviews pour vos mots-clés stratégiques. Ce n'est pas un CTR, ce n'est pas un ranking classique — c'est une métrique de visibilité de marque.\u003C/p>\n\u003Cp>L'approche technique : scraper les SERPs de manière programmatique pour détecter la présence d'AIO et vérifier si votre domaine y est cité. Voici un script Node.js qui utilise l'API SerpAPI (ou tout wrapper SERP de votre choix) pour collecter ces données :\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\"> fetch \u003C/span>\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'node-fetch'\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\"> AIOResult\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  keyword\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\">  hasAIO\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\">  citedDomains\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\">  isOurDomainCited\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\">  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\"> checkAIOPresence\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  keyword\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>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  apiKey\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\">AIOResult\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\"> params\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\">({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    q: keyword,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    api_key: apiKey,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    engine: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'google'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    gl: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'fr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    hl: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'fr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  });\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\"> 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>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    `https://serpapi.com/search.json?${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">params\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#B392F0\">toString\u003C/span>\u003Cspan style=\"color:#9ECBFF\">()\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  );\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\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\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> aiOverview\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> data.ai_overview;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> citedDomains\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\"> [];\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (aiOverview?.references) {\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\">const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> ref\u003C/span>\u003Cspan style=\"color:#F97583\"> of\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> aiOverview.references) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">      try\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\"> domain\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> new\u003C/span>\u003Cspan style=\"color:#B392F0\"> URL\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(ref.link).hostname.\u003C/span>\u003Cspan style=\"color:#B392F0\">replace\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'www.'\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\">        citedDomains.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(domain);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      } \u003C/span>\u003Cspan style=\"color:#F97583\">catch\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">        // URL malformée, on ignore\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\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:#E1E4E8\">    keyword,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    hasAIO: \u003C/span>\u003Cspan style=\"color:#F97583\">!!\u003C/span>\u003Cspan style=\"color:#E1E4E8\">aiOverview,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    citedDomains: [\u003C/span>\u003Cspan style=\"color:#F97583\">...new\u003C/span>\u003Cspan style=\"color:#B392F0\"> Set\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(citedDomains)],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    isOurDomainCited: citedDomains.\u003C/span>\u003Cspan style=\"color:#B392F0\">includes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(targetDomain.\u003C/span>\u003Cspan style=\"color:#B392F0\">replace\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'www.'\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\">    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\">\u003Cspan style=\"color:#E1E4E8\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// Batch check sur un cluster de mots-clés\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">async\u003C/span>\u003Cspan style=\"color:#F97583\"> function\u003C/span>\u003Cspan style=\"color:#B392F0\"> auditAIOVisibility\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  keywords\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>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">  apiKey\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>\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\"> AIOResult\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\"> kw\u003C/span>\u003Cspan style=\"color:#F97583\"> of\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> keywords) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> result\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#F97583\"> await\u003C/span>\u003Cspan style=\"color:#B392F0\"> checkAIOPresence\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(kw, targetDomain, apiKey);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    results.\u003C/span>\u003Cspan style=\"color:#B392F0\">push\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(result);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Rate limiting — respectez les limites de votre API\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\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> totalWithAIO\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> results.\u003C/span>\u003Cspan style=\"color:#B392F0\">filter\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:#E1E4E8\"> r.hasAIO).\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\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\"> totalCited\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> results.\u003C/span>\u003Cspan style=\"color:#B392F0\">filter\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:#E1E4E8\"> r.isOurDomainCited).\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#E1E4E8\">;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\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\">`Keywords analysés: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">results\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}`\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\">`SERPs avec AIO: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">totalWithAIO\u003C/span>\u003Cspan style=\"color:#9ECBFF\">} (${\u003C/span>\u003Cspan style=\"color:#9ECBFF\">((\u003C/span>\u003Cspan style=\"color:#E1E4E8\">totalWithAIO\u003C/span>\u003Cspan style=\"color:#F97583\"> /\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> results\u003C/span>\u003Cspan style=\"color:#9ECBFF\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#9ECBFF\">) \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>\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\">`Notre domaine cité dans AIO: ${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">totalCited\u003C/span>\u003Cspan style=\"color:#9ECBFF\">} (${\u003C/span>\u003Cspan style=\"color:#E1E4E8\">totalWithAIO\u003C/span>\u003Cspan style=\"color:#F97583\"> >\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#F97583\"> ?\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> ((\u003C/span>\u003Cspan style=\"color:#E1E4E8\">totalCited\u003C/span>\u003Cspan style=\"color:#F97583\"> /\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> totalWithAIO\u003C/span>\u003Cspan style=\"color:#9ECBFF\">) \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:#F97583\">:\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 0\u003C/span>\u003Cspan style=\"color:#9ECBFF\">}%)`\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#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>\u003C/code>\u003C/pre>\n\u003Cp>Ce script vous donne votre \u003Cstrong>Share of AI Voice\u003C/strong> : le pourcentage de requêtes où votre domaine est cité dans les AIO parmi toutes les requêtes qui déclenchent une AIO. C'est l'équivalent moderne du Share of Voice classique, adapté au nouveau paradigme.\u003C/p>\n\u003Ch3>Niveau 2 : Impact sur le trafic (Delta Analysis)\u003C/h3>\n\u003Cp>Le deuxième KPI est le delta de trafic organique corrélé à l'apparition des AIO. L'idée : pour chaque cluster de mots-clés, comparer le trafic avant et après le déploiement des AIO sur ces requêtes.\u003C/p>\n\u003Cp>En pratique, vous pouvez extraire les données de la Search Console via l'API et les croiser avec vos données de scraping AIO :\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\"> pandas \u003C/span>\u003Cspan style=\"color:#F97583\">as\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> pd\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> google.oauth2.credentials \u003C/span>\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> Credentials\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">from\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> googleapiclient.discovery \u003C/span>\u003Cspan style=\"color:#F97583\">import\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> build\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\"> get_gsc_data\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(property_url: \u003C/span>\u003Cspan style=\"color:#79B8FF\">str\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, start_date: \u003C/span>\u003Cspan style=\"color:#79B8FF\">str\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, end_date: \u003C/span>\u003Cspan style=\"color:#79B8FF\">str\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, credentials: Credentials):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    service \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> build(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'searchconsole'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'v1'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#FFAB70\">credentials\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">credentials)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    request_body \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        'startDate'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: start_date,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        'endDate'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: end_date,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        'dimensions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: [\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'query'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'date'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        'rowLimit'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#79B8FF\">25000\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">        'dimensionFilterGroups'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: [{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'filters'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: [{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                'dimension'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'searchAppearance'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                'operator'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'equals'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">                'expression'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'AI_OVERVIEW'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">            }]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        }]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    response \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> service.searchanalytics().query(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">        siteUrl\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">property_url,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">        body\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">request_body\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    ).execute()\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    rows \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> response.get(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'rows'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, [])\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    data \u003C/span>\u003Cspan style=\"color:#F97583\">=\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\"> row \u003C/span>\u003Cspan style=\"color:#F97583\">in\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> rows:\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        data.append({\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'query'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'keys'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">][\u003C/span>\u003Cspan style=\"color:#79B8FF\">0\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'date'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'keys'\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\">            'clicks'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'clicks'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'impressions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'impressions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'ctr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'ctr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">],\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">            'position'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">: row[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'position'\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\"> pd.DataFrame(data)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Comparer AIO vs non-AIO pour les mêmes requêtes\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">def\u003C/span>\u003Cspan style=\"color:#B392F0\"> compute_aio_impact\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(df_aio: pd.DataFrame, df_all: pd.DataFrame):\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"\"\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    df_aio: données filtrées AI_OVERVIEW\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    df_all: données sans filtre searchAppearance\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">    \"\"\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    aio_queries \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#79B8FF\"> set\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(df_aio[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'query'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">].unique())\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    df_all[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'has_aio'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">] \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> df_all[\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'query'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">].isin(aio_queries)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    summary \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> df_all.groupby(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'has_aio'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">).agg(\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">        avg_ctr\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'ctr'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'mean'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">        avg_clicks\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'clicks'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'mean'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFAB70\">        total_impressions\u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'impressions'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'sum'\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:#79B8FF\">    print\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">\"Impact AIO sur les métriques:\"\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\">(summary)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    return\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> summary\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Ce type d'analyse révèle souvent un pattern contre-intuitif : sur certains clusters, les requêtes avec AIO affichent un CTR \u003Cstrong>plus élevé\u003C/strong> que celles sans AIO. Cela arrive quand votre contenu est cité dans l'AIO avec un lien visible — l'utilisateur vous voit comme une source de confiance et clique davantage. Sur d'autres clusters, le CTR s'effondre parce que la réponse AIO est auto-suffisante. La granularité par cluster est essentielle.\u003C/p>\n\u003Ch3>Niveau 3 : Attribution multi-touch avec marquage UTM avancé\u003C/h3>\n\u003Cp>Le troisième niveau consiste à tracer l'origine exacte des visites provenant d'une AIO dans votre outil d'analytics. GA4 a commencé à \u003Ca href=\"/blog/ga4-tracks-ai-assistant-traffic-faq-results-gone-seo-pulse-via-sejournal-mattgsouthern\">identifier le trafic provenant des assistants IA\u003C/a>, mais le suivi reste rudimentaire.\u003C/p>\n\u003Cp>Pour aller plus loin, vous pouvez détecter côté client si l'utilisateur arrive via un contexte AIO en analysant le referrer et les paramètres de l'URL :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">// Détection heuristique d'un clic provenant d'une AI Overview\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#F97583\">function\u003C/span>\u003Cspan style=\"color:#B392F0\"> detectAIOTraffic\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\"> referrer\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> document.referrer;\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 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\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  // Google utilise parfois des fragments ou paramètres spécifiques\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  // pour les clics provenant des AIO\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> isGoogleReferrer\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> referrer.\u003C/span>\u003Cspan style=\"color:#B392F0\">includes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'google.com/search'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">||\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">                           referrer.\u003C/span>\u003Cspan style=\"color:#B392F0\">includes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'google.fr/search'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">);\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  // Heuristique : si le paramètre sxsrf ou ved contient des patterns\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">  // associés aux AIO (ce qui nécessite un reverse engineering régulier)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  const\u003C/span>\u003Cspan style=\"color:#79B8FF\"> ved\u003C/span>\u003Cspan style=\"color:#F97583\"> =\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\">'ved'\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\"> isLikelyAIO\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ved \u003C/span>\u003Cspan style=\"color:#F97583\">&#x26;&#x26;\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    ved.\u003C/span>\u003Cspan style=\"color:#B392F0\">includes\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'2ahUKEw'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">&#x26;&#x26;\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> ved.\u003C/span>\u003Cspan style=\"color:#79B8FF\">length\u003C/span>\u003Cspan style=\"color:#F97583\"> >\u003C/span>\u003Cspan style=\"color:#79B8FF\"> 80\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Pattern observé — à valider sur vos propres données\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\">  if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (isGoogleReferrer \u003C/span>\u003Cspan style=\"color:#F97583\">&#x26;&#x26;\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> isLikelyAIO) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\">    // Envoyer un événement GA4\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    if\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003Cspan style=\"color:#F97583\">typeof\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> gtag \u003C/span>\u003Cspan style=\"color:#F97583\">===\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'function'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">      gtag\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'event'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'aio_click'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        event_category: \u003C/span>\u003Cspan style=\"color:#9ECBFF\">'ai_search'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        event_label: window.location.pathname,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">        page_referrer: referrer,\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\">    // Ou envoyer vers votre propre endpoint analytics\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    navigator.\u003C/span>\u003Cspan style=\"color:#B392F0\">sendBeacon\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#9ECBFF\">'/api/analytics/aio-click'\u003C/span>\u003Cspan style=\"color:#E1E4E8\">, \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\">      path: window.location.pathname,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      timestamp: Date.\u003C/span>\u003Cspan style=\"color:#B392F0\">now\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      referrer: referrer,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">      ved: ved,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">    }));\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">  }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">})();\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Avertissement : cette approche repose sur du reverse engineering des paramètres Google, qui changent régulièrement. C'est fragile par nature. Croisez toujours avec vos données GSC pour valider la cohérence.\u003C/p>\n\u003Ch2>Le scénario concret : un e-commerce de 8 000 produits face aux AIO\u003C/h2>\n\u003Cp>Prenons un cas réaliste. \u003Cstrong>TechDirect\u003C/strong>, un e-commerce français spécialisé en matériel informatique, exploite 8 200 pages produit et 340 guides d'achat. Avant le déploiement massif des AIO en France (Q3 2025), leur trafic organique mensuel était de 420 000 sessions, dont 38% provenait de requêtes informationnelles (\"meilleur écran 4K pour le gaming\", \"différence DDR4 vs DDR5\").\u003C/p>\n\u003Cp>\u003Cstrong>Ce qui s'est passé\u003C/strong> : entre septembre 2025 et janvier 2026, le trafic informationnel a chuté de 23%. Pas de perte de positions classiques — les pages rankaient toujours en P1-P3. Mais les AIO absorbaient le clic.\u003C/p>\n\u003Cp>\u003Cstrong>Le diagnostic\u003C/strong> : en appliquant le framework ci-dessus, l'équipe SEO a découvert :\u003C/p>\n\u003Cul>\n\u003Cli>72% de leurs requêtes informationnelles déclenchaient désormais une AIO\u003C/li>\n\u003Cli>TechDirect était cité comme source dans seulement 31% de ces AIO\u003C/li>\n\u003Cli>Le CTR sur les requêtes avec AIO était de 1,8% contre 5,4% sur les requêtes sans AIO\u003C/li>\n\u003Cli>Mais les requêtes où TechDirect était cité dans l'AIO affichaient un CTR de 6,2% — supérieur au baseline\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Cstrong>La stratégie\u003C/strong> : plutôt que de lutter contre la marée, l'équipe a pivoté vers une optimisation pour la citation dans les AIO. Ils ont restructuré leurs guides d'achat avec des réponses directes, factuelles, dans les 150 premiers mots de chaque page. Ils ont ajouté du balisage structuré plus granulaire. Après 3 mois, leur taux de citation dans les AIO est passé de 31% à 54%, et le trafic informationnel a récupéré 14 des 23 points perdus.\u003C/p>\n\u003Cp>Le point clé : sans le KPI de \"Share of AI Voice\", l'équipe aurait vu une chute de trafic et aurait peut-être conclu à un problème de contenu ou de positionnement. La métrique correcte a permis d'identifier le vrai levier.\u003C/p>\n\u003Ch2>Les KPIs traditionnels à recalibrer\u003C/h2>\n\u003Cp>L'AI Search ne rend pas les KPIs classiques obsolètes — elle impose de les recalibrer.\u003C/p>\n\u003Ch3>Le CTR : segmenter ou mourir\u003C/h3>\n\u003Cp>Le CTR organique global est désormais une métrique polluée. Vous devez le segmenter en trois buckets :\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>CTR sur SERPs sans AIO\u003C/strong> : votre baseline réel, comparable aux données historiques\u003C/li>\n\u003Cli>\u003Cstrong>CTR sur SERPs avec AIO, votre site cité\u003C/strong> : votre performance en contexte IA favorable\u003C/li>\n\u003Cli>\u003Cstrong>CTR sur SERPs avec AIO, votre site non cité\u003C/strong> : le trafic que vous êtes en train de perdre\u003C/li>\n\u003C/ol>\n\u003Cp>Pour obtenir cette segmentation dans un dashboard Looker Studio, croisez vos données GSC (via le filtre \u003Ccode>searchAppearance: AI_OVERVIEW\u003C/code>) avec vos données de scraping SERP. La requête BigQuery ressemble à ceci si vous exportez vos données GSC vers BigQuery :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">WITH\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> aio_queries \u003C/span>\u003Cspan style=\"color:#F97583\">AS\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  SELECT DISTINCT\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> query\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  FROM\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> `project.dataset.searchconsole_data`\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  WHERE\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> search_appearance \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'AI_OVERVIEW'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    AND\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> data_date \u003C/span>\u003Cspan style=\"color:#F97583\">BETWEEN\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '2026-04-01'\u003C/span>\u003Cspan style=\"color:#F97583\"> AND\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '2026-04-30'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">),\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">cited_queries \u003C/span>\u003Cspan style=\"color:#F97583\">AS\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> (\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  SELECT DISTINCT\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> keyword \u003C/span>\u003Cspan style=\"color:#F97583\">AS\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> query\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  FROM\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> `project.dataset.aio_scraping_results`\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  WHERE\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> is_our_domain_cited \u003C/span>\u003Cspan style=\"color:#F97583\">=\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> TRUE\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    AND\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> scrape_date \u003C/span>\u003Cspan style=\"color:#F97583\">BETWEEN\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '2026-04-01'\u003C/span>\u003Cspan style=\"color:#F97583\"> AND\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '2026-04-30'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">SELECT\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  CASE\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    WHEN\u003C/span>\u003Cspan style=\"color:#79B8FF\"> aq\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">query\u003C/span>\u003Cspan style=\"color:#F97583\"> IS\u003C/span>\u003Cspan style=\"color:#F97583\"> NULL\u003C/span>\u003Cspan style=\"color:#F97583\"> THEN\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'no_aio'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    WHEN\u003C/span>\u003Cspan style=\"color:#79B8FF\"> cq\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">query\u003C/span>\u003Cspan style=\"color:#F97583\"> IS NOT NULL\u003C/span>\u003Cspan style=\"color:#F97583\"> THEN\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'aio_cited'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">    ELSE\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> 'aio_not_cited'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  END\u003C/span>\u003Cspan style=\"color:#F97583\"> AS\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> segment,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  AVG\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#79B8FF\">gsc\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">ctr\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">AS\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> avg_ctr,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  SUM\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#79B8FF\">gsc\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">clicks\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">AS\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> total_clicks,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79B8FF\">  SUM\u003C/span>\u003Cspan style=\"color:#E1E4E8\">(\u003C/span>\u003Cspan style=\"color:#79B8FF\">gsc\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">impressions\u003C/span>\u003Cspan style=\"color:#E1E4E8\">) \u003C/span>\u003Cspan style=\"color:#F97583\">AS\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> total_impressions\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">FROM\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> `project.dataset.searchconsole_data`\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> gsc\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">LEFT JOIN\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> aio_queries aq \u003C/span>\u003Cspan style=\"color:#F97583\">ON\u003C/span>\u003Cspan style=\"color:#79B8FF\"> gsc\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">query\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#79B8FF\"> aq\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">query\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">LEFT JOIN\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> cited_queries cq \u003C/span>\u003Cspan style=\"color:#F97583\">ON\u003C/span>\u003Cspan style=\"color:#79B8FF\"> gsc\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">query\u003C/span>\u003Cspan style=\"color:#F97583\"> =\u003C/span>\u003Cspan style=\"color:#79B8FF\"> cq\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">query\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">WHERE\u003C/span>\u003Cspan style=\"color:#79B8FF\"> gsc\u003C/span>\u003Cspan style=\"color:#E1E4E8\">.\u003C/span>\u003Cspan style=\"color:#79B8FF\">data_date\u003C/span>\u003Cspan style=\"color:#F97583\"> BETWEEN\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '2026-04-01'\u003C/span>\u003Cspan style=\"color:#F97583\"> AND\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> '2026-04-30'\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">GROUP BY\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> segment\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">ORDER BY\u003C/span>\u003Cspan style=\"color:#E1E4E8\"> segment;\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch3>Les impressions : distinguer la vanité de la valeur\u003C/h3>\n\u003Cp>Une impression dans une AIO n'a pas la même valeur qu'une impression en position 3 organique. Dans le premier cas, votre marque apparaît dans un contexte de réponse synthétisée — l'utilisateur peut ne jamais voir votre nom. Dans le second, votre title et votre meta description sont affichés en pleine page.\u003C/p>\n\u003Cp>Le KPI pertinent ici est le \u003Cstrong>taux de conversion par impression\u003C/strong> plutôt que le volume brut d'impressions. Si 10 000 impressions AIO génèrent 50 conversions et que 10 000 impressions organiques classiques en génèrent 200, vous savez où concentrer vos efforts.\u003C/p>\n\u003Ch3>Le positionnement : la fin de la \"position 1\"\u003C/h3>\n\u003Cp>Le concept de position 1 perd son sens quand une AIO occupe 400 pixels au-dessus de votre résultat. Ce qui compte désormais, c'est la \u003Cstrong>visibilité effective au-dessus du fold\u003C/strong>. Des outils comme Screaming Frog, combinés avec des captures de SERP automatisées (via Puppeteer ou Playwright), permettent de mesurer le \u003Cstrong>pixel rank\u003C/strong> — la position en pixels de votre premier résultat visible par rapport au haut de la viewport.\u003C/p>\n\u003Cp>Screaming Frog permet d'exporter les SERP features détectées pour chaque mot-clé via son mode SERP. Combiné avec un script de capture, vous pouvez construire une base de données de l'évolution du pixel rank dans le temps.\u003C/p>\n\u003Ch2>Ce que les LLMs ne mesurent pas (et pourquoi c'est un problème)\u003C/h2>\n\u003Cp>Un angle rarement abordé : l'AI Search ne se limite plus à Google. ChatGPT, Perplexity, Claude, Gemini — chacun de ces systèmes peut citer votre contenu comme source. Et aucun d'entre eux ne vous fournit de données de performance.\u003C/p>\n\u003Cp>Perplexity affiche les sources, mais ne vous envoie pas de trafic avec un referrer traçable de manière fiable. ChatGPT avec navigation web peut visiter votre page, extraire l'information, et la restituer à l'utilisateur sans jamais générer un clic dans vos analytics.\u003C/p>\n\u003Cp>Le KPI émergent ici est le \u003Cstrong>Brand Mention Rate\u003C/strong> dans les réponses LLM. Vous pouvez le mesurer en exécutant régulièrement des prompts liés à votre domaine d'expertise sur les principaux LLMs et en comptant la fréquence à laquelle votre marque est mentionnée ou votre contenu est cité. C'est l'approche détaillée dans les \u003Ca href=\"/blog/how-to-run-prompt-level-seo-experiments-for-ai-search\">expérimentations au niveau du prompt\u003C/a>.\u003C/p>\n\u003Cp>Ce monitoring est fastidieux manuellement. C'est exactement le type de tâche où un outil de monitoring automatisé comme Seogard prend tout son sens — détecter les variations de citations, les disparitions de mentions, les régressions dans la visibilité IA de manière continue plutôt que ponctuelle.\u003C/p>\n\u003Ch2>L'audit technique adapté à l'AI Search\u003C/h2>\n\u003Cp>Vos pages doivent être techniquement irréprochables pour être sélectionnées comme sources par les systèmes d'IA. Les critères vont au-delà du SEO classique.\u003C/p>\n\u003Ch3>Le SSR comme prérequis absolu\u003C/h3>\n\u003Cp>Les AI Overviews et les systèmes de grounding de Bing (qui alimente Copilot) \u003Ca href=\"/blog/bing-reveals-what-grounding-means-for-ai-search-visibility-via-sejournal-slobodanmanic\">ont des exigences spécifiques\u003C/a> sur l'accessibilité du contenu. Un SPA React qui rend son contenu côté client a peu de chances d'être cité. Le contenu doit être dans le HTML initial.\u003C/p>\n\u003Cp>Vérifiez avec un \u003Ccode>curl\u003C/code> simple :\u003C/p>\n\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Vérifier que le contenu principal est dans le HTML initial (SSR)\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">curl\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -s\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -A\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"Mozilla/5.0 (compatible; Googlebot/2.1)\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">  \"https://techdirect.fr/guides/meilleur-ecran-4k-gaming\"\u003C/span>\u003Cspan style=\"color:#79B8FF\"> \\\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  |\u003C/span>\u003Cspan style=\"color:#B392F0\"> grep\u003C/span>\u003Cspan style=\"color:#79B8FF\"> -c\u003C/span>\u003Cspan style=\"color:#9ECBFF\"> \"DDR5\\|temps de réponse\\|taux de rafraîchissement\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># Si le count est 0, votre contenu est rendu côté client\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D\"># et probablement invisible pour les systèmes d'IA\u003C/span>\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>Les \u003Ca href=\"/blog/5-javascript-seo-lessons-from-top-ecommerce-sites\">leçons de JavaScript SEO sur les sites e-commerce\u003C/a> s'appliquent doublement dans le contexte de l'AI Search. Un contenu invisible au premier rendu est un contenu inexistant pour les LLMs qui grounding leurs réponses.\u003C/p>\n\u003Ch3>Le balisage structuré comme signal de confiance\u003C/h3>\n\u003Cp>Les systèmes d'IA privilégient le contenu structuré, vérifiable, attribuable. Le schema markup n'est plus seulement un levier pour les rich results (d'autant que Google \u003Ca href=\"/blog/google-drops-faq-rich-results-from-search-via-sejournal-mattgsouthern\">a retiré les FAQ rich results\u003C/a>) — il sert de signal de confiance pour les systèmes de grounding.\u003C/p>\n\u003Cp>Assurez-vous au minimum d'implémenter :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ccode>Article\u003C/code> ou \u003Ccode>TechArticle\u003C/code> avec \u003Ccode>dateModified\u003C/code> à jour\u003C/li>\n\u003Cli>\u003Ccode>author\u003C/code> avec un lien vers une page auteur qui elle-même a un schema \u003Ccode>Person\u003C/code>\u003C/li>\n\u003Cli>\u003Ccode>citation\u003C/code> pour toute donnée sourcée\u003C/li>\n\u003Cli>\u003Ccode>speakable\u003C/code> pour les portions de contenu que vous voulez voir reprises vocalement\u003C/li>\n\u003C/ul>\n\u003Ch3>Le crawl des agents IA\u003C/h3>\n\u003Cp>Un nouveau type de visiteur apparaît : les agents IA qui \u003Ca href=\"/blog/google-agent-the-web-s-new-visitor-just-got-an-identity-via-sejournal-slobodanmanic\">crawlent votre site\u003C/a> pour alimenter leurs réponses. Vérifiez vos logs serveur pour les user-agents comme \u003Ccode>ChatGPT-User\u003C/code>, \u003Ccode>PerplexityBot\u003C/code>, \u003Ccode>ClaudeBot\u003C/code>, \u003Ccode>Google-Extended\u003C/code>. Si vous les bloquez dans votre robots.txt, vous disparaissez de ces systèmes.\u003C/p>\n\u003Cp>Le KPI associé : le volume de crawl par agent IA, mesuré via l'analyse de logs. Une baisse soudaine du crawl par \u003Ccode>PerplexityBot\u003C/code> peut indiquer un problème technique (erreurs 5xx, timeout) avant même que vous ne constatiez une baisse de citations.\u003C/p>\n\u003Ch2>La couche de monitoring manquante\u003C/h2>\n\u003Cp>Le problème fondamental de la mesure en AI Search, c'est que chaque métrique décrite ci-dessus provient d'une source différente : GSC pour les impressions, scraping SERP pour la présence AIO, logs serveur pour le crawl des agents, prompts manuels pour le Brand Mention Rate, GA4 pour l'attribution.\u003C/p>\n\u003Cp>Sans consolidation, vous passez votre temps à croiser des fichiers Excel au lieu d'analyser des tendances. L'approche la plus résiliente — et celle que les équipes \u003Ca href=\"/blog/the-tech-seo-audit-for-the-ai-search-era-how-to-maximize-your-ai-visibility-via-sejournal-jetoctopus\">d'audit technique pour l'ère AI Search\u003C/a> recommandent — consiste à centraliser ces signaux dans un pipeline automatisé.\u003C/p>\n\u003Cp>Le pipeline idéal :\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>Extraction quotidienne\u003C/strong> des données GSC via l'API (avec filtre AIO)\u003C/li>\n\u003Cli>\u003Cstrong>Scraping hebdomadaire\u003C/strong> des SERPs pour vos top 500 mots-clés (présence AIO + domaines cités)\u003C/li>\n\u003Cli>\u003Cstrong>Analyse de logs\u003C/strong> continue pour les user-agents IA\u003C/li>\n\u003Cli>\u003Cstrong>Prompting mensuel\u003C/strong> des LLMs sur 50 requêtes stratégiques\u003C/li>\n\u003Cli>\u003Cstrong>Consolidation\u003C/strong> dans un dashboard unique avec alertes sur les variations significatives\u003C/li>\n\u003C/ol>\n\u003Cp>Seogard adresse une partie de cette problématique en détectant automatiquement les régressions techniques (meta disparues, SSR cassé, erreurs de crawl) qui pourraient vous faire perdre votre éligibilité comme source IA — mais la couche de mesure de visibilité IA reste un chantier ouvert pour l'ensemble de l'industrie.\u003C/p>\n\u003Ch2>Les limites de toute approche de mesure actuelle\u003C/h2>\n\u003Cp>Soyons honnêtes sur les trade-offs. Chaque méthode décrite dans cet article a des failles :\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Le scraping SERP\u003C/strong> est fragile face aux changements de layout Google et potentiellement en violation des ToS\u003C/li>\n\u003Cli>\u003Cstrong>L'analyse de logs\u003C/strong> ne capture que les crawls, pas l'utilisation effective de votre contenu dans les réponses\u003C/li>\n\u003Cli>\u003Cstrong>Le Brand Mention Rate via prompting\u003C/strong> dépend de la variabilité des réponses LLM (le même prompt peut donner des résultats différents)\u003C/li>\n\u003Cli>\u003Cstrong>Le filtre AIO de la GSC\u003C/strong> mélange les impressions où vous êtes cité et celles où vous êtes simplement présent dans la SERP qui contient une AIO\u003C/li>\n\u003C/ul>\n\u003Cp>Aucune de ces métriques, prise isolément, ne raconte l'histoire complète. C'est leur combinaison et leur suivi dans le temps qui révèle les tendances actionnables. Le SEO qui attend la métrique parfaite ne mesure rien. Le SEO qui triangule des signaux imparfaits prend des décisions éclairées.\u003C/p>\n\u003Cp>L'AI Search est un problème de visibilité à \u003Ca href=\"/blog/stop-treating-ai-visibility-as-one-problem-it-s-actually-three-on-three-different-layers-via-sejournal-duaneforrester\">trois couches distinctes\u003C/a> : la couche technique (votre contenu est-il crawlable et structuré ?), la couche éditoriale (votre contenu est-il la meilleure source disponible ?), et la couche de mesure (pouvez-vous prouver ce qui fonctionne ?). Les deux premières sont matures. La troisième est le chantier de 2026. Commencez à instrumenter dès maintenant — ceux qui auront 6 mois de données historiques quand Google ouvrira enfin le robinet des métriques AIO auront un avantage décisif.\u003C/p>\n\u003Cpre>\u003Ccode>\u003C/code>\u003C/pre>",null,12,[18,19,20,21,22],"AI Search","KPIs","mesure SEO","AI Overviews","Search Console","Mesurer l'AI Search : les KPIs techniques qui comptent en 2026","Mon May 18 2026 06:02:54 GMT+0000 (Coordinated Universal Time)",[26,41,55],{"_id":27,"slug":28,"__v":6,"author":7,"canonical":29,"category":10,"createdAt":30,"date":31,"description":32,"image":15,"imageAlt":15,"readingTime":16,"tags":33,"title":39,"updatedAt":40},"6a0d4ea4aa6b273b0cde629a","reasoning-lift-what-happens-to-brand-visibility-when-ai-thinks-harder","https://seogard.io/blog/reasoning-lift-what-happens-to-brand-visibility-when-ai-thinks-harder","2026-05-20T06:03:16.188Z","2026-05-20","Analyse technique de 200 réponses GPT-5.2 : le raisonnement élevé cite plus de sources, favorise le haut de funnel et redéfinit la visibilité de marque.",[34,35,36,37,38],"reasoning lift","AI search","brand visibility","GEO","LLM","Reasoning lift : impact du raisonnement IA sur la visibilité des marques","Wed May 20 2026 06:03:16 GMT+0000 (Coordinated Universal Time)",{"_id":42,"slug":43,"__v":6,"author":7,"canonical":44,"category":10,"createdAt":45,"date":31,"description":46,"image":15,"imageAlt":15,"readingTime":16,"tags":47,"title":53,"updatedAt":54},"6a0d86d3aa6b273b0c0cbec7","google-brings-ai-content-verification-to-search-via-sejournal-mattgsouthern","https://seogard.io/blog/google-brings-ai-content-verification-to-search-via-sejournal-mattgsouthern","2026-05-20T10:02:59.955Z","Google intègre SynthID à Search pour vérifier le contenu IA. Analyse technique des watermarks, impact sur le crawl et stratégies SEO concrètes.",[48,49,50,51,52],"google","synthid","ai content verification","search","seo technique","SynthID dans Search : impact technique sur le SEO","Wed May 20 2026 10:02:59 GMT+0000 (Coordinated Universal Time)",{"_id":56,"slug":57,"__v":6,"author":7,"canonical":58,"category":10,"createdAt":59,"date":31,"description":60,"image":15,"imageAlt":15,"readingTime":16,"tags":61,"title":66,"updatedAt":67},"6a0df755aa6b273b0c69952f","google-s-llms-txt-guidance-depends-on-which-product-you-ask-via-sejournal-mattgsouthern","https://seogard.io/blog/google-s-llms-txt-guidance-depends-on-which-product-you-ask-via-sejournal-mattgsouthern","2026-05-20T18:03:01.922Z","Google Search ignore llms.txt, mais Lighthouse l'audite pour l'agentic browsing. Analyse technique des contradictions et guide d'implémentation.",[62,63,64,18,65],"llms.txt","agentic browsing","Lighthouse","Google","llms.txt : Google Search et Lighthouse se contredisent","Wed May 20 2026 18:03:01 GMT+0000 (Coordinated Universal Time)"]