---
title: ToolRouter — Tool Detail
description: Detailed documentation for a ToolRouter tool including skills, parameters, and examples.
url: https://toolrouter.com/tools/seo
---
# SEO Analysis

Audit web pages and sites for ranking issues. Analyze meta tags, headings, content quality, Core Web Vitals, structured data, images, links, and technical SEO. Surfaces prioritized issues with 0-100 scores for diagnosis and competitor benchmarking.

- **Version:** 0.02
- **Categories:** search, marketing, analytics
- **Workflow:** check_meta → analyze_page → detect_schema → audit_headings → analyze_content → audit_technical → check_vitals → audit_images → extract_keywords → analyze_links → crawl_site → compare_pages

## Skills (12)

### Analyze Page (`analyze_page`)

Full on-page SEO analysis including title, meta, headings, images, links, content length, and structured data presence. Returns a score out of 100 with prioritized issues.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | The URL to analyze |

**Returns:** SEO score (0-100), meta tag status, heading counts, image/link audit, and prioritized issues list

**Examples:**

*Analyze a homepage:*

```json
{
  "url": "https://example.com"
}
```

*Analyze a blog post:*

```json
{
  "url": "https://example.com/blog/my-post"
}
```

### Detect Schema (`detect_schema`)

Find and validate all structured data (JSON-LD, Microdata, RDFa) on a page. Checks for common errors and provides recommendations for missing schema types.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | The URL to scan for structured data |

**Returns:** List of schemas found with type, format, validation status, issues, and recommendations

**Examples:**

*Check schema markup on a product page:*

```json
{
  "url": "https://example.com/product/shoes"
}
```

### Check Meta Tags (`check_meta`)

Quick audit of all meta tags on a page: title, description, canonical, robots, Open Graph, Twitter Card, viewport, and other SEO-relevant tags.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | The URL to check meta tags for |

**Returns:** All meta tags found (title, description, OG, Twitter, canonical, robots) with issues

**Examples:**

*Check meta tags on a landing page:*

```json
{
  "url": "https://example.com/pricing"
}
```

### Audit Headings (`audit_headings`)

Analyze the heading hierarchy (H1-H6) of a page for SEO best practices. Checks for missing H1, skipped levels, duplicates, empty headings, and content quality.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | The URL to audit heading structure |

**Returns:** Heading hierarchy with scores, level counts, and issues like skipped levels or duplicates

**Examples:**

*Audit headings on a content page:*

```json
{
  "url": "https://example.com/blog/guide"
}
```

### Analyze Content Quality (`analyze_content`)

Comprehensive content quality analysis with readability scoring (Flesch-Kincaid, Gunning Fog, Coleman-Liau, SMOG, ARI), E-E-A-T signal detection, keyword density analysis, and content depth scoring.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | The URL to analyze content quality |

**Returns:** Content quality score (0-100), readability metrics (6 algorithms), E-E-A-T signals, keyword density analysis, and content depth assessment

**Examples:**

*Analyze blog post content quality:*

```json
{
  "url": "https://example.com/blog/guide"
}
```

### Technical SEO Audit (`audit_technical`)

Technical SEO audit covering robots.txt validation, sitemap.xml analysis, redirect chain detection, canonical tag verification, hreflang validation, and security headers (HSTS, CSP, X-Frame-Options).

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | The URL to audit technical SEO |

**Returns:** Technical SEO score (0-100), robots.txt status, sitemap validation, redirect chain, canonical check, hreflang issues, and security headers audit

**Examples:**

*Run technical SEO audit on a site:*

```json
{
  "url": "https://example.com"
}
```

### Check Core Web Vitals (`check_vitals`)

Core Web Vitals analysis via PageSpeed Insights API. Returns LCP, CLS, FCP, TBT, Speed Index, TTFB, Lighthouse category scores, and CrUX real-user field data when available.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | The URL to check Core Web Vitals |
| `strategy` | string | No | Device strategy (default: mobile) (mobile, desktop) |

**Returns:** Core Web Vitals metrics (LCP, CLS, FCP, TBT, Speed Index), Lighthouse scores, CrUX field data, and traffic-light ratings per metric

**Examples:**

*Check Core Web Vitals for a page:*

```json
{
  "url": "https://example.com"
}
```

### Crawl & Audit Site (`crawl_site`)

Crawl a website (up to 100 pages) with per-page SEO extraction and site-wide issue summary. Detects missing titles, thin content, broken links, duplicate meta, and missing schema across the entire site.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | The starting URL to crawl |
| `max_pages` | number | No | Maximum pages to crawl (default: 20, max: 100) |
| `timeout_ms` | number | No | Per-request timeout in ms (default: 10000) |

**Returns:** Site-wide SEO health score, per-page data (title, meta, headings, images, links, word count), and aggregated issue summary

**Examples:**

*Crawl and audit a small site:*

```json
{
  "url": "https://example.com",
  "max_pages": 10
}
```

