source/skills/audit/SKILL.md
Audit on-page SEO and GEO (generative engine optimization) signals across the site — title tags, meta descriptions, H1/H2/H3 hierarchy, canonical tags, Open Graph, structured data, content length, internal link density, and AI-citation readiness. Use this skill whenever the user asks to "audit SEO", "check metadata", "review titles and descriptions", "check heading structure", "run an SEO audit", "GEO audit", "check schema markup", "find SEO issues", or review any on-page signal affecting organic or AI-search visibility. Output is a prioritized issue list with per-page findings and fixes.
npx skillsauth add zhizdev/overgrow auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill inspects existing pages for on-page SEO and generative-engine visibility issues and returns a prioritized fix list. It does not rewrite content — use spawn-pages or humanize to implement the fixes afterwards.
Read .overgrow/inventory.md first. If it does not exist, run the init skill before continuing. If the user scoped the audit via $ARGUMENTS (e.g. blog, /pricing, solutions/*), limit the scope to matching pages. Otherwise audit every page in the inventory except utility and legal.
Before auditing, read from the plugin's knowledge/ directory:
knowledge/geo.md — SEO + GEO master reference. Authoritative on foundations, content structure, E-E-A-T, technical SEO, AI extraction, schema, and measurement. The checks below are a summary; geo.md is the source of truth for thresholds.knowledge/pages.md — H-tag hierarchy and AI-overview formatting rules. Heading and answer-block checks come from here.knowledge/sitemap.md — referenced only for the indexability / robots / canonical checks.When an audit check differs between this SKILL.md and the knowledge file, prefer the knowledge file.
Run every page through the following checks. Each check produces zero or more findings.
<title> or framework equivalent is present and non-empty.og:title, og:description, og:image, og:url, og:type present.twitter:card set (usually summary_large_image).Per page category:
homepage → Organization + WebSite (with SearchAction)product / feature → Product or SoftwareApplicationsolution → Servicepricing → Product with Offerblog-post → BlogPosting or Article (required: headline, author, datePublished, image)case-study → Article with aboutresource-hub → CollectionPageBreadcrumbListFAQPageReview or AggregateRatingFlag any missing schema for the page's category, and any schema with invalid required fields.
spawn-internal-links; here only surface the symptoms.robots meta — flag any unintentional noindex on content pages.<link rel="alternate" hreflang=...> — flag missing hreflang on i18n sites.lang attribute on <html> present.datePublished and dateModified where appropriate..overgrow/inventory.md. If scope is given, filter the page list..overgrow/audit.md (overwrite with timestamp; archive prior runs to .overgrow/audit-<YYYY-MM-DD>.md if present).Write .overgrow/audit.md:
# Overgrow SEO/GEO Audit
_Run: <YYYY-MM-DD HH:MM>_
_Scope: <all | filter>_
_Pages audited: <N>_
## Summary
- **Critical issues:** <count> (blocks indexing or major ranking loss)
- **High:** <count>
- **Medium:** <count>
- **Low / polish:** <count>
Top 5 fixes by impact:
1. ...
## Findings by page
### <Route> (<category>)
_Source: <path>_
- [severity] **<Check name>:** <specific finding>. **Fix:** <one-line fix>.
- ...
(Repeat for every page with at least one finding. Pages with zero findings are listed once under "Clean pages" at the bottom.)
## Cross-page findings
- **Duplicate titles:** <list of routes sharing a title>
- **Duplicate descriptions:** <...>
- **Orphan pages:** <list>
- **Missing schema by category:** <summary>
## Clean pages
<routes with zero findings>
Severity guide:
After .overgrow/audit.md is written, print a visual ASCII dashboard to the
conversation so the result is screenshot-friendly. Follow
reference/share-card.md exactly:
reference/share-card.md
before emitting anything.BONEMEAL logo from the template. Do not
substitute with a different wordmark or a smaller logo..overgrow/audit.md — nothing else.If the terminal is narrower than 80 columns (user has said so, or you can tell from prior output wrapping), still emit the card — users screenshot it, and reflowing would break the ASCII art.
spawn-pages (regenerate) or to the user (manual tweak).tools
Pull the open Bonemeal action queue (landing pages and blog posts the user has not built yet) via the bonemeal MCP server, let the user pick which ones to build, dispatch each to the spawn-pages or spawn-blogs skill with the action's brief, and mark each completed in Bonemeal once the file is written. Use this whenever the user says "grow", "/grow", "build my Bonemeal queue", "what's in my Bonemeal queue", "build the suggested pages", or wants to act on Bonemeal's content suggestions. Stop and ask the user before marking actions complete the first time, then remember their preference.
development
Given the product offering and existing page inventory, create new core landing and resource pages (homepage refresh, features, solutions, pricing, comparison, resource hubs, about) that capture core product intent using the query-fanout pattern. Use this skill whenever the user asks to "spawn pages", "generate landing pages", "create marketing pages", "build a pricing page", "add a solutions page", "build out the site", "fill in missing pages", or wants new top-level marketing/product pages. Output is one new page per route in the project's native file format (component or markdown), matching the existing page style and framework idiom.
development
Examine every existing page on the site, build a semantic map across pillars, and add missing internal links so the site becomes a semantic graph anchored on clear topical pillars. Use this skill whenever the user asks to "add internal links", "build internal linking", "build a semantic graph", "link related pages", "strengthen topical authority", "fix orphan pages", "add pillar linking", or wants hub-and-spoke linking between pillars, hubs, and supporting content. Output is an edit list (proposed link insertions) plus optionally direct edits to page source files.
development
Given the product and the existing page inventory, identify missing blog topics and generate new blog posts that capture search/AI intent using the query-fanout pattern. Use this skill whenever the user asks to "spawn blogs", "generate blog posts", "expand the blog", "build out a content cluster", "write blog ideas", "cover more search intents", "query fanout for blogs", or wants new long-form content that supports existing pillars. Output is one new post per topic in the project's existing post format (markdown, MDX, component, or CMS migration note), with frontmatter shape mirrored from an existing post.