$ -weight: 500;">npm -weight: 500;">install -g foglift-scan
-weight: 500;">npm -weight: 500;">install -g foglift-scan
-weight: 500;">npm -weight: 500;">install -g foglift-scan
foglift --version
foglift --version
foglift --version
foglift scan https://foglift.io
foglift scan https://foglift.io
foglift scan https://foglift.io
foglift scan results for foglift.io Overall ██████████ 96/100 A SEO ██████████ 100/100 A GEO ██████████ 100/100 A AEO █████████░ 88/100 B Perf █████████░ 89/100 B Security ██████████ 100/100 A A11y ██████████ 100/100 A Top Issues: ⚠ 14 external scripts (Performance) ⚠ 1 render-blocking scripts (Performance)
foglift scan results for foglift.io Overall ██████████ 96/100 A SEO ██████████ 100/100 A GEO ██████████ 100/100 A AEO █████████░ 88/100 B Perf █████████░ 89/100 B Security ██████████ 100/100 A A11y ██████████ 100/100 A Top Issues: ⚠ 14 external scripts (Performance) ⚠ 1 render-blocking scripts (Performance)
foglift scan results for foglift.io Overall ██████████ 96/100 A SEO ██████████ 100/100 A GEO ██████████ 100/100 A AEO █████████░ 88/100 B Perf █████████░ 89/100 B Security ██████████ 100/100 A A11y ██████████ 100/100 A Top Issues: ⚠ 14 external scripts (Performance) ⚠ 1 render-blocking scripts (Performance)
foglift scan https://foglift.io --json | jq '.scores'
foglift scan https://foglift.io --json | jq '.scores'
foglift scan https://foglift.io --json | jq '.scores'
{ "overall": 96, "seo": 100, "geo": 100, "aeo": 88, "performance": 89, "security": 100, "accessibility": 100
}
{ "overall": 96, "seo": 100, "geo": 100, "aeo": 88, "performance": 89, "security": 100, "accessibility": 100
}
{ "overall": 96, "seo": 100, "geo": 100, "aeo": 88, "performance": 89, "security": 100, "accessibility": 100
}
foglift scan https://ahrefs.com --json | jq '.scores'
foglift scan https://moz.com --json | jq '.scores'
foglift scan https://semrush.com --json | jq '.scores'
foglift scan https://ahrefs.com --json | jq '.scores'
foglift scan https://moz.com --json | jq '.scores'
foglift scan https://semrush.com --json | jq '.scores'
foglift scan https://ahrefs.com --json | jq '.scores'
foglift scan https://moz.com --json | jq '.scores'
foglift scan https://semrush.com --json | jq '.scores'
{ "topIssues": [ { "category": "GEO", "title": "No FAQ section", "description": "Add FAQPage schema for AI extraction.", "severity": "warning" }, { "category": "AEO", "title": "Missing Article schema", "description": "LLMs cite more reliably when Article JSON-LD is present." }, { "category": "AEO", "title": "Low heading density", "description": "Break long sections with H2/H3 to improve extractability." } ]
}
{ "topIssues": [ { "category": "GEO", "title": "No FAQ section", "description": "Add FAQPage schema for AI extraction.", "severity": "warning" }, { "category": "AEO", "title": "Missing Article schema", "description": "LLMs cite more reliably when Article JSON-LD is present." }, { "category": "AEO", "title": "Low heading density", "description": "Break long sections with H2/H3 to improve extractability." } ]
}
{ "topIssues": [ { "category": "GEO", "title": "No FAQ section", "description": "Add FAQPage schema for AI extraction.", "severity": "warning" }, { "category": "AEO", "title": "Missing Article schema", "description": "LLMs cite more reliably when Article JSON-LD is present." }, { "category": "AEO", "title": "Low heading density", "description": "Break long sections with H2/H3 to improve extractability." } ]
}
foglift scan batch \ https://foglift.io \ https://ahrefs.com \ https://moz.com \ https://semrush.com \ --json > competitors.json
foglift scan batch \ https://foglift.io \ https://ahrefs.com \ https://moz.com \ https://semrush.com \ --json > competitors.json
foglift scan batch \ https://foglift.io \ https://ahrefs.com \ https://moz.com \ https://semrush.com \ --json > competitors.json
jq -r '.[] | [.url, .scores.aeo, .scores.overall] | @tsv' competitors.json
jq -r '.[] | [.url, .scores.aeo, .scores.overall] | @tsv' competitors.json
jq -r '.[] | [.url, .scores.aeo, .scores.overall] | @tsv' competitors.json
# .github/workflows/ai-audit.yml
name: AI Search Audit on: pull_request: branches: [main] jobs: audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Foglift CLI run: -weight: 500;">npm -weight: 500;">install -g foglift-scan - name: Audit production URL run: foglift scan https://example.com --threshold=85
# .github/workflows/ai-audit.yml
name: AI Search Audit on: pull_request: branches: [main] jobs: audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Foglift CLI run: -weight: 500;">npm -weight: 500;">install -g foglift-scan - name: Audit production URL run: foglift scan https://example.com --threshold=85
# .github/workflows/ai-audit.yml
name: AI Search Audit on: pull_request: branches: [main] jobs: audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Foglift CLI run: -weight: 500;">npm -weight: 500;">install -g foglift-scan - name: Audit production URL run: foglift scan https://example.com --threshold=85
foglift scan https://staging.example.com --threshold=80 \ && echo "AI audit passed" \ || { echo "AI audit failed — check issues before shipping"; exit 1; }
foglift scan https://staging.example.com --threshold=80 \ && echo "AI audit passed" \ || { echo "AI audit failed — check issues before shipping"; exit 1; }
foglift scan https://staging.example.com --threshold=80 \ && echo "AI audit passed" \ || { echo "AI audit failed — check issues before shipping"; exit 1; } - Structured data richness (JSON-LD, not microdata)
- FAQ coverage with FAQPage schema
- Heading clarity — can the model segment your page into answerable chunks
- Entity identity — can it disambiguate your brand from noise
- Content depth and authority — citations, data, original research
- Citation formatting — do you make it easy to quote you
- Topical authority — is your site a source the model has seen cited elsewhere
- AI crawler access — is GPTBot, ClaudeBot, PerplexityBot actually allowed in your robots.txt - Add FAQPage schema to your 10 most-trafficked content pages. This usually moves AEO the most for the least effort. Write actual questions, answer them in 40-80 words each, wrap in JSON-LD.
- Make sure GPTBot, ClaudeBot, PerplexityBot, and Google-Extended are allowed in robots.txt. A surprising number of sites accidentally block them, then wonder why they're not cited.
- Add Article schema to every blog post with author, datePublished, and dateModified. Freshness signals matter more for answer engines than they do for Google, because LLMs are trying to avoid citing stale answers.