### Analyze Link Structure (`analyze_links`)

Internal link graph analysis with link depth calculation, orphan page detection, anchor text distribution, external link audit, and broken link checking via HEAD requests.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | The URL to analyze link structure |
| `max_pages` | number | No | Maximum pages to crawl for link analysis (default: 30, max: 50) |
| `check_broken` | boolean | No | Whether to check for broken links via HEAD requests (default: true) |

**Returns:** Link structure score (0-100), link depth map, orphan pages, most/least linked pages, anchor text distribution, and broken links

**Examples:**

*Analyze internal link structure:*

```json
{
  "url": "https://example.com"
}
```

### Audit Images (`audit_images`)

Image SEO audit checking alt text, file sizes, dimensions, lazy loading, responsive images (srcset), and modern format usage (WebP/AVIF). Includes per-image analysis and aggregate statistics.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | The URL to audit images |
| `check_sizes` | boolean | No | Whether to HEAD-request images to check file sizes (default: true) |

**Returns:** Image SEO score (0-100), per-image analysis (alt, dimensions, size, format, lazy loading), and aggregate statistics

**Examples:**

*Audit images on a product page:*

```json
{
  "url": "https://example.com/products/shoes"
}
```

### Extract Keywords (`extract_keywords`)

TF-IDF keyword extraction from page content with density analysis by position (title, H1, meta description, first paragraph, URL). Includes n-gram analysis for multi-word phrases.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url` | string | Yes | The URL to extract keywords from |
| `max_keywords` | number | No | Maximum keywords to return (default: 20, max: 50) |

**Returns:** Top keywords with TF-IDF scores, density percentages, position prominence (title/H1/meta/paragraph), and n-gram phrases

**Examples:**

*Extract keywords from a blog post:*

```json
{
  "url": "https://example.com/blog/seo-guide"
}
```

### Compare Pages (`compare_pages`)

Side-by-side SEO comparison of two URLs across all metrics: content length, readability, meta tags, schema, headings, response time, and keyword overlap. Determines winner per category.

**Parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `url_a` | string | Yes | First URL to compare |
| `url_b` | string | Yes | Second URL to compare |

**Returns:** Per-category comparison with winner designation, metric values for both pages, and overall winner summary

**Examples:**

*Compare two competing pages:*

```json
{
  "url_a": "https://example.com/page",
  "url_b": "https://competitor.com/page"
}
```

## Quick Start

```bash
# Via CLI
TOOLROUTER_API_KEY=tr_live_xxx npx -y toolrouter-mcp call seo analyze_page --url https://example.com

# Via REST API
curl -H "Authorization: Bearer tr_live_xxx" \
     -d '{"tool":"seo","skill":"analyze_page","input":{"url":"https://example.com"}}' \
     https://api.toolrouter.com/v1/tools/call
```

## Frequently Asked Questions

### What does the SEO score actually measure?

It scores ranking issues across meta tags, headings, content quality, structured data, images, links, Core Web Vitals, and technical SEO, with a 0 to 100 style diagnostic view.

### Can I use it on a single page or an entire site?

Both. You can audit one URL, crawl a site, or compare pages, depending on whether you want a page-level fix list or a broader site review.

### Will it show Core Web Vitals and page speed issues?

Yes. Core Web Vitals are part of the audit, so performance problems show up alongside SEO and accessibility findings.

### What should I set as the default input?

Set your primary domain. The tool uses that when no URL is provided, which is handy for repeated audits.

---

## Get Started with ToolRouter

**Already connected?** Call any tool with `use_tool({ tool, skill, input })`. Browse tools with `discover` or visit https://toolrouter.com/llms-full.txt

**New to ToolRouter?** Connect with one command (no API key needed — auto-provisions on first use):

```bash
# MCP (Claude Code, Codex CLI)
claude mcp add toolrouter -- npx -y toolrouter-mcp

# MCP (Cursor, Windsurf, Cline, VS Code, Gemini CLI, Claude Desktop)
{"mcpServers":{"toolrouter":{"command":"npx","args":["-y","toolrouter-mcp"]}}}

# Claude Chat / Claude Cowork / Claude Mobile — add as a connector:
# Settings → Connectors → Add custom connector → URL: https://api.toolrouter.com/mcp

# ChatGPT — add as an app:
# Settings → Apps → Advanced settings → enable Developer mode → Create app → MCP Server URL: https://api.toolrouter.com/mcp

# CLI (works instantly, no restart needed)
npx -y toolrouter-mcp tools                    # browse all tools
npx -y toolrouter-mcp search "seo"             # search by keyword
npx -y toolrouter-mcp call seo analyze_page --url https://example.com
```

Free tools work immediately. For paid tools, visit https://toolrouter.com/claim to add credits.

All platforms: https://toolrouter.com/connect | Full catalog: https://toolrouter.com/llms-full.txt | Docs: https://toolrouter.com/docs