Tracker sa visibilité IA : méthodes techniques concrètes

Un e-commerce beauté de 12 000 pages a perdu 18 % de son trafic organique en six mois sans aucune baisse de positions sur Google. Le coupable : les AI Overviews captaient les clics sur ses 200 requêtes les plus rentables, et les réponses de ChatGPT citaient systématiquement deux concurrents — jamais cette marque. Personne dans l'équipe SEO ne monitorait la visibilité IA. Quand ils s'en sont rendu compte, le manque à gagner dépassait les 400 K€.

Le tracking de la visibilité dans les moteurs de réponse IA n'est plus un "nice to have". C'est un canal d'acquisition à part entière qui demande ses propres méthodes de mesure, ses propres KPIs, et ses propres outils. Voici comment structurer ce monitoring de manière technique et reproductible.

Pourquoi le tracking SEO classique ne capture pas la visibilité IA

Le ranking tracking traditionnel interroge les SERPs Google pour une liste de mots-clés et vous retourne une position. Ce modèle repose sur un postulat simple : une requête = une liste de 10 liens bleus. Ce postulat est obsolète.

Trois surfaces distinctes, trois logiques différentes

La visibilité IA se joue sur au moins trois surfaces qui n'obéissent pas aux mêmes règles :

AI Overviews (Google) — Un bloc généré par Gemini, injecté directement dans la SERP. Il cite des sources, mais le lien n'est plus le mécanisme principal d'accès. Selon une analyse partagée par Search Engine Journal, les AI Overviews réduisent les clics de 42 % sur les requêtes concernées.

ChatGPT / SearchGPT — Un modèle conversationnel qui peut citer des URLs, mais dont le comportement de citation varie radicalement selon la formulation du prompt. Seulement 15 % des pages récupérées par ChatGPT apparaissent dans les réponses finales.

Perplexity, Gemini, Claude — Chaque moteur IA a sa propre logique de retrieval, ses propres biais de sources, et son propre format de citation.

Un outil de rank tracking classique comme SEMrush ou Ahrefs ne vous dit rien sur ces trois surfaces. Vous avez besoin d'une couche de monitoring dédiée.

Ce que vous perdez sans ce tracking

Sans visibilité sur les réponses IA, vous ne savez pas :

  • Quels prompts utilisateurs déclenchent une mention de votre marque (ou de vos concurrents)
  • Si vos pages sont récupérées mais non citées dans la réponse finale
  • Si un changement de contenu côté concurrent a déplacé vos citations
  • Quel pourcentage de vos requêtes cibles est couvert par un AI Overview

C'est l'équivalent de ne pas avoir de Search Console en 2012. Vous volez à l'aveugle sur un canal qui absorbe une part croissante du trafic informationnel.

Construire une base de prompts à monitorer

Le concept de "prompt research" est l'équivalent IA de la keyword research. L'idée de construire une stratégie de prompt research comme nouvelle couche SEO/GEO est fondamentale pour structurer votre tracking.

Du mot-clé au prompt : la transformation nécessaire

Un mot-clé comme meilleure crème hydratante peau sensible se décline en dizaines de formulations naturelles qu'un utilisateur tape dans ChatGPT :

  • "Quelle est la meilleure crème hydratante pour peau sensible ?"
  • "Recommande-moi une crème hydratante sans parfum pour peau réactive"
  • "Compare CeraVe et La Roche-Posay pour la peau sensible"
  • "Je cherche une crème hydratante bio, peau atopique, moins de 30€"

Chacun de ces prompts peut générer une réponse radicalement différente, avec des sources différentes. Votre tracking doit couvrir cette variabilité.

Script de génération de prompts à partir de vos mots-clés

Voici un script TypeScript qui transforme une liste de mots-clés en variations de prompts exploitables pour le monitoring :

interface PromptVariation {
  keyword: string;
  prompt: string;
  intent: "informational" | "comparative" | "transactional" | "recommendation";
  platform: "chatgpt" | "perplexity" | "gemini" | "ai_overview";
}

