GEO Optimizer
Generative Engine Optimization (GEO) for AI search visibility.
What is GEO?
GEO is NOT traditional SEO. AI search engines (ChatGPT, Perplexity, Claude, Gemini) work fundamentally differently:
- They fetch raw HTML - Many don't render JavaScript
- They have size limits - Crawlers abandon pages >1MB HTML
- They evaluate confidence - Hedged language ("maybe", "possibly") ranks 3x lower than confident assertions
- They need machine-readable metadata - AgentFacts/NANDA protocol for AI agent discovery
Quick Audit Workflow
1. Technical Visibility Check
# Run full GEO audit
python3 ${CLAUDE_SKILL_DIR}/scripts/audit-geo.py https://example.com
# Check HTML size and JS dependency
curl -sI https://example.com | grep -i content-length
2. Content Authority Analysis
# Check hedge density of your content
python3 ${CLAUDE_SKILL_DIR}/scripts/check-hedge-density.py --url https://example.com/blog/post
# Or analyze text directly
python3 ${CLAUDE_SKILL_DIR}/scripts/check-hedge-density.py --text "Your content here"
3. Agent Infrastructure Setup
# Generate AgentFacts schema for your domain
python3 ${CLAUDE_SKILL_DIR}/scripts/generate-agentfacts.py \
--domain example.com \
--agent-name "Example Service" \
--capabilities text,image \
--output /.well-known/agent-facts
Core Metrics
Hedge Density Score
Measures uncertainty language in content. Target: <0.2%
Hedge words to avoid:
- maybe, possibly, perhaps, might, could be
- however, although, it seems, arguably
- some believe, it appears, potentially
Why it matters: Research shows confident citations rank 3x higher in AI responses. Every hedge word signals uncertainty to LLMs.
See: references/hedge-density.md
HTML Size Budget
Maximum: 1MB raw HTML. Above this threshold:
- 18% of pages abandoned by crawlers
- Content truncation risks
- Slower indexing
Check with: curl -sI URL | grep content-length
See: references/technical-visibility.md
JS Dependency Risk
AI crawlers vary in JavaScript rendering:
- Rendering crawlers: GPTBot, PerplexityBot (sometimes)
- Non-rendering: ClaudeBot, many others
If your content requires JS to display, you're invisible to ~40% of AI crawlers.
Discovery Gap
Startups face a "recency wall" - 30:1 visibility disadvantage vs established domains:
| Site Age | Visibility | Strategy | |----------|------------|----------| | <2 years | ~3.3% | Web-augmented: Reddit, referring domains | | 2+ years | ~99% | GEO content: entity density, hedge reduction |
See: references/discovery-strategies.md
AgentFacts Setup
The NANDA protocol provides machine-readable metadata for AI agent discovery. Place at /.well-known/agent-facts:
{
"@context": "https://nanda.dev/ns/agent-facts/v1",
"id": "nanda:example.com",
"agent_name": "urn:agent:example:com",
"endpoints": {
"static": ["https://api.example.com/v1/agent"]
},
"capabilities": {
"modalities": ["text"],
"authentication": {
"methods": ["oauth2", "jwt"]
}
},
"trust": {
"certification": "self-attested",
"human_oversight": "true"
}
}
See: references/agentfacts-schema.md
Audit Report Sections
A complete GEO audit covers:
-
Technical Visibility
- HTML payload size (target: <1MB)
- JS dependency assessment
- Crawler accessibility
-
Content Authority
- Hedge density score (target: <0.2%)
- Confidence assessment
- Entity density
-
Discovery Strategy
- Site age analysis
- Recency wall detection
- Recommended approach
-
Agent Infrastructure
- AgentFacts presence
- Schema validation
- NANDA compliance
Scripts
| Script | Purpose |
|--------|---------|
| audit-geo.py | Full GEO audit for a URL |
| check-hedge-density.py | Analyze content confidence |
| generate-agentfacts.py | Create NANDA-compliant schema |
Reference Documentation
| File | Contents |
|------|----------|
| hedge-density.md | Confidence scoring methodology |
| agentfacts-schema.md | NANDA protocol specification |
| technical-visibility.md | Crawler behavior & limits |
| discovery-strategies.md | Startup vs incumbent approaches |
Example Commands
# Full audit with report
python3 ${CLAUDE_SKILL_DIR}/scripts/audit-geo.py https://mysite.com --output report.md
# Quick hedge check
python3 ${CLAUDE_SKILL_DIR}/scripts/check-hedge-density.py --url https://mysite.com/about
# Generate AgentFacts for SaaS
python3 ${CLAUDE_SKILL_DIR}/scripts/generate-agentfacts.py \
--domain myapp.com \
--agent-name "MyApp AI" \
--capabilities text \
--auth oauth2,apikey
Key Takeaways
- GEO != SEO - Different crawlers, different rules
- Confidence wins - Hedge density <0.2% is the target
- Size matters - Stay under 1MB HTML
- JS is risky - Content must work without rendering
- Age affects strategy - Startups need web-augmented signals
- AgentFacts is future-proofing - Implement NANDA now