---
title: "Analyze SEO"
method: GET
path: "/api/v1/seo"
tags: ["Analysis"]
---

# Analyze SEO

`GET /api/v1/seo`

## Request

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

Analyzes a website for SEO issues including title tags, meta descriptions, headings, images, schema markup, accessibility, performance hints, and more. Returns a score (0-100) and grade (A-F) with prioritized recommendations.

## Query parameters

- `url` string, uri, required

## Response `200`

SEO analysis result

- SEOResult
  - `url` string
  - `cached` boolean
  - `score` integer, required: SEO score (0-100). Deduction-based: starts at 100, subtracts per issue (critical -15, warning -5, info -1).
  - `grade` 'A' | 'B' | 'C' | 'D' | 'F', required: Letter grade. Thresholds: A>=90, B>=80, C>=70, D>=60, F<60.
  - `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
  - `meta` object, required: Extracted SEO metadata from HTML analysis
    - `title` string
    - `title_length` integer
    - `description` string
    - `description_length` integer
    - `h1_count` integer
    - `heading_count` integer
    - `heading_hierarchy` integer[]
    - `has_viewport` boolean
    - `has_canonical` boolean
    - `canonical_url` string
    - `has_lang` boolean
    - `lang` string
    - `has_charset` boolean
    - `has_noindex` boolean
    - `has_nofollow` boolean
    - `total_images` integer
    - `images_without_alt` integer
    - `images_with_empty_alt` integer
    - `has_og_title` boolean
    - `has_og_description` boolean
    - `has_og_image` boolean
    - `has_twitter_card` boolean
    - `has_schema` boolean
    - `schema_types` string[]
    - `word_count` integer
    - `internal_links` integer
    - `external_links` integer
  - `recommendations` string[], required: Prioritized list of improvements

## 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)
