Transparency

Scoring Methodology

Every number fixmyseo shows you is derived from a documented rule. This page explains every scoring dimension, every check, every data source, how competitors are discovered and ranked, and what has changed in each release.

Current version: v0.1  ·  Published: 11 May 2026  ·  Open standards repo

1 — Overview: the three pillars

fixmyseo measures AI visibility across three independent pillars. Each pillar scores 0–100. The overall score is the arithmetic mean: (SEO + AEO + GEO) ÷ 3. No weighting is applied between pillars — each outcome pillar contributes equally to the overall score (ADR Decision 6). Agent Runtime Compatibility (ARC) routes runtime-compatibility sub-scores into each pillar; it is measurement vocabulary, not a fourth pillar.

SEO

Technical foundations

HTTPS, mobile viewport, Core Web Vitals, crawlability, on-page technical signals. These are prerequisites for any AI platform to index and trust the site.

AEO

Answer readiness

AI Overview presence, featured snippets, knowledge panel signals, People Also Ask boxes. The signals AI uses to surface structured answers. Runtime compatibility (10 %) from ARC. FAQ schema removed at v0.1.

GEO

AI citation presence

Actual citation checks across ChatGPT, Perplexity, Claude, Gemini, Google AI Overviews, and more. sameAs entity authority, vertical directory presence.

Zero-fabrication rule. A GEO score is only shown when a platform has actually been queried. If a check didn't run — no API key, rate limit, budget ceiling — the UI says so explicitly. Graceful degradation is honest degradation.

2 — SEO pillar: Technical foundations

The SEO pillar measures discoverability and quality signals in traditional search engines. At v0.1, six sub-scores combine into the SEO pillar score: content quality and intent match (30 %), technical health (25 %), authority signals (22 %), content freshness (10 %), runtime compatibility via ARC (8 %), and brand web mentions (3 %). Local-intent businesses also receive a conditional Local SEO signals sub-score. The individual checks below contribute to the technical health and crawlability components.

HTTPS
Final URL after redirects uses https://. Detected via HTTP response.
+5 pts
Mobile viewport
Page contains a meta[name=viewport] tag with content including width=device-width.
+5 pts
Robots.txt — AI bots
robots.txt does not block GPTBot, ClaudeBot, PerplexityBot, Googlebot, or other AI crawlers. Parsed from live robots.txt, not assumed from meta robots.
+10 pts
Core Web Vitals (LCP)
Largest Contentful Paint ≤ 2500 ms (field data preferred; lab data from PageSpeed Insights as fallback). Source labelled in the report.
+10 pts
Core Web Vitals (CLS)
Cumulative Layout Shift ≤ 0.1 (field data preferred; PageSpeed Insights lab fallback).
+5 pts
Core Web Vitals (INP)
Interaction to Next Paint ≤ 200 ms. Available via Chrome UX Report field data only.
+5 pts
Security headers
Presence of at least one of: X-Content-Type-Options, X-Frame-Options, Content-Security-Policy. Indicates baseline response hardening.
+5 pts
TTFB
Time to First Byte ≤ 600 ms at the 75th percentile. Taken from PageSpeed Insights lab run.
+5 pts

3 — AEO pillar: Answer readiness

The AEO pillar measures appearance in deterministic answer surfaces: Google AI Overviews, featured snippets, knowledge panels, and People Also Ask boxes. Signals are detected from live SERP probes and structured-data analysis.

v0.1 change (11 May 2026): FAQPage schema and FAQ count were removed from AEO sub-scores following Google's deprecation of FAQ rich results on 7 May 2026. The freed weight redistributed across AI Overview presence (+15 pp), featured snippet (+8 pp), knowledge panel (+5 pp), PAA (+5 pp), and runtime compatibility (new, 10 %). Any historical audit results showing FAQ schema findings remain in audit logs with their original methodology_ref (aeo-scoring/v2.3).

v0.1 sub-score weights