const PROMPT_TEMPLATES: Record<string, string[]> = {
  informational: [
    "Qu'est-ce que {keyword} ?",
    "Explique-moi {keyword} en détail",
    "Comment fonctionne {keyword} ?",
  ],
  comparative: [
    "Compare les meilleures options pour {keyword}",
    "Quelles sont les alternatives pour {keyword} ?",
    "{keyword} : quel est le meilleur choix en 2026 ?",
  ],
  transactional: [
    "Où acheter {keyword} au meilleur prix ?",
    "Recommande-moi {keyword} avec le meilleur rapport qualité-prix",
  ],
  recommendation: [
    "Quel {keyword} recommandes-tu ?",
    "Top 5 {keyword} selon les experts",
    "Meilleur {keyword} pour un débutant",
  ],
};

function generatePromptVariations(
  keywords: string[],
  platforms: PromptVariation["platform"][]
): PromptVariation[] {
  const variations: PromptVariation[] = [];

  for (const keyword of keywords) {
    for (const [intent, templates] of Object.entries(PROMPT_TEMPLATES)) {
      for (const template of templates) {
        for (const platform of platforms) {
          variations.push({
            keyword,
            prompt: template.replace("{keyword}", keyword),
            intent: intent as PromptVariation["intent"],
            platform,
          });
        }
      }
    }
  }

  return variations;
}

// Exemple : e-commerce beauté, 50 keywords prioritaires
const keywords = [
  "crème hydratante peau sensible",
  "sérum vitamine C visage",
  "huile démaquillante bio",
  // ... 47 autres mots-clés
];

const allPrompts = generatePromptVariations(keywords, [
  "chatgpt",
  "perplexity",
  "ai_overview",
]);

console.log(`Prompts générés : ${allPrompts.length}`);
// Pour 50 keywords × 11 templates × 3 plateformes = 1 650 prompts

Ce script produit votre matrice de monitoring. 50 mots-clés génèrent 1 650 combinaisons prompt × plateforme à tracker. C'est un volume gérable en automatisation, mais ingérable manuellement.

Prioriser les prompts par valeur business

Tous les prompts ne méritent pas le même effort. Croisez vos données Search Console avec vos marges produit pour prioriser :

interface PrioritizedPrompt extends PromptVariation {
  monthlySearchVolume: number;
  averageOrderValue: number;
  priorityScore: number;
}

function prioritizePrompts(
  prompts: PromptVariation[],
  gscData: Map<string, { clicks: number; impressions: number }>,
  productData: Map<string, { aov: number }>
): PrioritizedPrompt[] {
  return prompts
    .map((prompt) => {
      const searchData = gscData.get(prompt.keyword) || {
        clicks: 0,
        impressions: 0,
      };
      const product = productData.get(prompt.keyword) || { aov: 0 };

      return {
        ...prompt,
        monthlySearchVolume: searchData.impressions,
        averageOrderValue: product.aov,
        // Score composite : volume × valeur × bonus intent transactionnel
        priorityScore:
          searchData.impressions *
          product.aov *
          (prompt.intent === "transactional" ? 2.0 :
           prompt.intent === "recommendation" ? 1.5 : 1.0),
      };
    })
    .sort((a, b) => b.priorityScore - a.priorityScore);
}

Concentrez vos 200 premiers prompts sur les requêtes à forte valeur. C'est là que la perte de visibilité IA fait le plus mal financièrement.

Méthodes techniques pour tracker les réponses IA

Approche 1 : API ChatGPT avec extraction de citations

L'API d'OpenAI (modèle GPT-4 avec browsing activé via les plugins ou via l'API Responses) permet d'interroger programmatiquement et d'analyser les réponses. Le point critique : extraire les URLs citées et vérifier si votre domaine apparaît.

import OpenAI from "openai";

interface AIVisibilityResult {
  prompt: string;
  response: string;
  citedUrls: string[];
  brandMentioned: boolean;
  competitorsMentioned: string[];
  timestamp: string;
}

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

async function checkAIVisibility(
  prompt: string,
  brandDomain: string,
  competitorDomains: string[]
): Promise<AIVisibilityResult> {
  const completion = await openai.chat.completions.create({
    model: "gpt-4o",
    messages: [
      {
        role: "system",
        content:
          "Réponds de manière détaillée et cite tes sources avec des URLs quand c'est possible.",
      },
      { role: "user", content: prompt },
    ],
    temperature: 0.3, // Réduire la variabilité pour des résultats comparables
  });

  const response = completion.choices[0]?.message?.content || "";

  // Extraction des URLs par regex
  const urlRegex = /https?:\/\/[^\s\)>\]"']+/g;
  const citedUrls = [...new Set(response.match(urlRegex) || [])];

  // Vérification de présence de la marque
  const brandMentioned = citedUrls.some((url) =>
    url.includes(brandDomain)
  ) || response.toLowerCase().includes(brandDomain);

  // Détection des concurrents cités
  const competitorsMentioned = competitorDomains.filter(
    (domain) =>
      citedUrls.some((url) => url.includes(domain)) ||
      response.toLowerCase().includes(domain)
  );

  return {
    prompt,
    response,
    citedUrls,
    brandMentioned,
    competitorsMentioned,
    timestamp: new Date().toISOString(),
  };
}

// Exécution batch sur votre matrice de prompts
async function runVisibilityAudit(
  prompts: string[],
  brandDomain: string,
  competitors: string[]
) {
  const results: AIVisibilityResult[] = [];

  for (const prompt of prompts) {
    const result = await checkAIVisibility(prompt, brandDomain, competitors);
    results.push(result);

    // Rate limiting - respectez les quotas API
    await new Promise((resolve) => setTimeout(resolve, 2000));
  }

  // Métriques agrégées
  const totalPrompts = results.length;
  const brandVisible = results.filter((r) => r.brandMentioned).length;
  const visibilityRate = ((brandVisible / totalPrompts) * 100).toFixed(1);

  console.log(`AI Visibility Rate: ${visibilityRate}%`);
  console.log(`Brand cited in ${brandVisible}/${totalPrompts} prompts`);

  // Top concurrents par fréquence de citation
  const competitorFrequency = new Map<string, number>();
  for (const result of results) {
    for (const comp of result.competitorsMentioned) {
      competitorFrequency.set(comp, (competitorFrequency.get(comp) || 0) + 1);
    }
  }

  return { results, visibilityRate, competitorFrequency };
}

Limites de cette approche : l'API sans browsing ne cite pas d'URLs de la même manière que l'interface web de ChatGPT. Les résultats diffèrent. C'est un proxy, pas une réplique exacte de l'expérience utilisateur. Utilisez-le pour détecter les tendances et les variations dans le temps, pas comme une mesure absolue.

Approche 2 : Scraping des AI Overviews dans les SERPs

Les AI Overviews de Google sont du HTML classique injecté dans la SERP. Vous pouvez les détecter via des outils de SERP analysis ou en parsant les résultats vous-mêmes.

Avec un outil comme SerpAPI ou un scraper custom, identifiez les requêtes qui déclenchent un AI Overview et analysez les sources citées :

# Exemple avec requests + parsing HTML
# À exécuter derrière un proxy pour éviter les blocages Google

import json
import re
from datetime import datetime

def analyze_serp_for_aio(serp_html: str, brand_domain: str) -> dict:
    """
    Parse une SERP Google pour détecter la présence d'un AI Overview
    et analyser les sources citées.
    """
    has_aio = False
    aio_sources = []

    # Détection du conteneur AI Overview
    # Le sélecteur varie - Google change fréquemment le markup
    aio_markers = [
        'data-attrid="ai_overview"',
        'class="UuBKpb"',  # Classe observée en mars 2026
        'data-hveid',       # Conteneur générique, filtrer par contexte
    ]

    for marker in aio_markers:
        if marker in serp_html:
            has_aio = True
            break

    if has_aio:
        # Extraction des liens dans le bloc AIO
        # Pattern : liens dans les cartes de sources
        source_pattern = r'<a[^>]*href="(https?://[^"]+)"[^>]*class="[^"]*source[^"]*"'
        aio_sources = list(set(re.findall(source_pattern, serp_html)))

    brand_cited_in_aio = any(brand_domain in url for url in aio_sources)

    return {
        "has_ai_overview": has_aio,
        "aio_sources": aio_sources,
        "brand_in_aio": brand_cited_in_aio,
        "checked_at": datetime.utcnow().isoformat()
    }

