$npx -y skills add onvoyage-ai/gtm-engineer-skills --skill audit-website-aeoAudits a live website for AI-engine discoverability (AEO/GEO). Crawls the site, runs 16 deterministic checks plus a 6-dimension content evaluation, and produces a scored report (A-F) with prioritized fixes. Use to get a baseline before improve-aeo-geo, or to measure progress afte
| 1 | # Audit Website AEO/GEO Skill |
| 2 | |
| 3 | You audit a **live website** the way an AI agent would — crawling its pages, parsing structure, and judging whether the content is citation-worthy for ChatGPT, Claude, Perplexity, and Google AI Overviews. |
| 4 | |
| 5 | The audit has two halves: |
| 6 | |
| 7 | - **Foundational (50%)** — 16 deterministic pass/fail checks run by a script. Reproducible, no judgment. |
| 8 | - **Intelligence (50%)** — 6 content-quality dimensions **you** score by reading the pages, using the rubric below. |
| 9 | |
| 10 | Final score = `0.5 × foundational + 0.5 × intelligence`, mapped to an A-F grade. |
| 11 | |
| 12 | This skill produces a **diagnosis**. To then fix a codebase, hand off to the **`improve-aeo-geo`** skill. |
| 13 | |
| 14 | --- |
| 15 | |
| 16 | ## Workflow |
| 17 | |
| 18 | Follow this sequence exactly. |
| 19 | |
| 20 | ### Step 1: Get inputs |
| 21 | |
| 22 | Ask the user for: |
| 23 | |
| 24 | 1. **Website URL** (required) — the live site to audit. |
| 25 | 2. **Crawl depth** (optional) — how many pages to crawl. Default 10, max 30. |
| 26 | 3. **Output location** (optional) — where to save the report. Default: current directory, or `workspace/<customer-name>/` if working a customer project. |
| 27 | |
| 28 | If the user already gave a URL when invoking the skill, don't re-ask — just confirm crawl depth and proceed. |
| 29 | |
| 30 | ### Step 2: Run the deterministic audit |
| 31 | |
| 32 | Run the bundled script from this skill's `scripts/` directory. It requires only Node 18+ — no `npm install`. |
| 33 | |
| 34 | ```bash |
| 35 | node <skill-path>/scripts/aeo-audit.mjs <url> --max-pages=10 --out=<output-dir>/aeo-audit.json |
| 36 | ``` |
| 37 | |
| 38 | The script crawls (sitemap + robots.txt + internal links), runs the 16 checks per page, aggregates site-wide, and writes a JSON report. It also prints a human-readable summary. Tell the user the foundational score and the failed checks. |
| 39 | |
| 40 | If the script errors (site unreachable, 0 pages crawled), report the error and stop — don't fabricate a score. |
| 41 | |
| 42 | ### Step 3: Read the JSON report |
| 43 | |
| 44 | Read the `aeo-audit.json` file. The key fields: |
| 45 | |
| 46 | - `scoring.foundationalScore` — the deterministic score (0-100). This is **final** — do not change it. |
| 47 | - `checks` — the 16 site-wide checks with pass/fail and details. |
| 48 | - `pagesForReview` — up to 5 representative pages (home + richest content pages), each with an `aiView` object containing `title`, `metaDescription`, `h1`, `headings`, `schemaTypes`, `jsonLdSummary`, `textExcerpt`, `internalLinkCount`, `author`, `publishedDate`, `modifiedDate`. **Use these for Step 4.** |
| 49 | - `prioritizedFixes`, `worstPages`, `coverage`, `heuristicIntelligenceSignals` — supporting context. The heuristic signals are a deterministic *prior* — a sanity check, not the real evaluation. |
| 50 | |
| 51 | ### Step 4: Score the 6 intelligence dimensions |
| 52 | |
| 53 | You are an AI agent that just found this site via web search. A user asked you a question and you landed here. **Decide: would you cite this site in your answer?** |
| 54 | |
| 55 | Read the `textExcerpt`, `headings`, and metadata of each page in `pagesForReview`. Then score all 6 dimensions below, each **0-5**, using only what you actually observed (no assumptions about pages you didn't see). Write the rationale **before** the score. |
| 56 | |
| 57 | #### Rubric (0-5 each) |
| 58 | |
| 59 | **Answer Readiness** — If a user asked a question about this site's topic, could you find a direct answer here? The #1 factor — content answering questions in the first paragraph gets 4.8x more citations. |
| 60 | - 0 = No answers; purely promotional or navigational |
| 61 | - 1 = Vague content that talks around topics but never directly answers |
| 62 | - 2 = Some answers exist but buried deep, not in opening paragraphs |
| 63 | - 3 = Several questions answerable; some definition-first or FAQ-style content |
| 64 | - 4 = Most common questions answerable; answers lead sections |
| 65 | - 5 = Exceptional (dedicated FAQ blocks, definition-first paragraphs, Q&A format throughout) |
| 66 | |
| 67 | **Quotability** — Can you extract a clean, self-contained 40-60 word passage to quote? Comparison tables get 2.8x citations; FAQ blocks +156%. |
| 68 | - 0 = No extractable content (interactive-only, single dense block) |
| 69 | - 1 = Content requires full-page context; no passage stands alone |
| 70 | - 2 = A few passages extractable but most need surrounding context |
| 71 | - 3 = Several self-contained paragraphs; some lists or structured blocks |
| 72 | - 4 = Good quotability (tables, lists, FAQ sections, clear answer blocks) |
| 73 | - 5 = Highly quotable (comparison tables, step-by-step blocks, definition paragraphs throughout) |
| 74 | |
| 75 | **Evidence Density** — Statistics, data points, named sources, in-text citations? Adding in-text citations = +115% visibility; statistics = +40% citation rate. |
| 76 | - 0 = No evidence; only marketing copy and vague claims |
| 77 | - 1 = Vague claims only ("best in class", "industry leading") |
| 78 | - 2 = Mostly generalities; rare specific data points |
| 79 | - 3 = Some statistics and named sources; cites a few external sources |
| 80 | - 4 = High density ( |