Sub-scoreWeightMeasurement method
AI Overview presence40 %Inclusion in Google AI Overviews across tracked queries
Featured snippet capture25 %Capture rate for featured snippet positions
Knowledge panel signals15 %Entity disambiguation, knowledge graph presence
People Also Ask presence10 %Inclusion in PAA boxes for tracked queries
Runtime compatibility10 %ARC findings from google-search-agent-manager + cloudflare-project-think

4 — GEO pillar: AI citation presence

The GEO pillar is the only pillar that measures actual AI behaviour — not just technical signals that might influence AI. Queries are submitted live to AI platforms and citation presence is checked directly.

Platform tiers

Platforms checked depend on the customer's subscription tier:

TierPlatforms checked
Starter (3)ChatGPT, Google AI Overviews, Claude
Growth (6)+ Perplexity, Gemini, Mistral
Scale (6)Same as Growth

Query construction

Queries are templated from the business context (name, category, city/country) and reach profile. Local-reach domains use location-modified queries ("best coffee shop near Sea Point"); global-reach domains use neutral queries. A minimum of 3 queries and maximum of 8 queries per platform are submitted per sweep.

Citation detection

A domain is counted as cited when the API response contains the exact domain hostname in a source attribution, a URL, or a named recommendation. The raw response text is retained for audit log purposes but is not shown to other users.

Scoring

GEO score = (citation rate across all queries across all checked platforms) × 100, clipped to 0–100. Citation rate = number of queries where the domain was cited ÷ total queries run.

Platform coverage disclosure. When a platform is checked with 0 of its planned queries (due to API rate limiting, missing credentials, or budget ceiling), the platform is listed in the report as "Not checked" rather than counted. The overall GEO score denominator excludes unchecked platforms so the score reflects only what was actually measured.

5 — ARC: measurement vocabulary

Agent Runtime Compatibility (ARC) is measurement vocabulary, not a fourth scored pillar. ARC measures whether agent runtimes can successfully read a customer's site — and routes those findings into the three outcome pillars via a pillar-routing table.

What ARC measures

ARC runs three checks for each applicable (check × runtime) pair:

Endpoint readability
Important endpoints return machine-readable structured responses without requiring JavaScript execution.
ARC Check 1
Session continuity
Authentication is scoped for agent-actor session continuity (no session-bound auth that expires mid-task).
ARC Check 2
Schema consistency
Structured data semantics survive the absence of JavaScript execution across headless-fetch runtimes.
ARC Check 3

Runtime → pillar routing (v0.1)

RuntimeCategoryRoutes toTier
gemini-fetchheadless-fetchGEOStarter+
claude-agent-skillsmodel-native-harnessGEOStarter+
openai-agents-sdkmodel-native-harnessGEOGrowth+
perplexity-fetchheadless-fetchGEOGrowth+
google-search-agent-managersearch-agentSEO, AEOStarter+
cloudflare-project-thinkmodel-native-harnessAEO, GEOScale
Agent Runtime Readiness is a cross-pillar diagnostic view derived from ARC data — summarising per-runtime ready / partial / not-ready status — and appears on the customer dashboard alongside pillar scores. It is not itself a scored pillar.

6 — Retrievability: diagnostic view

Retrievability is the property of a page being eligible to enter the candidate set an AI engine draws on when generating a response. A page is retrievable if it is accessible to relevant crawlers, returns a parseable response to headless-fetch requests, and its material content is present without JavaScript execution for runtimes that do not execute JS.

The Retrievability view surfaces per-page, per-runtime eligibility for the customer's tracked pages. It is a diagnostic view — not a scored sub-score — because calibrated-weight evidence connecting retrievability to downstream citation outcomes is deferred to v0.2 (ADR Deferred Decision 5). The view is computed at query time from ARC and AI crawler accessibility data.

Why not a scored sub-score yet? The v0.1 bootstrapping posture prioritises measurable outcomes with existing evidence bases. Retrievability will be promoted to a sub-score in v0.2 if the 60-day first-cohort analysis (early July 2026) shows a statistically significant correlation with citation rate (Pearson r > 0.3).

7 — Competitor discovery methodology

When an owned domain's snippet beacons in for the first time, and the business-context form has been completed, fixmyseo automatically runs competitor discovery to populate a ranked list of up to 15 candidates. This section explains exactly how discovery works.