Attention : le markup des AI Overviews change régulièrement. Les sélecteurs CSS ci-dessus sont illustratifs. Maintenez vos parsers comme vous maintenez des tests e2e — ils casseront, c'est une certitude.

Approche 3 : Monitoring Perplexity via son API

Perplexity expose une API qui retourne les sources utilisées pour générer chaque réponse. C'est la plateforme la plus transparente pour le tracking de citations :

curl -X POST "https://api.perplexity.ai/chat/completions" \
  -H "Authorization: Bearer $PERPLEXITY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sonar",
    "messages": [
      {
        "role": "user",
        "content": "Quelle est la meilleure crème hydratante pour peau sensible en 2026 ?"
      }
    ],
    "return_citations": true
  }'

La réponse inclut un champ citations avec les URLs exactes utilisées. C'est le signal le plus fiable pour mesurer votre visibilité sur Perplexity.

Scénario concret : un media de 8 000 pages qui déploie le tracking IA

Prenons un site média tech de 8 000 articles, avec 350 000 visites mensuelles organiques. L'équipe SEO (3 personnes) constate une érosion de 12 % du trafic sur les contenus informationnels en 6 mois, malgré des positions stables.

Phase 1 : Audit initial (semaine 1-2)

L'équipe exporte ses 500 requêtes les plus lucratives depuis Search Console (filtre CTR > 2 %, impressions > 1 000/mois). L'API URL Inspection leur permet de vérifier en batch que ces 500 pages sont correctement indexées — pas de régression technique.

Avec le script de génération de prompts, ils créent 2 750 variations (500 keywords × 5-6 templates) et lancent un premier audit via l'API ChatGPT et Perplexity.

Résultats :

  • Visibilité ChatGPT : 14 % (le domaine est cité dans 70 prompts sur 500 keywords)
  • Visibilité Perplexity : 22 % (110 prompts sur 500)
  • AI Overviews déclenchés : 38 % de leurs requêtes cibles (190 sur 500)
  • Parmi ces 190 AI Overviews, le site est cité comme source dans 31 cas (16 %)

Le concurrent principal est cité dans 41 % des AI Overviews. L'écart est significatif.

Phase 2 : Diagnostic des causes (semaine 3)

L'équipe croise les données :

  • Les pages citées par les moteurs IA ont toutes un schema Article correctement implémenté avec author, datePublished, et dateModified à jour.
  • Les pages non citées ont des dates de modification obsolètes (> 12 mois) et pas de données structurées author.
  • Les concurrents cités utilisent systématiquement des données structurées JSON-LD plus riches, avec des FAQPage et des HowTo.

L'analyse révèle aussi que les pages en rendu client-side (CSR) sont systématiquement absentes des citations IA. Les moteurs de retrieval IA dépendent du HTML servi, exactement comme Googlebot. Les 800 pages rendues côté client via un ancien composant React ne sont jamais citées.

Phase 3 : Actions correctives (semaine 4-8)

  1. Migration SSR des 800 pages CSR — passage en Next.js avec SSR pour garantir que le contenu est dans le HTML initial
  2. Enrichissement schema — ajout de FAQPage sur les 200 articles les plus importants, via le guide FAQ schema
  3. Mise à jour des dates — révision et republication des 150 articles stratégiques avec contenu actualisé
  4. Renforcement de l'entity authority — travail sur les signaux d'autorité d'entité (bio auteurs enrichies, backlinks contextuels, mentions de marque)

Phase 4 : Résultats à 3 mois

Après 12 semaines, un second audit sur les mêmes prompts montre :

  • Visibilité ChatGPT : 14 % → 29 %
  • Visibilité Perplexity : 22 % → 38 %
  • Citation dans les AI Overviews : 16 % → 27 %
  • Trafic organique : stabilisation puis reprise de +7 % (après -12 % le semestre précédent)

Le monitoring continu, lancé en cron job hebdomadaire, détecte deux régressions dans les semaines suivantes : un déploiement front qui casse le SSR sur 40 pages, et une mise à jour de schema qui introduit des erreurs de validation. Un outil de monitoring comme Seogard détecte ce type de régression technique en temps réel, avant qu'elle ne se traduise par une perte de citations IA.

Métriques à suivre et dashboarding

