$npx -y skills add yoyothesheep/claude-skills --skill aeo-seo-site-auditAnalyze webpages for content quality, schema markup completeness, and AEO (Answer Engine Optimization). Designed to complement Ahrefs Site Audit findings.
| 1 | # AEO & Content Analysis Skill (Ahrefs Complement) |
| 2 | |
| 3 | This skill analyzes content quality, JSON-LD schema validation, and AEO (Answer Engine Optimization) for pages you specify. It complements Ahrefs Site Audit (which handles technical SEO) by focusing on aspects that require content analysis and AI-readiness assessment. |
| 4 | |
| 5 | **Use this skill when Ahrefs Site Audit cannot:** |
| 6 | - Validate JSON-LD schema completeness and correctness |
| 7 | - Assess content quality and depth |
| 8 | - Evaluate how well pages answer user questions directly |
| 9 | - Identify authority/expertise signals |
| 10 | - Recommend AI-friendly content restructuring |
| 11 | - Assess natural language optimization |
| 12 | - Flag citability gaps |
| 13 | |
| 14 | ## When to Use This Skill |
| 15 | |
| 16 | Trigger this skill when the user: |
| 17 | - Has run an Ahrefs Site Audit and wants to go deeper on content |
| 18 | - Asks "why isn't my content ranking for [query]?" |
| 19 | - Wants to "optimize for AI search" or "ChatGPT search" |
| 20 | - Asks "how do I get cited by AI" or "appear in AI overviews" |
| 21 | - Wants to "improve schema markup for content types" |
| 22 | - Asks "how can I make my content more AI-friendly?" |
| 23 | - Wants "content quality analysis" beyond technical SEO |
| 24 | |
| 25 | ## Core Workflow |
| 26 | |
| 27 | Steps 1-2. **[Coordinator]** Gather Input — get URLs, Ahrefs project ID (optional), business context |
| 28 | Steps 3–8. **[Haiku Agents]** Fetch Ahrefs data (if provided) + extract entity/structure signals + crawl pages + content gap analysis |
| 29 | Steps 9–16. **[Sonnet Agent]** Validate schema, assess entity/cluster authority, analyze content quality, prioritize gaps, generate report |
| 30 | |
| 31 | ## Agent Architecture |
| 32 | |
| 33 | ### Coordinator (main Claude) |
| 34 | Handles Steps 1–2: gathers user input and orchestrates the two agents. Passes URLs + Ahrefs project ID to the Haiku agent(s), then passes all Haiku output payloads to the Sonnet agent. |
| 35 | |
| 36 | ### Haiku Research Agents |
| 37 | - One agent per URL, launched in parallel |
| 38 | - One additional agent for the Ahrefs API call (if project ID provided) |
| 39 | - Job: mechanical data extraction only — no analysis or judgment |
| 40 | - Output: structured JSON payload per URL (see Haiku Output Contract section below) |
| 41 | |
| 42 | ### Sonnet Synthesis Agent |
| 43 | - Single agent, runs after all Haiku agents complete |
| 44 | - Receives all Haiku JSON payloads + Ahrefs data |
| 45 | - Job: schema validation, content analysis, gap prioritization, report writing |
| 46 | - Output: final report |
| 47 | --- |
| 48 | |
| 49 | ## Environment Detection |
| 50 | |
| 51 | Before starting the audit, check which tools are available and adjust accordingly: |
| 52 | |
| 53 | | Environment | Tools Available | Schema Inspection | JSON-LD Extraction Method | |
| 54 | |---|---|---|---| |
| 55 | | **Claude Code** (CLI) | `Bash`, `WebFetch`, file I/O | ✅ Full | Use `curl + grep` or Python to extract from raw HTML | |
| 56 | | **Claude Web** | `WebFetch` only | ⚠️ Partial (stripped) | Use `strings` from curl or ask user for Rich Results Test output | |
| 57 | |
| 58 | **Note:** JSON-LD extraction is NOT optional. Audits claiming "no schema found" without explicit JSON-LD extraction attempts are incomplete and inaccurate. Always verify schema presence before reporting it as missing. |
| 59 | |
| 60 | ## Critical: Distinguish "Crawlable" from "Indexable" |
| 61 | |
| 62 | ⚠️ **Modern Googlebot executes JavaScript.** A site with empty static HTML (SPA, client-side rendering) may still be indexed by Google. The presence of a `<div id="root"></div>` does NOT mean the site is "not indexed." |
| 63 | |
| 64 | **Crawlable** = Static HTML contains content (good for all crawlers, fastest for Googlebot) |
| 65 | **Indexable** = Google can find and index the content (true even if JS-rendered; Googlebot waits for JS execution) |
| 66 | **Optimal for AI crawlers** = Static HTML with schema markup (most AI answer engines have limited JS execution) |
| 67 | |
| 68 | **Do not conclude a site is "not indexed" based solely on static HTML analysis.** Always verify actual indexing status first (see Step 1 below). |
| 69 | |
| 70 | --- |
| 71 | |
| 72 | ## COORDINATOR |
| 73 | |
| 74 | ## Step 1: Gather Input & Verify Indexing Status |
| 75 | |
| 76 | Ask the user for: |
| 77 | |
| 78 | **Required:** |
| 79 | - **Target URLs or Local Files**: The pages or codebase files to analyze. |
| 80 | - If user provides live URLs: Proceed with the multi-agent web crawling in Steps 2-8. |
| 81 | - If user asks you to audit a local codebase (e.g., within Claude Code): **Skip Steps 2 through 8**. Use your file reading tools to inspect the source files directly, extract schema/structure, and begin your evaluation directly at **Step 9**. |
| 82 | |
| 83 | **⚠️ Before proceeding, verify actual Google indexing status:** |
| 84 | |
| 85 | If user reports the site is "not indexed": |
| 86 | 1. Ask: "Have you checked Google Search Console coverage report?" or "Have you tried `site:yourdomain.com` in Google search?" |
| 87 | 2. If uncertain, recommend they verify using: |
| 88 | - Google Search Console (Coverage > Indexed pages) |
| 89 | - `site:yourdomain.com` search operator |
| 90 | - Google's URL Inspection tool (one specific URL) |
| 91 | 3. **Do not assume** a site is unindexed based on static HTML analysis alone. Modern Googlebot executes JavaScript and can index SPAs. |
| 92 | 4. If the site is |