Une marque citée dans 80 % des réponses de ChatGPT, mais absente de Gemini et Perplexity sur les mêmes requêtes. Le dashboard agrégé affiche un score de visibilité AI de 72 %. Tout va bien, sauf que deux tiers du trafic potentiel n'existent pas. C'est le Consensus Gap — le concept introduit par Kevin Indig dans Search Engine Journal — et il change la façon dont il faut mesurer la visibilité en AI Search.
Ce que le Consensus Gap révèle vraiment
Le Consensus Gap désigne l'écart de citation d'une marque entre différents moteurs de recherche AI pour une même requête. Contrairement à la recherche classique où les résultats de Google dominaient à 90 %+ du marché, l'écosystème AI est fragmenté : ChatGPT (OpenAI), Gemini (Google), Perplexity, Copilot (Microsoft), Claude (Anthropic). Chaque moteur utilise des pipelines de grounding différents, des corpus distincts, et des logiques de citation qui n'ont rien à voir les unes avec les autres.
Le problème est structurel. Quand vous mesurez votre "AI visibility" avec un outil qui agrège les résultats de plusieurs LLMs, vous obtenez une moyenne. Et une moyenne masque la distribution. Un score de 70 % peut signifier 100 % sur ChatGPT et 0 % sur Gemini, ou 70 % sur les trois. Ces deux scénarios impliquent des stratégies radicalement différentes.
Kevin Indig illustre ce point avec des données concrètes : certaines marques qui semblent dominantes en visibilité AI agrégée sont en réalité absentes de moteurs qui représentent une part croissante des requêtes informationnelles. Le Consensus Gap n'est pas un bug — c'est une propriété émergente d'un écosystème où chaque LLM a son propre index, ses propres biais de source, et sa propre logique de sélection.
Pour les équipes SEO qui ont commencé à tracker leur visibilité AI, c'est un signal d'alarme : les métriques agrégées sont trompeuses tant que vous ne décomposez pas par moteur.
Pourquoi chaque LLM cite différemment : le pipeline technique
Pour comprendre le Consensus Gap, il faut comprendre comment chaque moteur construit sa réponse. Le processus de grounding — la façon dont un LLM ancre sa réponse dans des sources réelles — varie considérablement.
Google Gemini : indexation classique + AI Overviews
Gemini s'appuie principalement sur l'index Google Search existant. Les sources citées dans les AI Overviews sont sélectionnées parmi les pages déjà indexées et rankées. Si vous êtes invisible dans les SERPs classiques de Google sur une requête, vous avez très peu de chances d'être cité par Gemini sur cette même requête.
Le grounding de Gemini utilise un sous-ensemble de l'index, filtré par des signaux de qualité (E-E-A-T, topical authority, fraîcheur). Les évolutions récentes des liens dans AI Overviews confirment que Google resserre les critères de sélection des sources.
ChatGPT : Bing Index + Browse + mémoire contextuelle
ChatGPT avec browsing activé s'appuie sur l'index Bing pour ses résultats en temps réel. C'est un point critique que beaucoup d'équipes SEO sous-estiment : si votre site n'est pas correctement indexé par Bing, ChatGPT ne vous citera pas, même si vous dominez Google.
Le fonctionnement du grounding chez Bing est fondamentalement différent de celui de Google. Microsoft a expliqué que le grounding ne repose pas sur le même index que la recherche classique — il utilise un index optimisé pour la récupération de passages, pas de pages.
Perplexity : crawl propriétaire + index focalisé
Perplexity utilise son propre crawler (PerplexityBot) et construit un index indépendant. Si votre robots.txt bloque ce bot — ce qui est fréquent sur les hébergements WordPress managés — vous êtes invisible sur Perplexity par défaut.
C'est exactement le scénario décrit dans cet article sur les bots AI bloqués par les hébergements managés. Un robots.txt qui semble inoffensif peut créer un Consensus Gap massif.
Voici un exemple de robots.txt qui crée un Consensus Gap en bloquant sélectivement certains bots AI :
# robots.txt — configuration typique d'un hébergeur managé
User-agent: Googlebot
Allow: /
User-agent: Bingbot
Allow: /
User-agent: PerplexityBot
Disallow: /
User-agent: anthropic-ai
Disallow: /
User-agent: CCBot
Disallow: /
# Résultat : visible sur Gemini et ChatGPT, invisible sur Perplexity et Claude
Ce fichier robots.txt est fonctionnellement un générateur de Consensus Gap. Votre marque sera citée par les moteurs qui accèdent à votre contenu, et absente des autres. Et vous ne le verrez pas dans un dashboard agrégé.
Mesurer le Consensus Gap : méthodologie technique
Il n'existe pas encore d'outil mainstream qui mesure nativement le Consensus Gap. La plupart des plateformes de "GEO" (Generative Engine Optimization) affichent un score agrégé. Voici une méthode pour le calculer vous-même.
Étape 1 : Définir un corpus de requêtes
Sélectionnez 50 à 100 requêtes informationnelles représentatives de votre domaine. Pas vos requêtes branded — les requêtes génériques où vous voulez être cité comme source experte.
Étape 2 : Interroger chaque moteur individuellement
Pour chaque requête, interrogez ChatGPT, Gemini, et Perplexity (au minimum). Enregistrez si votre marque/domaine est cité, et dans quel contexte (source principale, mention secondaire, absent).
Voici un script TypeScript qui automatise cette collecte via les APIs disponibles :
import OpenAI from "openai";
interface EngineResult {
engine: string;
query: string;
cited: boolean;
citationContext: "primary" | "secondary" | "absent";
sourceUrl: string | null;
responseSnippet: string;
}
interface ConsensusReport {
query: string;
results: EngineResult[];
consensusScore: number; // 0-1, 1 = cité partout
gapEngines: string[]; // moteurs où la marque est absente
}
const BRAND_DOMAIN = "votredomaine.com";
const BRAND_VARIANTS = ["VotreMarque", "votremarque.com", "Votre Marque"];
async function checkCitationInResponse(
response: string,
domain: string,
variants: string[]
): { cited: boolean; context: "primary" | "secondary" | "absent" } {
const lowerResponse = response.toLowerCase();
const allPatterns = [domain, ...variants.map((v) => v.toLowerCase())];
const found = allPatterns.some((p) => lowerResponse.includes(p));
if (!found) return { cited: false, context: "absent" };
// Heuristique : si mentionné dans le premier tiers de la réponse = primary
const firstThird = lowerResponse.substring(0, lowerResponse.length / 3);
const isPrimary = allPatterns.some((p) => firstThird.includes(p));
return { cited: true, context: isPrimary ? "primary" : "secondary" };
}
async function queryOpenAI(query: string): Promise<EngineResult> {
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const response = await client.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: query }],
temperature: 0.2,
});
const text = response.choices[0]?.message?.content ?? "";
const citation = await checkCitationInResponse(text, BRAND_DOMAIN, BRAND_VARIANTS);
return {
engine: "chatgpt",
query,
cited: citation.cited,
citationContext: citation.context,
sourceUrl: null, // Extraire via parsing si browsing activé
responseSnippet: text.substring(0, 500),
};
}
function calculateConsensusScore(results: EngineResult[]): number {
const citedCount = results.filter((r) => r.cited).length;
return citedCount / results.length;
}
async function analyzeConsensusGap(
queries: string[]
): Promise<ConsensusReport[]> {
const reports: ConsensusReport[] = [];
for (const query of queries) {
// En production : ajouter Gemini API, Perplexity API
const chatgptResult = await queryOpenAI(query);
const results = [chatgptResult];
// Ajouter les autres moteurs ici
const consensusScore = calculateConsensusScore(results);
const gapEngines = results
.filter((r) => !r.cited)
.map((r) => r.engine);
reports.push({ query, results, consensusScore, gapEngines });
}
return reports;
}
// Usage
const queries = [
"meilleur outil monitoring SEO technique",
"comment détecter une régression meta description",
"audit SEO automatisé pour e-commerce",
];
analyzeConsensusGap(queries).then((reports) => {
reports.forEach((r) => {
console.log(`Query: ${r.query}`);
console.log(`Consensus Score: ${(r.consensusScore * 100).toFixed(0)}%`);
console.log(`Gap Engines: ${r.gapEngines.join(", ") || "none"}`);
console.log("---");
});
});
Étape 3 : Calculer le score de consensus
Le Consensus Score est simple : pour chaque requête, c'est le ratio de moteurs où vous êtes cité sur le nombre total de moteurs testés. Un score de 1.0 signifie un consensus parfait (cité partout). Un score de 0.33 signifie que vous n'êtes cité que sur un moteur sur trois.
Le Consensus Gap est l'inverse : 1 - ConsensusScore. Plus il est élevé, plus votre visibilité est fragile et dépendante d'un seul moteur.
Scénario concret : un e-commerce mode de 12 000 pages
Prenons un cas réaliste. FashionStore.fr, un e-commerce de prêt-à-porter avec 12 000 pages produits, 800 pages catégories, et un blog de 400 articles. L'équipe SEO a investi dans le contenu éditorial depuis 18 mois et reçoit 35 000 visites organiques mensuelles via Google.
L'équipe commence à tracker sa visibilité AI avec un outil qui agrège ChatGPT, Gemini et Perplexity. Le dashboard affiche : "AI Visibility Score : 64 %" sur un corpus de 200 requêtes mode (type "meilleure robe d'été 2026", "comment choisir un blazer homme", etc.).
Résultat satisfaisant. Sauf qu'en décomposant par moteur :
| Moteur | Requêtes citées | Taux de citation |
|---|---|---|
| ChatGPT | 158 / 200 | 79 % |
| Gemini | 112 / 200 | 56 % |
| Perplexity | 12 / 200 | 6 % |
Le Consensus Gap est massif. Et le score agrégé de 64 % masque un trou noir sur Perplexity.
Diagnostic
L'équipe lance un audit. Premier réflexe : vérifier l'accès des bots.
# Vérifier si PerplexityBot peut accéder au site
curl -sI -A "PerplexityBot" https://fashionstore.fr/ | head -20
# Résultat :
# HTTP/2 403
# server: cloudflare
# cf-ray: ...
# Le WAF Cloudflare bloque PerplexityBot avec une 403
# Vérifier les règles de firewall
curl -s https://fashionstore.fr/robots.txt | grep -i perplexity
# Rien dans robots.txt — le blocage vient du WAF, pas du robots.txt
Le problème n'est pas dans le robots.txt — il est dans la configuration du WAF Cloudflare. Le bot Perplexity est classé comme "AI Scraper" et bloqué par une règle par défaut que l'équipe n'a jamais modifiée.
Deuxième problème : l'écart entre ChatGPT (79 %) et Gemini (56 %). L'équipe analyse les 88 requêtes où ChatGPT cite FashionStore.fr mais pas Gemini. Pattern identifié : ce sont principalement des articles de blog récents (< 3 mois). En vérifiant dans la Search Console, ces pages ont un bon ranking Google (positions 5-15), mais en fouillant dans les requêtes AI Overviews via les rapports de search performance filtrés sur "AI Overviews", ces pages n'apparaissent pas.
Hypothèse : les articles sont indexés et rankés dans la recherche classique, mais ne passent pas le filtre de qualité supplémentaire que Gemini applique pour le grounding AI. Le seuil de qualité de Google pour le contenu AI s'applique aussi dans l'autre sens : des pages jugées "suffisamment bonnes" pour le ranking classique peuvent être exclues du pipeline AI Overviews.
Plan de correction
- Perplexity : ajout d'une règle Cloudflare WAF explicite pour autoriser PerplexityBot (User-Agent matching). Résultat attendu sous 2-4 semaines après recrawl.
- Gemini : renforcement des signaux E-E-A-T sur les articles de blog (auteur identifié, sources citées, structured data
ArticleavecauthoretdateModified). Travail sur la profondeur éditoriale des 88 articles manquants. - Monitoring : mise en place d'un suivi mensuel du Consensus Score par requête, pas uniquement agrégé.
Les signaux techniques qui créent du Consensus Gap
Au-delà du blocage de bots, plusieurs facteurs techniques expliquent pourquoi un moteur AI vous cite et pas un autre.
Structured data et extraction de passages
Chaque LLM a sa propre logique d'extraction de passages (passage retrieval). Google utilise ses propres embeddings, Bing utilise les siens, Perplexity a son propre modèle de retrieval.
Des structured data bien implémentées aident tous les moteurs, mais certains types sont mieux exploités par certains pipelines. Les FAQPage schema, par exemple, sont en voie de disparition chez Google mais restent exploités par Perplexity pour structurer ses réponses.
Le balisage speakable (schema.org), bien que peu utilisé, est un signal explicite pour les moteurs AI qui cherchent des passages à citer verbatim :
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Guide complet des blazers homme 2026",
"author": {
"@type": "Person",
"name": "Marie Dupont",
"url": "https://fashionstore.fr/equipe/marie-dupont",
"jobTitle": "Directrice éditoriale mode"
},
"datePublished": "2026-04-15",
"dateModified": "2026-05-10",
"publisher": {
"@type": "Organization",
"name": "FashionStore",
"url": "https://fashionstore.fr"
},
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": [
".article-summary",
".key-takeaway"
]
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://fashionstore.fr/blog/guide-blazers-homme-2026"
}
}
</script>
Fraîcheur et fréquence de crawl
Le Consensus Gap s'aggrave avec le contenu récent. Google recrawle les sites à forte autorité en quelques heures. Bing peut mettre plusieurs jours. Perplexity, avec un crawler plus modeste, peut avoir un délai de 1 à 3 semaines.
Conséquence : un article publié lundi sera potentiellement cité par Gemini dès mardi, par ChatGPT jeudi, et par Perplexity dans deux semaines. Pendant cette fenêtre, votre Consensus Gap est temporairement élevé — et si vous mesurez à ce moment, vous aurez une vision faussée.
Les métriques GEO à tracker en 2026 doivent inclure cette dimension temporelle : le Consensus Score n'a de sens que mesuré après stabilisation (minimum 3 semaines post-publication).
Architecture de contenu et citabilité
Un insight clé que le concept de Consensus Gap met en lumière : votre site n'est pas traité comme une entité unique par les LLMs. Il est traité comme une collection de passages, et chaque moteur sélectionne des passages différents.
Un contenu structuré en silos thématiques clairs, avec des résumés explicites en début de section, maximise la probabilité d'être sélectionné par plusieurs moteurs simultanément. C'est le principe de votre site comme source, pas comme mégaphone : vous produisez des passages citables, pas des pages monolithiques.
Le pipeline en 10 étapes pour diagnostiquer les échecs de citation AI est un bon framework pour identifier à quelle étape chaque moteur décroche.
Stratégie multi-moteur : réduire le gap sans optimiser pour un seul LLM
L'erreur serait d'optimiser spécifiquement pour ChatGPT parce que c'est là que vous êtes déjà visible. Le Consensus Gap se réduit par des fondamentaux techniques solides, pas par du tuning spécifique à un moteur.
Accès universel aux bots
Première étape, non négociable : vérifier que tous les bots AI majeurs accèdent à votre contenu. Pas seulement dans le robots.txt — aussi dans le WAF, les règles de rate limiting, et les configurations CDN.
Bots à autoriser explicitement :
Googlebot(Gemini)Bingbot(Copilot/ChatGPT browsing)PerplexityBot(Perplexity)anthropic-ai(Claude)Google-Extended(entraînement Gemini — à autoriser si vous voulez être dans le modèle, pas seulement dans le grounding)
Le nouveau standard d'autorisation de bots testé par Google va potentiellement simplifier cette gestion à terme, mais aujourd'hui c'est encore du cas par cas.
Contenu structuré pour le passage retrieval
Chaque section de votre contenu doit pouvoir être extraite indépendamment et rester compréhensible. Concrètement :
- Un H2 explicite qui pose la question ou le sujet
- Un paragraphe de réponse directe dans les 2-3 premières phrases
- Des données factuelles (chiffres, comparaisons) dans le corps de la section
- Une phrase de synthèse en fin de section
Cette structure fonctionne avec tous les pipelines de retrieval car elle correspond au pattern de "passage utile" que les modèles d'embedding cherchent à identifier.
Monitoring continu du Consensus Score
Le Consensus Gap n'est pas statique. Il évolue à chaque mise à jour de modèle, chaque modification de pipeline de grounding, chaque changement dans votre propre contenu. Un outil de monitoring comme Seogard qui détecte les régressions techniques (meta disparues, bots bloqués, structured data cassées) est la couche de base nécessaire — mais le monitoring du Consensus Score lui-même nécessite une couche supplémentaire de suivi par moteur AI.
Le diagnostic des échecs de visibilité AI doit être fait moteur par moteur, pas en agrégé.
Implications pour la mesure de la visibilité AI
Le Consensus Gap remet en cause les métriques de visibilité AI telles qu'elles sont généralement présentées. Un score unique n'a pas de sens. Voici ce qu'il faut mesurer à la place :
Par moteur :
- Taux de citation (% de requêtes où votre domaine est cité)
- Position dans la réponse (source principale vs mention secondaire)
- Type de contenu cité (page produit, article, page catégorie)
Agrégé, mais avec contexte :
- Consensus Score moyen sur le corpus de requêtes
- Distribution du gap (sur combien de requêtes y a-t-il un écart > 1 moteur ?)
- Tendance temporelle (le gap se réduit-il ou s'amplifie-t-il ?)
Les expériences de SEO au niveau des prompts sont la méthode la plus fiable pour collecter ces données de façon systématique, en testant la même requête formulée de différentes manières sur chaque moteur.
La visibilité AI n'est pas un score unique. C'est un vecteur multidimensionnel. Le Consensus Gap est la métrique qui capture la variance de ce vecteur — et c'est cette variance qui détermine si votre investissement en contenu est robuste ou fragile face à la fragmentation des moteurs AI.
Le takeaway est clair : décomposez votre visibilité AI par moteur, identifiez les blocages techniques spécifiques à chaque pipeline, et mesurez le Consensus Score comme un KPI de premier ordre. Si vous ne surveillez qu'un score agrégé, vous optimisez à l'aveugle.