How to Score Content for AI Citation Readiness Using the GEO Score Framework
The repository zubair-trabzada/geo-seo-claude implements a diagnostic instrument called the GEO Score that quantifies how well a web page is prepared for citation by generative AI systems through a weighted composite of six sub-scores.
To score content for AI citation readiness, you need to evaluate six distinct dimensions weighted by importance, with AI Citability & Visibility contributing 25% of the total GEO Score. The framework analyzes every substantive content block on a page, measuring signals that large language models use to select citations, from self-containment and statistical density to crawler access permissions.
Understanding the GEO Score Framework
The GEO Score is a composite metric documented in docs/scoring-methodology.md that aggregates six weighted sub-scores into a 0-100 scale:
- AI Citability & Visibility (25%)
- Brand Authority (20%)
- Content Quality (E-E-A-T) (20%)
- Technical Foundations (15%)
- Structured Data (10%)
- Platform Optimization (10%)
Each sub-score targets specific signals that generative AI systems (ChatGPT, Claude, Perplexity, Google AI Overviews) use when retrieving and citing web content.
The AI Citability & Visibility Sub-Score (25% Weight)
This component is computed by the citability scorer located in scripts/citability_scorer.py. It analyzes every substantive content block delimited by headings and evaluates each across five dimensions.
The Five Dimensions of Content Citability
Each content block receives a 0-100 score based on these weighted criteria:
| Dimension | Max Points | Key Signals |
|---|---|---|
| Answer Block Quality | 30 | Definition patterns ("X is a..."), answers appearing in the first 60 words, question-style headings, short clear sentences, quoted claims ("research shows...") |
| Self-Containment | 25 | Optimal word count (134-167 words), pronoun density below 2%, presence of at least 3 proper nouns |
| Structural Readability | 20 | Average sentence length between 10-20 words, list-like transition words, numbered items, strategic paragraph breaks |
| Statistical Density | 15 | Percentages, dollar amounts, contextual numbers, year references, named sources (e.g., Gartner, OpenAI) |
| Uniqueness Signals | 10 | Original-research phrasing, case-study mentions, specific tool or product references |
The page-level citability equals the average of the top five scoring blocks (or all blocks if fewer than five exist), as defined in the scoring methodology.
The Analysis Pipeline
The analyze_page_citability function in scripts/citability_scorer.py executes a five-step pipeline:
- Fetch the target URL using a custom User-Agent header
- Strip non-content elements (
script,style,nav, etc.) - Segment the page into content blocks anchored by the nearest heading
- Score each block with
score_passage, applying the five dimension heuristics - Aggregate results: compute the average score, count optimal-length passages, and generate a grade distribution (A-F)
The final JSON payload includes the URL, total blocks analyzed, average citability score, optimal-length passage count, grade distribution, and the top and bottom 5 passages for diagnostics.
Crawler Access and llms.txt Validation
AI Citability depends on two ancillary checks beyond content quality:
-
Crawler Access Score: The system checks
robots.txtfor blocked AI crawlers, applying deductions of -15 points per critical blocker and -5 points per secondary blocker, plus penalties for missing sitemap references. -
llms.txtScore: Thescripts/llmstxt_generator.pyvalidates the presence and quality ofllms.txtorllms-full.txtfiles. A well-structured file (containing title, description, sections, and links) can add up to 30 points to the AI Visibility component.
Calculating the Final Composite Score
As implemented in agents/geo-audit/SKILL.md, the framework aggregates all sub-scores using their respective weights:
- Multiply each sub-score by its weight percentage
- Sum the weighted values
- Apply any penalties from crawler access limitations
- Add bonuses from
llms.txtvalidation
The resulting GEO Score (0-100) indicates overall AI citation readiness, with scores above 80 considered highly citable.
Implementation: Using the Citability Scorer
You can score content programmatically or via command line.
Command Line Usage
# Score a single URL and output to JSON
python scripts/citability_scorer.py https://example.com > citability.json
# Inspect key metrics from the output
jq '.average_citability_score, .grade_distribution' citability.json
Programmatic Implementation
from scripts.citability_scorer import score_passage
text = """
OpenAI's GPT-4 model is a large multimodal model that can accept image
inputs and produce text outputs. It was released in March 2023 and
demonstrates strong performance across many professional and academic
benchmarks.
"""
heading = "What is GPT-4?"
result = score_passage(text, heading)
print(f"Total score: {result['total_score']}")
print(f"Breakdown: {result['breakdown']}")
Summary
- The GEO Score quantifies AI citation readiness through six weighted sub-scores, with AI Citability & Visibility carrying the highest weight at 25%.
- The
scripts/citability_scorer.pymodule analyzes content blocks across five dimensions: Answer Block Quality, Self-Containment, Structural Readability, Statistical Density, and Uniqueness Signals. - Optimal passages contain 134-167 words, maintain under 2% pronoun density, and include at least 3 proper nouns for maximum self-containment scores.
- The
analyze_page_citabilitypipeline segments HTML, applies dimensional heuristics, and aggregates results into diagnostic JSON including grade distributions. - Crawler access permissions and
llms.txtpresence significantly impact the final score, with potential penalties of -15 points per blocked AI crawler and bonuses up to +30 points for validllms.txtfiles.
Frequently Asked Questions
What is the optimal content length for AI citation readiness?
The citability scorer in scripts/citability_scorer.py identifies 134-167 words as the optimal passage length for the Self-Containment dimension. Content blocks within this range score maximum points for the "optimal word count" criterion, while passages significantly shorter or longer receive proportional deductions.
How does the GEO Score handle blocked AI crawlers?
The framework checks robots.txt for restrictions targeting specific AI user-agents. According to agents/geo-ai-visibility.md, critical blockers (like GPTBot or Claude-Web) incur -15 point deductions per blocker, while secondary restrictions incur -5 point deductions. Missing sitemap references also trigger penalties.
Can I use the citability scorer on local HTML files?
Yes. The score_passage function accepts raw text and heading parameters directly, allowing you to analyze content without fetching URLs. For full page analysis, you can modify analyze_page_citability to read local HTML files instead of fetching remote URLs, though the standard implementation in scripts/citability_scorer.py targets live web pages.
What makes a high-scoring answer block?
Answer blocks scoring 90-100 points typically feature definition patterns ("X is a...") within the first 60 words, question-style headings, low pronoun density (<2%), 10-20 word average sentence length, and statistical references (percentages, years, named sources). The rubric in docs/scoring-methodology.md emphasizes self-contained explanations that require no external context for AI systems to understand.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →