---
title: "Analyze AEO"
method: GET
path: "/api/v1/aeo"
tags: ["Analysis"]
---

# Analyze AEO

`GET /api/v1/aeo`

## Request

- Base URL: `https://llmse.ai`
- URL: `https://llmse.ai/api/v1/aeo`
- Auth: one of:
  - none
  - HTTP bearer

Evaluates how well content is optimized for AI answer engines (ChatGPT, Perplexity, Gemini, Claude). Analyzes Q&A patterns, FAQ/HowTo schema, direct answer snippets, entity clarity, source citations, statistics, and schema completeness. Includes full Citation Readiness analysis, AI agent readiness signals (llms.txt, robots.txt, SSR detection, WebMCP), and clickbait penalty.

## Query parameters

- `url` string, uri, required

## Response `200`

AEO analysis result

- AEOResult
  - `url` string
  - `cached` boolean
  - `aeo_score` integer, required: Overall AEO score (0-100). Additive across 10 metrics with clickbait penalty up to -10.
  - `aeo_grade` 'A' | 'B' | 'C' | 'D' | 'F', required: Letter grade. Thresholds: A>=85, B>=70, C>=55, D>=40, F<40.
  - `aeo_metrics` object, required: Individual AEO metric scores across 10 categories totaling 100 points
    - `answer_format` object
      - `score` integer
      - `max_score` integer
      - `qa_pairs_count` integer
      - `signals` string[]
    - `faq_schema` object
      - `score` integer
      - `max_score` integer
      - `has_schema` boolean
      - `has_content` boolean
      - `is_valid` boolean, nullable
    - `howto_schema` object
      - `score` integer
      - `max_score` integer
      - `has_schema` boolean
      - `has_content` boolean
      - `is_valid` boolean, nullable
    - `direct_snippets` object
      - `score` integer
      - `max_score` integer
      - `snippet_count` integer
      - `avg_length` number
      - `max_length` integer
    - `entity_clarity` object
      - `score` integer
      - `max_score` integer
      - `definitions_count` integer
      - `avg_length` number
      - `has_glossary` boolean
    - `source_citations` object
      - `score` integer
      - `max_score` integer
      - `citation_count` integer
      - `by_type` object
      - `signals` string[]
    - `statistics` object
      - `score` integer
      - `max_score` integer
      - `statistics_count` integer
      - `by_type` object
      - `signals` string[]
    - `schema_completeness` object
      - `score` integer
      - `max_score` integer
      - `has_organization_schema` boolean
      - `has_article_schema` boolean
      - `has_author_schema` boolean
      - `is_article_page` boolean
      - `schema_types_count` integer
    - `content_freshness` object
      - `score` integer
      - `max_score` integer
      - `signal_count` integer
      - `by_type` object
    - `topical_authority` object
      - `score` integer
      - `max_score` integer
      - `word_count` integer
      - `heading_count` integer
      - `internal_links` integer
      - `external_links` integer
      - `has_table_of_contents` boolean
    - `clickbait_penalty` object
      - `penalty` integer: Points deducted (0 to -10)
      - `detected_count` integer
      - `patterns` string[]
  - `citation` object, required: Full Citation Readiness analysis nested within AEO
    - `score` integer: Citation readiness score (0-100)
    - `grade` 'A' | 'B' | 'C' | 'D' | 'F'
    - `category_scores` object
      - `structure` integer
      - `schema` integer
      - `content` integer
      - `freshness` integer
      - `technical` integer
    - `issues` CategorizedIssues: Issues grouped by severity level
      - `critical` Issue[], required
        - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
        - `message` string, required: Human-readable issue description
        - `impact` string, required: Impact level of the issue
      - `warnings` Issue[], required
        - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
        - `message` string, required: Human-readable issue description
        - `impact` string, required: Impact level of the issue
      - `info` Issue[], required
        - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
        - `message` string, required: Human-readable issue description
        - `impact` string, required: Impact level of the issue
    - `signals` object: Citation signals by category
      - `structure` string[]
      - `schema` string[]
      - `content` string[]
      - `freshness` string[]
      - `technical` string[]
    - `recommendations` string[]
    - `meta` object
  - `issues` CategorizedIssues, required: Issues grouped by severity level
    - `critical` Issue[], required
      - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
      - `message` string, required: Human-readable issue description
      - `impact` string, required: Impact level of the issue
    - `warnings` Issue[], required
      - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
      - `message` string, required: Human-readable issue description
      - `impact` string, required: Impact level of the issue
    - `info` Issue[], required
      - `code` string, required: Machine-readable issue code (e.g., 'SEO_NO_TITLE', 'EEAT_NO_AUTHOR')
      - `message` string, required: Human-readable issue description
      - `impact` string, required: Impact level of the issue
  - `signals` object, required: Detected AEO signals
    - `qa_patterns` object[]
      - `question` string
      - `source` string
    - `direct_snippets` object[]
      - `text` string
      - `words` integer
      - `source` string
    - `entity_definitions` object[]
      - `term` string
      - `pattern` string
    - `source_citations` object[]
      - `text` string
      - `type` string
      - `source` string
    - `statistics` object[]
      - `text` string
      - `type` string
    - `summary_blocks_count` integer
    - `has_faq_content` boolean
    - `has_howto_content` boolean
    - `has_glossary` boolean
    - `has_organization_schema` boolean
    - `has_article_schema` boolean
    - `has_author_schema` boolean
    - `is_article_page` boolean
    - `clickbait_signals` object[]
      - `text` string
      - `pattern` string
    - `freshness_signals` object[]
      - `text` string
      - `type` string
    - `topical_authority` object, nullable
      - `word_count` integer
      - `heading_count` integer
      - `internal_links` integer
      - `external_links` integer
      - `has_table_of_contents` boolean
  - `recommendations` string[], required
  - `agent_readiness` object, required: AI agent readiness signals (llms.txt, robots.txt, SSR detection, WebMCP)
    - `llms_txt` object
      - `present` boolean
      - `valid` boolean
      - `issues` string[]
    - `llms_full_txt` object
      - `present` boolean
    - `robots_txt` object
      - `ai_policies` string[]
      - `crawlers_blocked` string[]
      - `crawlers_allowed` string[]
      - `crawlers_unknown` string[]
    - `rendering` object
      - `is_server_rendered` boolean
      - `signals` string[]
    - `webmcp` object
      - `is_ready` boolean
      - `signals` string[]

## Other responses

- `400`: Invalid request
- `429`: Rate limited

---

[API](https://skmtc.dev/llmse/apis/llmse-api.md) · [All operations](https://skmtc.dev/llmse/apis/llmse-api/llms.txt) · [OpenAPI document](https://skmtc.dev/llmse/apis/llmse-api/revisions/8aedf67208e4?raw)