Step 1 — Keyword set construction

Keywords are derived from:

Step 2 — Reach filtering

The keyword set and all SERP/citation queries are scoped to the domain's declared reach profile before being submitted. A local-reach domain in Cape Town will only see Cape Town–scoped SERP results; a global-reach domain will see results from its declared country set. This prevents a local plumber from seeing US plumbing-supply chains in their top-15 competitor list despite keyword overlap.

Step 3 — SERP overlap analysis

DataForSEO is queried for organic SERP results across the keyword set, scoped to the domain's reach. Each candidate domain that appears in these results is scored by:

Step 4 — GEO citation cross-reference

The citation_history table (populated from GEO sweeps) is cross-referenced. Candidates that appear in AI platform citations for the same queries that cite the owned domain receive a higher confidence score, and are more likely to receive the llm_rival or direct badge.

Step 5 — Category / vertical filter

Each candidate's schema.org type and dominant content topics are compared against the owned domain's core_offering_category. Candidates outside the vertical are downranked. This prevents unrelated sites that happen to rank for overlapping informational keywords from appearing as high-priority competitors.

Step 6 — Ranked output

Up to 15 candidates are returned, sorted by composite confidence score (0–100). Each result includes a badge and a rationale string explaining the strongest signal that placed it on the list.

8 — Competitor badges and confidence scores

Each competitor suggestion carries a badge that summarises the dominant signal used to rank it, and a confidence score (0–100). Badges are not mutually exclusive in the underlying signal data; the badge shown is the single strongest signal.

Badge Signal Example rationale
Direct High overlap on both SERP and GEO citation signals simultaneously. "Appears in 18 of your top 20 SERPs and is cited in 11 LLM queries you target — your strongest direct competitor."
SERP rival High keyword overlap in organic search results; low or moderate GEO citation overlap. "Ranks for 28 of your 40 target keywords (avg. position 5.1)."
LLM rival High GEO citation overlap; lower SERP overlap. Cited by AI when the owned domain isn't. "Cited in 14 of 30 tracked LLM queries — more than your domain (8)."
Adjacent Same vertical or audience; lower keyword/citation overlap than Direct or Rival thresholds. "Same vertical (specialty coffee retail); ranks for 9 of your keywords."
Local rival Same geographic market with meaningful overlap. Applies only to Local-reach domains. "Based in your city, targets the same keywords — consistent SERP competitor in your market."

Confidence score calculation

The confidence score (0–100) is a composite of four weighted sub-scores:

Sub-scoreWeightNotes
SERP keyword overlap %35 %keywords_overlap / total_keywords × 100
SERP position quality20 %Normalised: rank 1 = 100, rank 20 = 0. Averaged across overlapping keywords.
GEO citation overlap30 %shared_citation_queries / total_geo_queries × 100
Category match score15 %1.0 = same schema.org type; 0.5 = same vertical; 0.0 = no match
Reach scoping is mandatory. A Local-reach domain in Cape Town will never see a US-based competitor in its top 15 regardless of keyword overlap. Reach filtering is applied before the SERP query is submitted to DataForSEO, not as a post-hoc filter — this prevents wasting quota on out-of-market results.

7 — Reach profiles and location scoping

Every owned domain declares a reach profile that governs how fixmyseo parameterises all scans, queries, and competitor discovery. Reach is set during onboarding and can be edited from domain settings at any time.

Profile Definition DataForSEO location_code GEO query style
Local 1–N specific cities or metros. Defined by location codes and an ISO country code. City-level code (e.g. 1006886 for Cape Town) Location-modified: "best [category] near [city]"
National One or more ISO countries without city anchoring. Country-level code (e.g. 2840 for US) Country-scoped neutral: "best [category] in [country]"
Global Multi-country. Default rotation: US, UK, DE, AU. Configurable on Scale. Rotated across declared countries Neutral: "[category] [product/service]"

On-page recommendation impact

Local reach prioritises: LocalBusiness schema, NAP consistency, Google Business Profile validation, local citation audit (Yelp, TripAdvisor, industry directories per vertical).

