Single Page Analysis
Shared Data Cache
Step 0 -- Check shared data cache:
Before gathering, check .seo-cache/ for reusable context from related SEO skills.
Reference: ../seo/references/shared-data-cache.md for schemas and dependency map.
Check these cache files when present:
.seo-cache/site-meta.json for domain, business type, industry, and crawl context
.seo-cache/audit-scores.json for prior full-audit priorities
.seo-cache/pages/{url-slug}/page-analysis.json for page-level context when a URL is provided
If found: parse and use clearly valid fields (note "Using cached [X] from [date]")
If missing, corrupt, or irrelevant: continue with fresh evidence
If the user says "refresh" or "re-run": ignore cache reads and overwrite on write
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 (restricted to gov/health)
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: loading="lazy" on below-fold images
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. |
Write to shared data cache
After completing all work, write a concise JSON summary to .seo-cache/ when the workflow produced durable findings.
Use the schemas and naming rules in ../seo/references/shared-data-cache.md; include at least cache_type, analyzed_at, source URL/domain, key findings, issues, recommendations, and tool limitations. Add .seo-cache/ to .gitignore if it is missing.
1---2name: seo-page-23description: 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 Analysis8## Shared Data Cache910**Step 0 -- Check shared data cache:**1112Before gathering, check `.seo-cache/` for reusable context from related SEO skills.13Reference: `../seo/references/shared-data-cache.md` for schemas and dependency map.1415Check these cache files when present:16- `.seo-cache/site-meta.json` for domain, business type, industry, and crawl context17- `.seo-cache/audit-scores.json` for prior full-audit priorities18- `.seo-cache/pages/{url-slug}/page-analysis.json` for page-level context when a URL is provided1920- If found: parse and use clearly valid fields (note "Using cached [X] from [date]")21- If missing, corrupt, or irrelevant: continue with fresh evidence22- If the user says "refresh" or "re-run": ignore cache reads and overwrite on write2324## What to Analyze2526### On-Page SEO27- Title tag: 50-60 characters, includes primary keyword, unique28- Meta description: 150-160 characters, compelling, includes keyword29- H1: exactly one, matches page intent, includes keyword30- H2-H6: logical hierarchy (no skipped levels), descriptive31- URL: short, descriptive, hyphenated, no parameters32- Internal links: sufficient, relevant anchor text, no orphan pages33- External links: to authoritative sources, reasonable count3435### Content Quality36- Word count vs page type minimums (see quality-gates.md)37- Readability: Flesch Reading Ease score, grade level38- Keyword density: natural (1-3%), semantic variations present39- E-E-A-T signals: author bio, credentials, first-hand experience markers40- Content freshness: publication date, last updated date4142### Technical Elements43- Canonical tag: present, self-referencing or correct44- Meta robots: index/follow unless intentionally blocked45- Open Graph: og:title, og:description, og:image, og:url46- Twitter Card: twitter:card, twitter:title, twitter:description47- Hreflang: if multi-language, correct implementation4849### Schema Markup50- Detect all types (JSON-LD preferred)51- Validate required properties52- Identify missing opportunities53- NEVER recommend HowTo (deprecated) or FAQ (restricted to gov/health)5455### Images56- Alt text: present, descriptive, includes keywords where natural57- File size: flag >200KB (warning), >500KB (critical)58- Format: recommend WebP/AVIF over JPEG/PNG59- Dimensions: width/height set for CLS prevention60- Lazy loading: loading="lazy" on below-fold images6162### Core Web Vitals (reference only, not measurable from HTML alone)63- Flag potential LCP issues (huge hero images, render-blocking resources)64- Flag potential INP issues (heavy JS, no async/defer)65- Flag potential CLS issues (missing image dimensions, injected content)6667## Output6869### Page Score Card70```71Overall Score: XX/1007273On-Page SEO: XX/100 ████████░░74Content Quality: XX/100 ██████████75Technical: XX/100 ███████░░░76Schema: XX/100 █████░░░░░77Images: XX/100 ████████░░78```7980### Issues Found81Organized by priority: Critical -> High -> Medium -> Low8283### Recommendations84Specific, actionable improvements with expected impact8586### Schema Suggestions87Ready-to-use JSON-LD code for detected opportunities8889## DataForSEO Integration (Optional)9091If DataForSEO MCP tools are available, use `serp_organic_live_advanced` for real SERP positions and `backlinks_summary` for backlink data and spam scores.9293## Error Handling9495| Scenario | Action |96|----------|--------|97| URL unreachable (DNS failure, connection refused) | Report the error clearly. Do not guess page content. Suggest the user verify the URL and try again. |98| 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. |99| 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. |100101## Write to shared data cache102103After completing all work, write a concise JSON summary to `.seo-cache/` when the workflow produced durable findings.104Use the schemas and naming rules in `../seo/references/shared-data-cache.md`; include at least `cache_type`, `analyzed_at`, source URL/domain, key findings, issues, recommendations, and tool limitations. Add `.seo-cache/` to `.gitignore` if it is missing.