Give us a page link and the phrase you want to be found
Single Page Analysis

Give us a page link and the phrase you want to be found for; get back a scored report of what's hurting it and exactly what to fix first.
--- name: seo-page description: > Deep single-page SEO analysis covering on-page elements, content quality, technical meta tags, schema, images, and performance. Use when user says "analyze this page", "check page SEO", "single URL", "check this page", "page analysis", or provides a single URL for review. user-invocable: true argument-hint: "[url]" license: MIT metadata: author: AgriciDaniel version: "2.3.1" category: seo --- # Single Page Analysis
Overview
If DataForSEO MCP tools are available, use serp_organic_live_advanced for real SERP positions and backlinks_summary for backlink data and spam scores.
Manual install (npx, ZIP)
Claude Code
npx skills add AgriciDaniel/claude-seo --skill seo-page -g -a claude-codeClaude Code (manual)
mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/AgriciDaniel/claude-seo/tar.gz/92795530b4cc \
| tar -xz -C ~/.claude/skills --strip-components=2 claude-seo-92795530b4cc/skills/seo-pageWindows (PowerShell)
New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/ebda47a3839f4d9abd25/seo-page.zip" -OutFile "$env:TEMP\seo-page.zip"; Expand-Archive "$env:TEMP\seo-page.zip" -DestinationPath "$HOME\.claude\skills" -ForceClaude.ai / desktop
Codex, Cursor, other agents
Connects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md4.5 KBLICENSE.txt143 B
Read the files here
AgriciDaniel/
SKILL.md
Show the full text102 lines
Single Page Analysis
What to Analyze
On-Page SEO
- Title tag: 50-60 characters, includes primary keyword, unique
- Meta description: 150-160 characters, compelling, includes keyword
- Meta description is not a restatement of the title: run
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run metadata_template.py --title "<title>" --description "<desc>" --json(heuristic, deterministic string comparison). A description that opens by repeating its own title and closes on a stock CTA ("Try it free now.", "Start free!") is templated metadata, the shape bulk generation jobs produce site-wide, and duplicated or templated metadata is a documented content-quality problem regardless of how original the body copy is - H1: exactly one, matches page intent, includes keyword
- H2-H6: logical hierarchy (no skipped levels), descriptive
- URL: short, descriptive, hyphenated, no parameters
- Internal links: sufficient, relevant anchor text, no orphan pages
- External links: to authoritative sources, reasonable count
Content Quality
- Word count vs page type minimums (see quality-gates.md)
- Readability: Flesch Reading Ease score, grade level
- Keyword density: natural (1-3%), semantic variations present
- E-E-A-T signals: author bio, credentials, first-hand experience markers
- Content freshness: publication date, last updated date
Technical Elements
- Canonical tag: present, self-referencing or correct
- Meta robots: index/follow unless intentionally blocked
- Open Graph: og:title, og:description, og:image, og:url
- Twitter Card: twitter:card, twitter:title, twitter:description
- Hreflang: if multi-language, correct implementation
Schema Markup
- Detect all types (JSON-LD preferred)
- Validate required properties
- Identify missing opportunities
- Never recommend HowTo (deprecated) or FAQ for rich results (retired May 2026); existing FAQPage need not be removed, use QAPage for genuine Q&A
Images
- Alt text: present, descriptive, includes keywords where natural
- File size: flag >200KB (warning), >500KB (critical)
- Format: recommend WebP/AVIF over JPEG/PNG
- Dimensions: width/height set for CLS prevention
- Lazy loading: report
lazy_methodper image (native | perfmatters | ewww | js-generic | none). Do not flag "not lazy-loaded" when JS lazy-loaders (Perfmatters, EWWW, lazysizes) are detected, they intentionally strip the nativeloading="lazy"attribute and usedata-srcplaceholders
Core Web Vitals (reference only, not measurable from HTML alone)
- Flag potential LCP issues (huge hero images, render-blocking resources)
- Flag potential INP issues (heavy JS, no async/defer)
- Flag potential CLS issues (missing image dimensions, injected content)
Output
Page Score Card
Overall Score: XX/100
On-Page SEO: XX/100 ████████░░
Content Quality: XX/100 ██████████
Technical: XX/100 ███████░░░
Schema: XX/100 █████░░░░░
Images: XX/100 ████████░░
Issues Found
Organized by priority: Critical -> High -> Medium -> Low
Recommendations
Specific, actionable improvements with expected impact
Schema Suggestions
Ready-to-use JSON-LD code for detected opportunities
DataForSEO Integration (Optional)
If DataForSEO MCP tools are available, use serp_organic_live_advanced for real SERP positions and backlinks_summary for backlink data and spam scores.
Error Handling
| Scenario | Action |
|---|---|
| URL unreachable (DNS failure, connection refused) | Report the error clearly. Do not guess page content. Suggest the user verify the URL and try again. |
| Page requires authentication (401/403) | Report that the page is behind authentication. Suggest the user provide the rendered HTML directly or a publicly accessible URL. |
| JavaScript-rendered content (empty body in HTML) | Note that key content may be rendered client-side. Analyze the available HTML and flag that results may be incomplete. Suggest using a browser-rendered snapshot if available. |
| 1 | |
| 2 | name seo-page |
| 3 | description > |
| 4 | Deep single-page SEO analysis covering on-page elements, content quality, |
| 5 | technical meta tags, schema, images, and performance. Use when user says |
| 6 | "analyze this page", "check page SEO", "single URL", "check this page", |
| 7 | "page analysis", or provides a single URL for review. |
| 8 | user-invocable true |
| 9 | argument-hint "[url]" |
| 10 | license MIT |
| 11 | metadata |
| 12 | author AgriciDaniel |
| 13 | version "2.3.1" |
| 14 | category seo |
| 15 | |
| 16 | |
| 17 | # Single Page Analysis |
| 18 | |
| 19 | ## What to Analyze |
| 20 | |
| 21 | ### On-Page SEO |
| 22 | Title tag: 50-60 characters, includes primary keyword, unique |
| 23 | Meta description: 150-160 characters, compelling, includes keyword |
| 24 | Meta description is not a restatement of the title: run |
| 25 | `"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run metadata_template.py --title "<title>" --description "<desc>" --json` |
| 26 | (heuristic, deterministic string comparison). A description that opens by |
| 27 | repeating its own title and closes on a stock CTA ("Try it free now.", |
| 28 | "Start free!") is templated metadata, the shape bulk generation jobs produce |
| 29 | site-wide, and duplicated or templated metadata is a documented |
| 30 | content-quality problem regardless of how original the body copy is |
| 31 | H1: exactly one, matches page intent, includes keyword |
| 32 | H2-H6: logical hierarchy (no skipped levels), descriptive |
| 33 | URL: short, descriptive, hyphenated, no parameters |
| 34 | Internal links: sufficient, relevant anchor text, no orphan pages |
| 35 | External links: to authoritative sources, reasonable count |
| 36 | |
| 37 | ### Content Quality |
| 38 | Word count vs page type minimums (see quality-gates.md) |
| 39 | Readability: Flesch Reading Ease score, grade level |
| 40 | Keyword density: natural (1-3%), semantic variations present |
| 41 | E-E-A-T signals: author bio, credentials, first-hand experience markers |
| 42 | Content freshness: publication date, last updated date |
| 43 | |
| 44 | ### Technical Elements |
| 45 | Canonical tag: present, self-referencing or correct |
| 46 | Meta robots: index/follow unless intentionally blocked |
| 47 | Open Graph: og:title, og:description, og:image, og:url |
| 48 | Twitter Card: twitter:card, twitter:title, twitter:description |
| 49 | Hreflang: if multi-language, correct implementation |
| 50 | |
| 51 | ### Schema Markup |
| 52 | Detect all types (JSON-LD preferred) |
| 53 | Validate required properties |
| 54 | Identify missing opportunities |
| 55 | Never recommend HowTo (deprecated) or FAQ for rich results (retired May 2026); existing FAQPage need not be removed, use QAPage for genuine Q&A |
| 56 | |
| 57 | ### Images |
| 58 | Alt text: present, descriptive, includes keywords where natural |
| 59 | File size: flag >200KB (warning), >500KB (critical) |
| 60 | Format: recommend WebP/AVIF over JPEG/PNG |
| 61 | Dimensions: width/height set for CLS prevention |
| 62 | Lazy loading: report `lazy_method` per image (native | perfmatters | ewww | js-generic | none). Do not flag "not lazy-loaded" when JS lazy-loaders (Perfmatters, EWWW, lazysizes) are detected, they intentionally strip the native `loading="lazy"` attribute and use `data-src` placeholders |
| 63 | |
| 64 | ### Core Web Vitals (reference only, not measurable from HTML alone) |
| 65 | Flag potential LCP issues (huge hero images, render-blocking resources) |
| 66 | Flag potential INP issues (heavy JS, no async/defer) |
| 67 | Flag potential CLS issues (missing image dimensions, injected content) |
| 68 | |
| 69 | ## Output |
| 70 | |
| 71 | ### Page Score Card |
| 72 | |
| 73 | Overall Score: XX/100 |
| 74 | |
| 75 | On-Page SEO: XX/100 ████████░░ |
| 76 | Content Quality: XX/100 ██████████ |
| 77 | Technical: XX/100 ███████░░░ |
| 78 | Schema: XX/100 █████░░░░░ |
| 79 | Images: XX/100 ████████░░ |
| 80 | |
| 81 | |
| 82 | ### Issues Found |
| 83 | Organized by priority: Critical -> High -> Medium -> Low |
| 84 | |
| 85 | ### Recommendations |
| 86 | Specific, actionable improvements with expected impact |
| 87 | |
| 88 | ### Schema Suggestions |
| 89 | Ready-to-use JSON-LD code for detected opportunities |
| 90 | |
| 91 | ## DataForSEO Integration (Optional) |
| 92 | |
| 93 | If DataForSEO MCP tools are available, use `serp_organic_live_advanced` for real SERP positions and `backlinks_summary` for backlink data and spam scores. |
| 94 | |
| 95 | ## Error Handling |
| 96 | |
| 97 | | Scenario | Action | |
| 98 | |----------|--------| |
| 99 | | URL unreachable (DNS failure, connection refused) | Report the error clearly. Do not guess page content. Suggest the user verify the URL and try again. | |
| 100 | | Page requires authentication (401/403) | Report that the page is behind authentication. Suggest the user provide the rendered HTML directly or a publicly accessible URL. | |
| 101 | | JavaScript-rendered content (empty body in HTML) | Note that key content may be rendered client-side. Analyze the available HTML and flag that results may be incomplete. Suggest using a browser-rendered snapshot if available. | |
| 102 |
Details
- Updated
- Sep 11, 2026
- License
- MIT
- Stars on the repo
- ★ 17,394
- Checked
- Source
- AgriciDaniel/claude-seo ↗
- Creator
- AgriciDaniel · 130 listings
Made with seo-page