Global reach prioritises: Organization schema, hreflang audit, international SEO recommendations, multi-language FAQ generation.

National reach prioritises: national-scale entity signals, breadcrumb schema, country-specific directory presence.

8 — Data sources and cache policy

fixmyseo never infers data that should be measured. Each check names its source. Where a source is unavailable, the check is marked "Not checked" — not scored as a pass or fail.

DataSourceCache TTL
Page HTML / robots.txtDirect HTTP fetch via @fixmyseo/crawlerPer-audit (no cross-audit cache)
Core Web Vitals (field)Chrome UX Report (via PageSpeed Insights API)24 hours
Core Web Vitals (lab)PageSpeed Insights Lighthouse24 hours
GEO citationsLive AI platform queries (ChatGPT API, Perplexity API, etc.)None — always fresh per sweep
SERP resultsDataForSEO Organic Results APIPer-audit (no cross-audit cache)
Competitor discoveryDataForSEO SERP overlap + citation_history tableOn-demand refresh; auto-refreshes on business-context update
Schema detection@fixmyseo/crawler JSON-LD parserPer-audit
PSI cachePageSpeed Insights — domain-level deduplicated24 hours (shared across audits)
Data immutability rule. Audit rows are never mutated. When methodology changes, historical audits are re-scored on read using the methodology version stored on each row. The raw check results are always preserved.

10 — How quickly does this work?

AI visibility moves on three distinct timescales. After FixMySEO deploys a fix, you’ll see different pillars update at different rates. Understanding this prevents the common mistake of evaluating results too early.

SEO

24–48 hours

Search engines re-crawl your pages within hours of changes appearing in your sitemap or RSS feeds. SEO sub-score updates reflect newly indexed content quickly.

AEO

~7 days

AI answer engines refresh their underlying corpus and prompt-data on roughly-weekly cycles. Structured content and FAQ deployment shows up in answer rates within this window.

GEO

14–30 days

Entity authority signals — citations, schema completeness, off-domain mentions — accumulate slowly through the broader web ecosystem. GEO sub-score reflects the cumulative effect of authority-building over weeks.

A note on these ranges: These are typical ranges. Your domain’s actual movement depends on your starting position and competitive landscape.

Want to see how this looks in practice? Read our breakdown of a real customer’s 30-day trajectory.

9 — Version history

v0.1
11 May 2026
Methodology v0.1 — open standards release. Overall score formula changed to arithmetic mean (SEO + AEO + GEO) ÷ 3 (no pillar weighting). ARC re-classified as measurement vocabulary (not a fourth pillar); runtime findings route into SEO, AEO, and GEO sub-scores via pillar-routing table. FAQ schema removed from AEO scoring (Google deprecation, 7 May 2026); weight redistributed to AI Overview, featured snippet, knowledge panel, PAA, and runtime compatibility. GEO sub-scores formalised: 8 components inc. brand web mentions, per-platform affinity, AI crawler accessibility. Content freshness sub-score added to both SEO (10 %) and GEO (10 %). Retrievability and Agent Runtime Readiness introduced as cross-pillar diagnostic views. All specifications published at github.com/Cloud-Wifi/fixmyseo-standards (CC-BY 4.0).
v2.3.0
April 2026
19 new trigger flags (7 SEO on-page, 6 AEO, 5 GEO vertical-specific). CWV-augmented slow-page-speed detection. 16 new suggestion catalog entries. expand_faqs recategorised to AEO. B2B SaaS citation platform redistribution. Competitor discovery methodology added (§5–6 above). Reach-profile–aware GEO query construction documented (§7).
v2.0.0
March 2026
Three-pillar model formalised (SEO / AEO / GEO). Bot access moved from AEO to SEO. Directory presence moved from standalone to GEO sub-signal. PSI / CWV integration added to SEO pillar. Two-score projection (current + projected with fixes) introduced.
v1.0.0
February 2026
Initial release. Single-score model. HTTPS, mobile viewport, FAQ schema, schema.org presence, and LLM citation checks. GEO citation via Perplexity API only.