geo-strategy
AI Visibility
Use Cases
Strategic Planning & Investment
Using AI Visibility as the primary KPI for allocating resources between traditional SEO, GEO, and content marketing investments based on where visibility drives the most business value.
Competitive Intelligence
Benchmarking AI Visibility against competitors to understand market positioning in AI-mediated discovery and identify gaps requiring strategic attention.
Brand Health Monitoring
Tracking AI Visibility trends as a leading indicator of brand health, detecting shifts in AI-mediated perception before they manifest in traditional metrics.
Content Strategy Optimization
Guiding content development priorities based on AI Visibility performance, focusing resources on topics and formats that maximize AI presence.
Marketing Attribution
Incorporating AI Visibility into marketing attribution models to properly value activities that drive AI presence even without direct traffic attribution.
Executive Reporting
Providing leadership with a single, comprehensible metric that captures AI-era brand presence, enabling informed strategic decision-making.
Key Metrics
AI Visibility Index
Composite score combining all visibility components into a single 0-100 metric
Σ (Component Score × Component Weight) / Max Possible Score × 100AI Share of Voice
Your brand's share of AI mentions/citations compared to competitors for target queries
(Your AI Mentions / Total Competitive AI Mentions) × 100Query Coverage Rate
Percentage of target queries where your content appears in AI responses
(Queries with Presence / Total Target Queries) × 100Citation Authority Score
Weighted score based on citation position and context across AI responses
Σ (Citation × Position Weight × Context Quality) / Total CitationsVisibility Quality Index
Composite measure of visibility quality including accuracy, sentiment, and recommendation strength
(Accuracy Score + Sentiment Score + Recommendation Strength) / 3Cross-Platform Consistency
How consistent your visibility is across different AI platforms
1 - (Standard Deviation of Platform Scores / Mean Score)Visibility Trend Score
Directional indicator of whether AI Visibility is improving or declining
(Current Period Score - Previous Period Score) / Previous Period Score × 100Business-Weighted Visibility
AI Visibility weighted by query business value (volume × intent × conversion potential)
Σ (Query Visibility × Query Volume × Intent Weight × Conversion Rate)How LLMs Interpret This
1// AI Visibility Framework Implementation2interface VisibilityComponent {3 id: string;4 name: string;5 weight: number;6 score: number; // 0-1007 trend: 'improving' | 'declining' | 'stable';8}9 10interface AIVisibilityScore {11 index: number; // 0-100 composite score12 components: VisibilityComponent[];13 competitiveShare: number;14 qualityScore: number;15 timestamp: Date;16 confidence: number;17}18 19interface CompetitorVisibility {20 competitor: string;21 index: number;22 share: number;23}24 25interface AIVisibilityReport {26 current: AIVisibilityScore;27 historical: AIVisibilityScore[];28 competitors: CompetitorVisibility[];29 opportunities: OptimizationOpportunity[];30 businessCorrelations: BusinessCorrelation[];31}32 33interface OptimizationOpportunity {34 type: string;35 description: string;36 potentialImpact: number;37 priority: 'high' | 'medium' | 'low';38 affectedComponents: string[];39}40 41interface BusinessCorrelation {42 metric: string;43 correlation: number;44 lag: number; // days between visibility change and metric impact45 significance: number;46}47 48class AIVisibilityFramework {49 private queryUniverse: string[];50 private brand: string;51 private competitors: string[];52 private platforms: string[];53 private componentWeights: Record<string, number>;54 private historicalScores: AIVisibilityScore[] = [];55 56 constructor(config: {57 queryUniverse: string[];58 brand: string;59 competitors: string[];60 platforms: string[];61 componentWeights?: Record<string, number>;62 }) {63 this.queryUniverse = config.queryUniverse;64 this.brand = config.brand;65 this.competitors = config.competitors;66 this.platforms = config.platforms;67 68 // Default component weights (customize for your business)69 this.componentWeights = config.componentWeights || {70 citationShare: 0.25,71 queryCoverage: 0.20,72 mentionQuality: 0.20,73 accuracy: 0.15,74 platformConsistency: 0.10,75 competitivePosition: 0.10,76 };77 }78 79 // Calculate comprehensive AI Visibility score80 async calculateVisibility(): Promise<AIVisibilityScore> {81 const components: VisibilityComponent[] = [];82 83 // 1. Citation Share - how often you're cited in AI responses84 const citationShare = await this.measureCitationShare();85 components.push({86 id: 'citationShare',87 name: 'Citation Share',88 weight: this.componentWeights.citationShare,89 score: citationShare.score,90 trend: this.calculateTrend('citationShare', citationShare.score),91 });92 93 // 2. Query Coverage - what % of target queries include you94 const queryCoverage = await this.measureQueryCoverage();95 components.push({96 id: 'queryCoverage',97 name: 'Query Coverage',98 weight: this.componentWeights.queryCoverage,99 score: queryCoverage.score,100 trend: this.calculateTrend('queryCoverage', queryCoverage.score),101 });102 103 // 3. Mention Quality - sentiment and prominence of mentions104 const mentionQuality = await this.measureMentionQuality();105 components.push({106 id: 'mentionQuality',107 name: 'Mention Quality',108 weight: this.componentWeights.mentionQuality,109 score: mentionQuality.score,110 trend: this.calculateTrend('mentionQuality', mentionQuality.score),111 });112 113 // 4. Accuracy - how accurately AI represents your content114 const accuracy = await this.measureAccuracy();115 components.push({116 id: 'accuracy',117 name: 'Content Accuracy',118 weight: this.componentWeights.accuracy,119 score: accuracy.score,120 trend: this.calculateTrend('accuracy', accuracy.score),121 });122 123 // 5. Platform Consistency - visibility across all platforms124 const platformConsistency = await this.measurePlatformConsistency();125 components.push({126 id: 'platformConsistency',127 name: 'Platform Consistency',128 weight: this.componentWeights.platformConsistency,129 score: platformConsistency.score,130 trend: this.calculateTrend('platformConsistency', platformConsistency.score),131 });132 133 // 6. Competitive Position - share vs competitors134 const competitivePosition = await this.measureCompetitivePosition();135 components.push({136 id: 'competitivePosition',137 name: 'Competitive Position',138 weight: this.componentWeights.competitivePosition,139 score: competitivePosition.score,140 trend: this.calculateTrend('competitivePosition', competitivePosition.score),141 });142 143 // Calculate weighted index144 const index = components.reduce(145 (sum, c) => sum + c.score * c.weight, 0146 );147 148 // Calculate quality score (subset of components)149 const qualityScore = (150 mentionQuality.score + accuracy.score151 ) / 2;152 153 const visibilityScore: AIVisibilityScore = {154 index,155 components,156 competitiveShare: competitivePosition.share,157 qualityScore,158 timestamp: new Date(),159 confidence: this.calculateConfidence(components),160 };161 162 this.historicalScores.push(visibilityScore);163 return visibilityScore;164 }165 166 // Measure citation share across AI platforms167 private async measureCitationShare(): Promise<{ score: number; details: any }> {168 // Implementation would query AI platforms and count citations169 // Normalize to 0-100 based on maximum possible citations170 return {171 score: 62, // Placeholder172 details: {173 totalCitations: 156,174 possibleCitations: 252,175 byPlatform: {176 chatgpt: 45,177 perplexity: 58,178 claude: 32,179 gemini: 21,180 },181 },182 };183 }184 185 // Measure query coverage186 private async measureQueryCoverage(): Promise<{ score: number; details: any }> {187 // Implementation would test presence across query universe188 return {189 score: 48,190 details: {191 queriesWithPresence: 241,192 totalQueries: this.queryUniverse.length,193 },194 };195 }196 197 // Measure mention quality (sentiment, prominence, recommendation strength)198 private async measureMentionQuality(): Promise<{ score: number; details: any }> {199 return {200 score: 71,201 details: {202 avgSentiment: 0.68,203 primaryRecommendationRate: 0.23,204 positiveContextRate: 0.82,205 },206 };207 }208 209 // Measure accuracy of AI representation210 private async measureAccuracy(): Promise<{ score: number; details: any }> {211 return {212 score: 84,213 details: {214 factuallyAccurate: 0.91,215 currentInformation: 0.78,216 completeRepresentation: 0.82,217 },218 };219 }220 221 // Measure consistency across platforms222 private async measurePlatformConsistency(): Promise<{ score: number; details: any }> {223 const platformScores = {224 chatgpt: 72,225 perplexity: 58,226 claude: 64,227 gemini: 51,228 };229 230 const scores = Object.values(platformScores);231 const mean = scores.reduce((a, b) => a + b, 0) / scores.length;232 const stdDev = Math.sqrt(233 scores.reduce((sum, s) => sum + Math.pow(s - mean, 2), 0) / scores.length234 );235 236 // Consistency score: 100 = perfectly consistent, 0 = highly variable237 const consistency = Math.max(0, 100 - (stdDev * 2));238 239 return {240 score: consistency,241 details: { platformScores, mean, stdDev },242 };243 }244 245 // Measure competitive position246 private async measureCompetitivePosition(): Promise<{ score: number; share: number; details: any }> {247 // Implementation would compare visibility vs competitors248 const yourVisibility = 62;249 const competitorVisibilities = [71, 58, 45, 39];250 const totalVisibility = yourVisibility + competitorVisibilities.reduce((a, b) => a + b, 0);251 const share = (yourVisibility / totalVisibility) * 100;252 253 // Score based on relative position (being #1 = 100, being last = 20)254 const allVisibilities = [yourVisibility, ...competitorVisibilities].sort((a, b) => b - a);255 const position = allVisibilities.indexOf(yourVisibility);256 const positionScore = 100 - (position * 20);257 258 return {259 score: positionScore,260 share,261 details: {262 yourVisibility,263 competitorVisibilities,264 rank: position + 1,265 },266 };267 }268 269 // Calculate trend for a component270 private calculateTrend(271 componentId: string, 272 currentScore: number273 ): 'improving' | 'declining' | 'stable' {274 const previousScores = this.historicalScores275 .slice(-5)276 .map(s => s.components.find(c => c.id === componentId)?.score || 0);277 278 if (previousScores.length < 2) return 'stable';279 280 const avgPrevious = previousScores.reduce((a, b) => a + b, 0) / previousScores.length;281 282 if (currentScore > avgPrevious + 3) return 'improving';283 if (currentScore < avgPrevious - 3) return 'declining';284 return 'stable';285 }286 287 // Calculate confidence in the visibility score288 private calculateConfidence(components: VisibilityComponent[]): number {289 // Higher confidence with more data points and consistent measurements290 const baseConfidence = 0.7;291 const dataPointBonus = Math.min(0.2, this.historicalScores.length * 0.02);292 const consistencyBonus = 0.1; // Would calculate based on measurement variance293 294 return Math.min(0.95, baseConfidence + dataPointBonus + consistencyBonus);295 }296 297 // Generate comprehensive visibility report298 async generateReport(): Promise<AIVisibilityReport> {299 const current = await this.calculateVisibility();300 301 // Competitor visibility302 const competitorVis: CompetitorVisibility[] = this.competitors.map((comp, i) => ({303 competitor: comp,304 index: [71, 58, 45, 39][i] || 50, // Placeholder - would measure305 share: [26, 21, 16, 14][i] || 10,306 }));307 308 // Identify opportunities309 const opportunities = this.identifyOpportunities(current);310 311 // Business correlations (would be calculated from historical data)312 const correlations: BusinessCorrelation[] = [313 {314 metric: 'Branded Search Volume',315 correlation: 0.72,316 lag: 14,317 significance: 0.95,318 },319 {320 metric: 'Direct Traffic',321 correlation: 0.58,322 lag: 21,323 significance: 0.88,324 },325 {326 metric: 'Demo Requests',327 correlation: 0.64,328 lag: 30,329 significance: 0.91,330 },331 ];332 333 return {334 current,335 historical: this.historicalScores.slice(-12), // Last 12 periods336 competitors: competitorVis,337 opportunities,338 businessCorrelations: correlations,339 };340 }341 342 // Identify optimization opportunities343 private identifyOpportunities(344 visibility: AIVisibilityScore345 ): OptimizationOpportunity[] {346 const opportunities: OptimizationOpportunity[] = [];347 348 visibility.components.forEach(component => {349 if (component.score < 50) {350 opportunities.push({351 type: 'low_score',352 description: `${component.name} score (${component.score.toFixed(0)}) is below target. Focus on improving this dimension.`,353 potentialImpact: (50 - component.score) * component.weight,354 priority: component.score < 30 ? 'high' : 'medium',355 affectedComponents: [component.id],356 });357 }358 359 if (component.trend === 'declining') {360 opportunities.push({361 type: 'declining_trend',362 description: `${component.name} is showing a declining trend. Investigate and address root causes.`,363 potentialImpact: 5 * component.weight,364 priority: 'high',365 affectedComponents: [component.id],366 });367 }368 });369 370 // Competitive gap opportunities371 if (visibility.competitiveShare < 25) {372 opportunities.push({373 type: 'competitive_gap',374 description: 'Competitive share is below 25%. Focus on differentiating content and authority building.',375 potentialImpact: 15,376 priority: 'high',377 affectedComponents: ['competitivePosition', 'citationShare'],378 });379 }380 381 return opportunities.sort((a, b) => b.potentialImpact - a.potentialImpact);382 }383}384 385// Usage example386const framework = new AIVisibilityFramework({387 queryUniverse: [388 'best project management software',389 'how to manage remote teams',390 'project management vs task management',391 // ... 500+ queries392 ],393 brand: 'Acme Software',394 competitors: ['Competitor A', 'Competitor B', 'Competitor C', 'Competitor D'],395 platforms: ['chatgpt', 'perplexity', 'claude', 'gemini'],396 componentWeights: {397 citationShare: 0.25,398 queryCoverage: 0.20,399 mentionQuality: 0.20,400 accuracy: 0.15,401 platformConsistency: 0.10,402 competitivePosition: 0.10,403 },404});405 406// Generate visibility report407framework.generateReport().then(report => {408 console.log('=== AI VISIBILITY REPORT ===\n');409 410 console.log(`AI Visibility Index: ${report.current.index.toFixed(1)}/100`);411 console.log(`Competitive Share: ${report.current.competitiveShare.toFixed(1)}%`);412 console.log(`Quality Score: ${report.current.qualityScore.toFixed(1)}/100`);413 console.log(`Confidence: ${(report.current.confidence * 100).toFixed(0)}%\n`);414 415 console.log('Component Breakdown:');416 report.current.components.forEach(c => {417 const trendIcon = c.trend === 'improving' ? '↑' : c.trend === 'declining' ? '↓' : '→';418 console.log(` ${c.name}: ${c.score.toFixed(0)} ${trendIcon} (weight: ${(c.weight * 100).toFixed(0)}%)`);419 });420 421 console.log('\nCompetitive Landscape:');422 report.competitors.forEach(c => {423 console.log(` ${c.competitor}: Index ${c.index}, Share ${c.share.toFixed(1)}%`);424 });425 426 console.log('\nOptimization Opportunities:');427 report.opportunities.slice(0, 5).forEach(opp => {428 console.log(` [${opp.priority.toUpperCase()}] ${opp.description}`);429 });430 431 console.log('\nBusiness Correlations:');432 report.businessCorrelations.forEach(corr => {433 console.log(` ${corr.metric}: r=${corr.correlation.toFixed(2)} (lag: ${corr.lag} days)`);434 });435});Examples
Enterprise SaaS Visibility Dashboard
E-commerce Brand Monitoring
Healthcare Authority Building
Export Structured Data
{
"@context": "https://schema.org",
"@type": "DefinedTerm",
"name": "Untitled",
"alternateName": [],
"description": "",
"inDefinedTermSet": {
"@type": "DefinedTermSet",
"name": "AI Optimization Glossary",
"url": "https://geordy.ai/glossary"
},
"url": "https://geordy.ai/glossary/geo-strategy/ai-visibility"
}Details
- Category
- geo-strategy
- Type
- concept
- Level
- beginner