Le tracking IA nécessite ses propres KPIs. Voici la structure de dashboard recommandée.

KPIs primaires

  • AI Visibility Rate (AVR) : pourcentage de vos prompts cibles où votre domaine est cité. Décliné par plateforme (ChatGPT, Perplexity, AI Overviews).
  • Citation Share : votre part de citations vs concurrents sur un même set de prompts. Équivalent IA du "share of voice".
  • AIO Trigger Rate : pourcentage de vos requêtes cibles qui déclenchent un AI Overview. Indicateur de risque d'érosion du trafic classique.

KPIs secondaires

  • Citation Position : dans les réponses multi-sources, êtes-vous la première source citée ou la cinquième ? La position dans la réponse IA impacte le clic.
  • Prompt Sentiment : quand votre marque est mentionnée, le contexte est-il positif, neutre, ou négatif ?
  • Response Stability : pour un même prompt relancé à 7 jours d'intervalle, votre citation est-elle stable ? Une forte instabilité indique une position fragile.

Automatisation du reporting

Centralisez tout dans un pipeline qui tourne en cron :

#!/bin/bash
# ai-visibility-weekly.sh
# Exécuté chaque lundi à 6h via crontab

TIMESTAMP=$(date +%Y-%m-%d)
OUTPUT_DIR="/data/ai-visibility/${TIMESTAMP}"
mkdir -p "${OUTPUT_DIR}"

# 1. Exécuter l'audit ChatGPT
node /scripts/chatgpt-audit.js \
  --prompts /config/priority-prompts.json \
  --brand "mondomaine.fr" \
  --competitors "concurrent1.fr,concurrent2.com" \
  --output "${OUTPUT_DIR}/chatgpt-results.json"

# 2. Exécuter l'audit Perplexity
node /scripts/perplexity-audit.js \
  --prompts /config/priority-prompts.json \
  --brand "mondomaine.fr" \
  --output "${OUTPUT_DIR}/perplexity-results.json"

# 3. Scraper les AI Overviews pour les top 200 keywords
python3 /scripts/aio-scraper.py \
  --keywords /config/top-200-keywords.csv \
  --output "${OUTPUT_DIR}/aio-results.json"

# 4. Générer le rapport consolidé
node /scripts/generate-report.js \
  --chatgpt "${OUTPUT_DIR}/chatgpt-results.json" \
  --perplexity "${OUTPUT_DIR}/perplexity-results.json" \
  --aio "${OUTPUT_DIR}/aio-results.json" \
  --previous "/data/ai-visibility/$(date -d '7 days ago' +%Y-%m-%d)/report.json" \
  --output "${OUTPUT_DIR}/report.json"

# 5. Envoyer l'alerte Slack si variation > 5%
node /scripts/slack-alert.js \
  --report "${OUTPUT_DIR}/report.json" \
  --threshold 5

echo "AI Visibility audit completed: ${TIMESTAMP}"

Le flag --previous est crucial : c'est la comparaison semaine par semaine qui révèle les tendances. Une chute de 5 points de visibilité ChatGPT sur une semaine mérite une investigation immédiate — souvent un concurrent qui a publié un contenu plus frais, ou une régression technique de votre côté.

Les facteurs techniques qui influencent la citation par les moteurs IA

Tracker la visibilité IA sans comprendre ce qui la détermine, c'est mesurer un symptôme sans chercher la cause. Voici les leviers techniques documentés.

Crawlabilité par les bots IA

