From google-audit
SEO + GEO + AEO audit for any website. Maps every check to Google's published best practices for Search, AI Overviews, AI Mode, Core Web Vitals (LCP ≤ 2.5 s, INP ≤ 200 ms, CLS ≤ 0.1), structured data, and the cross-LLM retrieval layer (ChatGPT Search via OAI-SearchBot, Perplexity, Microsoft Copilot, Claude web search). Every finding cites the Google or provider doc it traces to. Verdict is Not Ready / Competitive / Leading. Use when the user asks to "audit website", "google audit", "SEO audit", "GEO audit", "AEO audit", "google best practices", "is my site AI-search ready", "AI Overviews readiness", "core web vitals check", "crawlability audit", "robots.txt review", "schema deprecation check", "are my AI bots allowed", "are LLM crawlers allowed", or provides a domain or URL to evaluate. Do NOT use for keyword research, backlink analysis, content writing, competitor analysis, or ranking strategy — this skill audits compliance with published Google guidance only.
How this skill is triggered — by the user, by Claude, or both
Slash command
/google-audit:google-audit <domain-or-url> [--max-pages N]<domain-or-url> [--max-pages N]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
A read-only audit that maps a website's current state to the rules in [`docs/rules.yaml`](../../docs/rules.yaml). Every rule cites a Google or provider doc URL; thresholds match Google's published numbers verbatim. The skill does NOT make recommendations beyond what the cited doc supports.
docs/rules.yamlrequirements.txtscripts/crawl_site.pyscripts/fetch_page.pyscripts/gather_facts.pyscripts/google_auth.pyscripts/lighthouse_run.pyscripts/pagespeed_check.pyscripts/parse_html.pyscripts/render_report.pyscripts/robots_inspect.pyscripts/rules_engine.pyscripts/run_audit.shscripts/schema_validate.pyA read-only audit that maps a website's current state to the rules in docs/rules.yaml. Every rule cites a Google or provider doc URL; thresholds match Google's published numbers verbatim. The skill does NOT make recommendations beyond what the cited doc supports.
Trigger when the user asks any of:
Do NOT use for: keyword research, backlink analysis, content writing, competitor analysis, ranking strategy, paid ads.
Preferred — one-shot orchestration:
SKILL_DIR="${CLAUDE_SKILL_DIR:-$(dirname "$(readlink -f "${BASH_SOURCE[0]:-$0}")")}"
pip install -q -r "$SKILL_DIR/requirements.txt"
bash "$SKILL_DIR/scripts/run_audit.sh" "$URL" --max-pages "${MAX_PAGES:-50}"
run_audit.sh runs all six steps below and writes audit.json + audit.md
to /tmp/google-audit-<timestamp>/. Pass --out DIR to override the
location, --no-lighthouse to skip the Lighthouse CLI step, --no-psi
to skip PageSpeed Insights.
The six-step manual breakdown below is for when you need to invoke a single step (e.g. only re-render after editing the JSON, or only re-run schema validation after a deploy).
python "$SKILL_DIR/scripts/google_auth.py" --check
If PAGESPEED_API_KEY is missing, warn the user but continue — Lighthouse lab data still works locally; only CrUX field data is unavailable.
OUT=/tmp/google-audit-$(date +%s)
mkdir -p "$OUT"
python "$SKILL_DIR/scripts/crawl_site.py" "$URL" --max-pages "${MAX_PAGES:-50}" --out "$OUT"
This writes $OUT/crawl.json with the list of pages. Sitemap-first; falls back to BFS. Respects robots.txt.
python "$SKILL_DIR/scripts/robots_inspect.py" "$URL" --out "$OUT/robots.json"
curl -s -L --max-time 10 "$URL/llms.txt" -o "$OUT/llms_txt.txt" 2>/dev/null || true
For each URL in $OUT/crawl.json, create $OUT/pages/<NNN>-<slug>/ and run:
# Fetch HTML
python "$SKILL_DIR/scripts/fetch_page.py" "$PAGE_URL" --output "$PAGE_DIR/page.html"
# Parse SEO elements
python "$SKILL_DIR/scripts/parse_html.py" "$PAGE_DIR/page.html" --url "$PAGE_URL" --json > "$PAGE_DIR/parsed.json"
# Inject the page URL into parsed.json (needed for hreflang reciprocity check)
python -c "
import json
p = json.load(open('$PAGE_DIR/parsed.json'))
p['_page_url'] = '$PAGE_URL'
with open('$PAGE_DIR/page.html') as f:
html = f.read()
p['_viewport_present'] = ('name=\"viewport\"' in html) or (\"name='viewport'\" in html)
json.dump(p, open('$PAGE_DIR/parsed.json','w'), indent=2)
"
# Schema validation (deprecated types, self-serving reviews, expired entities)
python "$SKILL_DIR/scripts/schema_validate.py" "$PAGE_DIR/page.html" --out "$PAGE_DIR/schema.json"
# PageSpeed Insights (lab + CrUX field data) — skip if no API key
[ -n "$PAGESPEED_API_KEY" ] && python "$SKILL_DIR/scripts/pagespeed_check.py" "$PAGE_URL" --strategy mobile --json > "$PAGE_DIR/psi.json"
# Lighthouse CLI — optional, slower but exhaustive
which lighthouse >/dev/null && python "$SKILL_DIR/scripts/lighthouse_run.py" "$PAGE_URL" --out "$PAGE_DIR/lighthouse.json"
You can run pages in parallel (4 concurrent works well). Cap to --max-pages 10 for quick smoke audits.
python "$SKILL_DIR/scripts/gather_facts.py" "$OUT" --out "$OUT/facts.json"
Merges crawl + robots + per-page subreports into the fact-path schema used by docs/rules.yaml.
python "$SKILL_DIR/scripts/rules_engine.py" --facts "$OUT/facts.json" --rules "$SKILL_DIR/docs/rules.yaml" --out "$OUT/audit.json"
python "$SKILL_DIR/scripts/render_report.py" "$OUT/audit.json" --out "$OUT/audit.md"
Show the user the verdict line and a summary, then the path to both artifacts.
audit.json — every rule × every page where applicable, with status (pass / fail / needs_improvement / nice_not_done / skipped), observed value, threshold, and source_url citing the Google doc.audit.md — human-readable: verdict header, severity summary table, failing-MUST callout, then findings grouped by category.| Result | Verdict |
|---|---|
| Any MUST failing | Not Ready — fix before anything else |
| All MUST pass, ≥ 80 % SHOULD pass | Competitive — eligible across Google + other AI engines |
| All MUST + all SHOULD pass | Leading — content quality + entity authority + monitoring |
NICE rules don't move the verdict; they're tracked separately.
The skill never emits outdated guidance. docs/rules.yaml reflects the May 2026 state of Google's docs:
rel=next/prev — not recommended; NICE only ("harmless for Bing/a11y")potentialAction.SearchAction) — flagged as deprecated (Nov 21, 2024)Crawl-delay for Googlebot — flagged as ignored by GoogleGoogle-Extended as "AI Overviews opt-out" — explicitly NOT; only noindex / nosnippet control AI Overviewsllms.txt — checked for presence only; reported informational, never as a ranking factor/google-audit example.com
/google-audit https://example.com --max-pages 25
/google-audit blog.example.com --max-pages 10
audit.md.rules.yaml, say so explicitly and offer to open a PR adding a rule with a Google-doc citation.null CrUX values for LCP/INP/CLS — Google needs enough real-user data before they publish field metrics. This is expected and not a failure: the rules engine marks these rules as skipped, not fail. Install Lighthouse CLI (npm install -g lighthouse) for synthetic lab-data fallback when CrUX is unavailable.robots_inspect.py as a snapshot, not a promise.llms.txt is reported for presence only.Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
npx claudepluginhub wishfy-ai/google-seo-geo-aeo-audit-skill