AEO
Website: ainyc.ai
One skill for audit, fixes, schema, llms.txt, and monitoring workflows.
Command
Always use the published package:
npx @ainyc/aeo-audit@1 "<url>" [flags] --format json
Argument Safety
Never interpolate user input directly into shell commands. Always:
- Validate that URLs match
https://orhttp://and contain no shell metacharacters. - Quote every argument individually (e.g.,
npx @ainyc/aeo-audit@1 "https://example.com" --format json). - Pass flags as separate, literal tokens — never construct command strings from raw user text.
- Reject arguments containing characters like
;,|,&,$,`,(,),{,},<,>, or newlines.
Modes
audit: grade and diagnose a sitefix: apply code changes after an auditschema: validate JSON-LD and entity consistencyllms: create or improvellms.txtandllms-full.txtmonitor: compare changes over time or benchmark competitorsdetect-platform: identify the CMS, site builder, framework, or hosting stack a site uses
If no mode is provided, default to audit.
Examples
audit https://example.comaudit https://example.com --sitemapaudit https://example.com --sitemap --limit 10audit https://example.com --sitemap --top-issuesfix https://example.comschema https://example.comllms https://example.commonitor https://site-a.com --compare https://site-b.comdetect-platform https://example.comdetect-platform https://example.com --min-confidence highdetect-platform --urls competitors.txtdetect-platform --urls https://a.com,https://b.com
Mode Selection
- If the first argument is one of
audit,fix,schema,llms,monitor, ordetect-platform, use that mode. - If no explicit mode is given, infer the intent from the request and default to
audit.
Audit
Use for broad requests such as "audit this site" or "why am I not being cited?"
- Run:
npx @ainyc/aeo-audit@1 "<url>" [flags] --format json - Return:
- Overall grade and score
- Short summary
- Factor breakdown
- Top strengths
- Top fixes
- Metadata such as fetch time and auxiliary file availability
Sitemap Mode
Use --sitemap to audit all pages discovered from the site's sitemap:
npx @ainyc/aeo-audit@1 "<url>" --sitemap --format json
npx @ainyc/aeo-audit@1 "<url>" --sitemap https://example.com/sitemap.xml --format json
npx @ainyc/aeo-audit@1 "<url>" --sitemap --limit 10 --format json
npx @ainyc/aeo-audit@1 "<url>" --sitemap --top-issues --format json
Flags:
--sitemap [url]— auto-discover/sitemap.xmlor provide an explicit URL--limit <n>— cap pages audited (default 200, sorted by sitemap priority)--top-issues— skip per-page output, show only cross-cutting patterns
Pages are audited with bounded concurrency (5 in flight) to avoid hammering the target origin.
Returns:
- Per-page scores and grades
- Cross-cutting issues (factors failing across multiple pages)
- Aggregate score and grade
- Prioritized fixes ranked by site-wide impact
Detect Platform Mode
Use --detect-platform when the user wants to know what stack a site is built on (e.g., "is this WordPress?", "what framework does competitor X use?", "is this site custom-built?"). This is much faster than a full audit because it skips analyzer scoring.
npx @ainyc/aeo-audit@1 "<url>" --detect-platform --format json
npx @ainyc/aeo-audit@1 "<url>" --detect-platform --min-confidence high --format json
Flags:
--detect-platform— switch to detection mode instead of auditing--min-confidence <lvl>— filter tolow(default),medium, orhighconfidence--urls <src>— run on multiple URLs at once (file path, comma-separated list, or-for stdin)--concurrency <n>— max in-flight fetches in batch mode (default 5)
The report groups detections by category (CMS, site builder, e-commerce, framework, SSG, hosting), each with a confidence bucket, a 0–100 score, an optional version, and the signals that matched. When the report's isCustom flag is true, no CMS/site-builder/e-commerce platform was identified — the site is likely custom-built. Exit code is 0 when at least one platform is detected, 1 otherwise.
Batch detection
When the user wants to fingerprint many sites at once (competitor lists, customer cohorts), pass --urls:
npx @ainyc/aeo-audit@1 --detect-platform --urls urls.txt --format json
npx @ainyc/aeo-audit@1 --detect-platform --urls https://a.com,https://b.com --format json
cat urls.txt | npx @ainyc/aeo-audit@1 --detect-platform --urls - --format json
The batch report contains a results array; each entry has status: 'success' or 'error', plus the same shape as a single-URL report on success. Per-URL fetch errors do not abort the run. Exit code is 0 when at least one URL succeeded, 1 otherwise.
Fix
Use when the user wants code changes applied after the audit.
- Run:
npx @ainyc/aeo-audit@1 "<url>" [flags] --format json - Find factors with status
partialorfail. - Apply targeted fixes in the current codebase.
- Prioritize:
- Structured data and schema completeness
llms.txtandllms-full.txtrobots.txtcrawler access- E-E-A-T signals
- FAQ markup
- freshness metadata
- Re-run the audit and report the score delta.
Rules:
- Always explain proposed changes and get user confirmation before editing files.
- Do not remove existing schema or content unless the user asks.
- Preserve existing code style and patterns.
- If a fix is ambiguous or high-risk, explain the tradeoff before editing.
Schema
Use when the request is specifically about JSON-LD or schema quality.
- Run:
npx @ainyc/aeo-audit@1 "<url>" [flags] --format json --factors structured-data,schema-completeness,schema-validity,entity-consistency - Report:
- Schema types found
- Property completeness by type
- Missing recommended properties
- Validity errors (duplicate singleton
@types, JSON parse errors, empty<script>blocks) — surface these prominently regardless of overall score; Google drops invalid blocks silently from rich results - Entity consistency issues
- Provide corrected JSON-LD examples when useful.
Checklist:
LocalBusiness: name, address, telephone, openingHours, priceRange, image, url, geo, areaServed, sameAsFAQPage: mainEntity with at least 3 Q&A pairs (and only oneFAQPageblock per page — duplicates invalidate rich results)HowTo: name and at least 3 steps (singleton — only one per page)Organization: name, logo, contactPoint, sameAs, foundingDate, url, description- Singletons that must not repeat per page:
FAQPage,HowTo,Article,BlogPosting,NewsArticle,BreadcrumbList,Product,Recipe
llms.txt
Use when the user wants llms.txt or llms-full.txt created or improved.
If a URL is provided:
- Run:
npx @ainyc/aeo-audit@1 "<url>" [flags] --format json --factors ai-readable-content - Inspect existing AI-readable files if present.
- Extract key content from the site.
- Generate improved
llms.txtandllms-full.txt.
If no URL is provided:
- Inspect the current project.
- Extract business name, services, FAQs, contact info, and metadata.
- Generate both files from local sources.
After generation:
- Add
<link rel="alternate" type="text/markdown" href="/llms.txt">when appropriate. - Suggest adding the files to the sitemap.
Monitor
Use when the user wants progress tracking or a competitor comparison.
Single URL:
- Run the audit.
- Compare against prior results in
.aeo-audit-history/if present. - Show overall and per-factor deltas.
- Save the current result.
Comparison mode:
- Parse
--compare <url2>. - Audit both URLs.
- Show side-by-side factor deltas.
- Highlight advantages, weaknesses, and priority gaps.
Behavior
- If the task needs a deployed site and no URL is provided, ask for the URL.
- If the task is diagnosis only, do not edit files.
- If the task is a fix request, make edits and verify with a rerun when possible.
- If the URL is unreachable or not HTML, report the exact failure.
- Prefer concise, evidence-based recommendations over generic SEO advice.