Single Page Analysis — Claude SEO /seo command demo in Claude Code terminal (from the AgriciDaniel/claude-seo README)

Single Page Analysis — Claude SEO /seo audit demo: parallel subagents producing a prioritized action plan (from the AgriciDaniel/claude-seo README)
Similar skills
See all →
SkillShow experiment dashboard with results, active loops/ar:ar-status — Experiment Dashboard
SkillTurn a LinkedIn Analytics exportAnalytics dashboard
SkillGenerate a pre-earnings briefing for any stock using YahooEarnings Preview Skill
SkillVet a perf measurement before you report or act on itBenchmark checklist
SkillReport a bug, file an issue, submit a bug reportReport Issue — mobile-app
SkillBuild the agency dashboard across all client brands: health/digital-marketing-pro:agency-dashboardMore from AgriciDaniel
SkillThe Lighthouse Agentic Browsing fractionAgentic Browsing Readiness
SkillOptimize content for AI Overviews , ChatGPT web searchAI Search / GEO Optimization (May 2026)
SkillReferring domains, anchor text distributionBacklink Profile Analysis
SkillYou share your Amazon advertising numbers and goals; you getAmazon Ads Audit
SkillPaste what you're spending on Apple Search AdsApple Ads Audit
SkillPaste the sales and spend numbers each ad platform claimsAttribution Audit