Les moteurs IA envoient leurs propres crawlers. Google utilise Googlebot (le même que pour l'indexation classique), mais ChatGPT utilise ChatGPT-User et GPTBot, Perplexity utilise PerplexityBot. Google a confirmé déployer des centaines de crawlers non documentés, ce qui complique le tableau.

Vérifiez que votre robots.txt n'exclut pas ces bots :

# robots.txt - Configuration recommandée pour la visibilité IA
User-agent: GPTBot
Allow: /blog/
Allow: /guides/
Disallow: /compte/
Disallow: /panier/

User-agent: ChatGPT-User
Allow: /blog/
Allow: /guides/
Disallow: /compte/

User-agent: PerplexityBot
Allow: /
Disallow: /compte/
Disallow: /api/

# Ne bloquez PAS ces bots globalement sauf stratégie délibérée
# Un Disallow: / pour GPTBot = invisibilité totale dans ChatGPT

Qualité du HTML servi

Les systèmes de retrieval IA fonctionnent par extraction de texte à partir du HTML. Un rendu JavaScript côté client rend cette extraction difficile ou impossible pour la plupart des crawlers IA. Le contenu doit être dans le HTML initial — c'est la raison pour laquelle les architectures SSR dominent les citations IA.

Les SPA classiques sont particulièrement pénalisées. Si votre contenu clé est chargé via des appels API côté client, il n'existe pas pour GPTBot.

Fraîcheur et signaux de confiance

Les moteurs IA privilégient le contenu récent et les sources faisant autorité. Le dateModified dans votre schema Article est un signal direct. Un article modifié il y a 3 semaines sera préféré à un article identique modifié il y a 18 mois.

Attention toutefois : modifier dateModified sans modification substantielle du contenu est un signal négatif. Google détecte les mises à jour cosmétiques depuis longtemps. Il est raisonnable de penser que les systèmes de retrieval IA appliquent des filtres similaires.

Structured data et entity signals

Les données structurées ne sont pas un facteur de ranking direct confirmé par Google, mais elles facilitent l'extraction d'entités par les systèmes IA. Un article avec un author lié à un profil riche en publications, un publisher bien identifié, et un BreadcrumbList clair donne aux modèles IA plus de signaux pour évaluer la fiabilité de la source.

Le travail sur l'autorité d'entité est probablement le levier le plus sous-estimé. Les moteurs IA ne cherchent pas juste "la meilleure page sur le sujet" — ils cherchent la source la plus fiable sur le sujet. Construire cette fiabilité perçue passe par des mentions cohérentes de votre marque et de vos auteurs à travers le web.

Les limites actuelles du tracking IA (et comment les gérer)

Non-déterminisme des réponses

Un même prompt soumis deux fois à ChatGPT peut produire des réponses différentes avec des sources différentes. Le paramètre temperature de l'API atténue ce problème, mais ne l'élimine pas. En production, lancez chaque prompt 3 fois et comptez la fréquence de citation plutôt que la présence binaire.

Évolution rapide des interfaces

Google modifie le format des AI Overviews toutes les quelques semaines. Les sélecteurs CSS changent, les cartes de sources sont réorganisées, de nouveaux formats apparaissent. Tout scraping SERP nécessite une maintenance active. Les tactiques SEO superficielles qui fonctionnent aujourd'hui peuvent disparaître demain — le monitoring technique rigoureux est la seule approche durable.

Coût des API

À 200 prompts × 3 plateformes × 3 exécutions × 4 fois par mois, vous atteignez 7 200 appels API mensuels. Avec les tarifs GPT-4o (~$2.50/M input tokens, ~$10/M output tokens), le budget reste modeste (< 50 $/mois). Perplexity facture son API séparément. Budgétez 100-200 $/mois pour un monitoring sérieux. C'est une fraction du budget que vous dépensez en outils SEO classiques.

Les citations divergent des rankings classiques

Un point soulevé dans l'analyse des citations AIO qui divergent des rankings : être premier sur Google ne garantit pas d'être cité dans l'AI Overview. Les systèmes de retrieval IA évaluent la pertinence différemment de l'algorithme de ranking classique. C'est une raison de plus pour tracker les deux métriques séparément.

Ce tracking ne fonctionne que s'il est continu

Un

Articles connexes

Actualités SEO28 mars 2026

Core Update Mars 2026 : analyse technique et plan d'action

Google déploie la March 2026 Core Update. Analyse technique, scénarios d'impact concrets et méthodologie de diagnostic pour les équipes SEO.

Actualités SEO27 mars 2026

Page Speed : transformer un site lent en machine de course

Guide technique avancé pour optimiser la vitesse de chargement : poids, puissance serveur, navigation du critical path. Code, configs et scénarios réels.

Actualités SEO26 mars 2026

Écrire pour l'IA search : playbook technique du contenu machine-readable

Structurez votre contenu pour que les LLMs l'extraient et le citent. Code, schémas, configs et scénarios concrets pour l'AI search.