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
- 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_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
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 credentials or optional tools are available, use direct DataForSEO calls for real SERP positions and backlink data with 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---2name: seo-page3description: >4 Deep single-page SEO analysis covering on-page elements, content quality,5 technical meta tags, schema, images, and performance. Use when user says6 "analyze this page", "check page SEO", "single URL", "check this page",7 "page analysis", or provides a single URL for review.8user-invocable: true9argument-hint: "[url]"10license: MIT11metadata:12 author: AgriciDaniel13 version: "2.2.5"14 category: seo15---1617# Single Page Analysis1819## What to Analyze2021### On-Page SEO22- Title tag: 50-60 characters, includes primary keyword, unique23- Meta description: 150-160 characters, compelling, includes keyword24- H1: exactly one, matches page intent, includes keyword25- H2-H6: logical hierarchy (no skipped levels), descriptive26- URL: short, descriptive, hyphenated, no parameters27- Internal links: sufficient, relevant anchor text, no orphan pages28- External links: to authoritative sources, reasonable count2930### Content Quality31- Word count vs page type minimums (see quality-gates.md)32- Readability: Flesch Reading Ease score, grade level33- Keyword density: natural (1-3%), semantic variations present34- E-E-A-T signals: author bio, credentials, first-hand experience markers35- Content freshness: publication date, last updated date3637### Technical Elements38- Canonical tag: present, self-referencing or correct39- Meta robots: index/follow unless intentionally blocked40- Open Graph: og:title, og:description, og:image, og:url41- Twitter Card: twitter:card, twitter:title, twitter:description42- Hreflang: if multi-language, correct implementation4344### Schema Markup45- Detect all types (JSON-LD preferred)46- Validate required properties47- Identify missing opportunities48- Never recommend HowTo (deprecated) or FAQ for rich results (retired May 2026); existing FAQPage need not be removed, use QAPage for genuine Q&A4950### Images51- Alt text: present, descriptive, includes keywords where natural52- File size: flag >200KB (warning), >500KB (critical)53- Format: recommend WebP/AVIF over JPEG/PNG54- Dimensions: width/height set for CLS prevention55- 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` placeholders5657### Core Web Vitals (reference only, not measurable from HTML alone)58- Flag potential LCP issues (huge hero images, render-blocking resources)59- Flag potential INP issues (heavy JS, no async/defer)60- Flag potential CLS issues (missing image dimensions, injected content)6162## Output6364### Page Score Card65```66Overall Score: XX/1006768On-Page SEO: XX/100 ████████░░69Content Quality: XX/100 ██████████70Technical: XX/100 ███████░░░71Schema: XX/100 █████░░░░░72Images: XX/100 ████████░░73```7475### Issues Found76Organized by priority: Critical -> High -> Medium -> Low7778### Recommendations79Specific, actionable improvements with expected impact8081### Schema Suggestions82Ready-to-use JSON-LD code for detected opportunities8384## DataForSEO Integration (Optional)8586If DataForSEO credentials or optional tools are available, use direct DataForSEO calls for real SERP positions and backlink data with spam scores.8788## Error Handling8990| Scenario | Action |91|----------|--------|92| URL unreachable (DNS failure, connection refused) | Report the error clearly. Do not guess page content. Suggest the user verify the URL and try again. |93| 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. |94| 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. |