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: 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.4license: MIT5---67# Single Page Analysis89## What to Analyze1011### On-Page SEO12- Title tag: 50-60 characters, includes primary keyword, unique13- Meta description: 150-160 characters, compelling, includes keyword14- H1: exactly one, matches page intent, includes keyword15- H2-H6: logical hierarchy (no skipped levels), descriptive16- URL: short, descriptive, hyphenated, no parameters17- Internal links: sufficient, relevant anchor text, no orphan pages18- External links: to authoritative sources, reasonable count1920### Content Quality21- Word count vs page type minimums (see quality-gates.md)22- Readability: Flesch Reading Ease score, grade level23- Keyword density: natural (1-3%), semantic variations present24- E-E-A-T signals: author bio, credentials, first-hand experience markers25- Content freshness: publication date, last updated date2627### Technical Elements28- Canonical tag: present, self-referencing or correct29- Meta robots: index/follow unless intentionally blocked30- Open Graph: og:title, og:description, og:image, og:url31- Twitter Card: twitter:card, twitter:title, twitter:description32- Hreflang: if multi-language, correct implementation3334### Schema Markup35- Detect all types (JSON-LD preferred)36- Validate required properties37- Identify missing opportunities38- Never recommend HowTo (deprecated) or FAQ for rich results (retired May 2026); existing FAQPage need not be removed, use QAPage for genuine Q&A3940### Images41- Alt text: present, descriptive, includes keywords where natural42- File size: flag >200KB (warning), >500KB (critical)43- Format: recommend WebP/AVIF over JPEG/PNG44- Dimensions: width/height set for CLS prevention45- 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` placeholders4647### Core Web Vitals (reference only, not measurable from HTML alone)48- Flag potential LCP issues (huge hero images, render-blocking resources)49- Flag potential INP issues (heavy JS, no async/defer)50- Flag potential CLS issues (missing image dimensions, injected content)5152## Output5354### Page Score Card55```56Overall Score: XX/1005758On-Page SEO: XX/100 ████████░░59Content Quality: XX/100 ██████████60Technical: XX/100 ███████░░░61Schema: XX/100 █████░░░░░62Images: XX/100 ████████░░63```6465### Issues Found66Organized by priority: Critical -> High -> Medium -> Low6768### Recommendations69Specific, actionable improvements with expected impact7071### Schema Suggestions72Ready-to-use JSON-LD code for detected opportunities7374## DataForSEO Integration (Optional)7576If DataForSEO credentials or optional tools are available, use direct DataForSEO calls for real SERP positions and backlink data with spam scores.7778## Error Handling7980| Scenario | Action |81|----------|--------|82| URL unreachable (DNS failure, connection refused) | Report the error clearly. Do not guess page content. Suggest the user verify the URL and try again. |83| 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. |84| 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. |