Help us improve
Share bugs, ideas, or general feedback.
From ai-brain-starter
Audits and fixes technical SEO, on-page optimization, schema markup, AI-search-optimization (GEO), and bilingual routing for solo founders running a consulting site + Substack. Supports /seo-audit, /seo-fix, /geo-audit, /substack-seo commands.
npx claudepluginhub adelaidasofia/ai-brain-starterHow this skill is triggered — by the user, by Claude, or both
Slash command
/ai-brain-starter:seo-substrateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Lean SEO substrate for a solo founder running a consulting site, a Substack newsletter, and adjacent surfaces. Trades exhaustive enterprise tooling for the slice that actually moves the needle: surface coverage > tooling depth.
Audits websites for technical SEO issues including crawlability, indexation, page speed, core web vitals, and meta tags. Activated by phrases like 'SEO audit' or 'my traffic dropped.'
Analyzes websites for SEO issues including crawlability, Core Web Vitals, schema markup, content quality, and GEO for AI Overviews. Supports full audits and single-page analysis.
Conducts comprehensive SEO audits for websites: full-site crawls, technical analysis (Core Web Vitals, indexability), schema markup validation, E-E-A-T content scoring, image optimization, sitemaps, and GEO for AI overviews. Supports SaaS, e-commerce, local.
Share bugs, ideas, or general feedback.
Lean SEO substrate for a solo founder running a consulting site, a Substack newsletter, and adjacent surfaces. Trades exhaustive enterprise tooling for the slice that actually moves the needle: surface coverage > tooling depth.
Cherry-picked from ~/.claude/skills/claude-seo/ (25 sub-skills + 18 sub-agents) — kept the substrate primitives, dropped enterprise + e-commerce + DataForSEO/Firecrawl-paid extensions. Source-of-truth for why this is leaner: solo operators do not need 43 sub-modules for two sites.
/seo-audit <url> — full audit on a single page/seo-fix <file-or-url> — apply concrete fixes to a draft post or live page/geo-audit <url> — GEO-only pass (AI search readiness)/substack-seo <draft.md> — per-post Substack optimization before publishDo NOT use for:
~/.claude/skills/claude-seo/skills/seo-ecommerce/ instead)This substrate ships these audit + fix capabilities. Each is a self-contained section below.
| Capability | Audit pass | Fix pass |
|---|---|---|
| Technical SEO (crawlability, indexability, speed) | ✓ | ✓ |
| On-page (title, description, H-hierarchy, image alt, internal linking) | ✓ | ✓ |
| Schema markup (JSON-LD for Article, BlogPosting, Person, Organization, BreadcrumbList) | ✓ | ✓ |
| GEO (AI search optimization for ChatGPT, Claude, Perplexity, Gemini surfaces) | ✓ | ✓ |
| Bilingual routing (hreflang, lang attr, locale subdir) | ✓ | ✓ |
| Search Console + GA4 wiring (property verification, coverage report, top queries) | ✓ | ✗ (UI-only) |
| Per-post Substack optimization (slug + summary + tags + social card + internal links) | ✓ | ✓ |
What this substrate does NOT cover (handle manually or use specialist skill):
claude-seo/skills/seo-ecommerce/)*.substack.com/p/* → Substack post mode (use the per-post checklist below)/es/ path → add bilingual-routing passcurl -s -L -A "Mozilla/5.0" <url> to get rendered HTML. Parse with python3 -c "from bs4 import BeautifulSoup; ...".robots.txt exists, allows crawl on production paths, blocks stagingsitemap.xml exists, lists canonical URLs, last-modified accurate, no 404 entries<link rel="canonical"> on every page; canonical is self-referential or points at the correct primary<meta name="robots" content="..."> present where non-default (noindex on tag pages, etc.)<meta name="viewport" content="width=device-width, initial-scale=1">)<title> 30-60 chars, primary keyword in first 50 chars, brand suffix optional<meta name="description"> 120-158 chars, includes primary keyword, written for human click-through not keyword stuffing<h1> per page (not zero, not two)alt="" (decorative) or descriptive alt text (informative)Minimum required schema per page type:
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "<title>",
"description": "<meta description>",
"author": {"@type": "Person", "name": "<author>", "url": "<author-page>"},
"datePublished": "<ISO date>",
"dateModified": "<ISO date>",
"image": "<canonical-image-url>",
"publisher": {"@type": "Organization", "name": "<brand>", "logo": {"@type": "ImageObject", "url": "<logo-url>"}},
"mainEntityOfPage": {"@type": "WebPage", "@id": "<canonical-url>"}
}
{
"@context": "https://schema.org",
"@type": "Person",
"name": "<full name>",
"url": "<canonical>",
"image": "<headshot>",
"jobTitle": "<role>",
"worksFor": {"@type": "Organization", "name": "<company>"},
"sameAs": ["<linkedin>", "<x-or-twitter>", "<github>", "<substack>"]
}
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "<brand>",
"url": "<canonical>",
"logo": "<logo-url>",
"founder": {"@type": "Person", "name": "<founder>"},
"contactPoint": {"@type": "ContactPoint", "email": "<contact-email>", "contactType": "customer support"},
"sameAs": ["<linkedin>", "<x-or-twitter>"]
}
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Home", "item": "<root>"},
{"@type": "ListItem", "position": 2, "name": "<section>", "item": "<section-url>"},
{"@type": "ListItem", "position": 3, "name": "<page>", "item": "<page-url>"}
]
}
Validate every schema block with https://validator.schema.org/ before publish.
GEO is what gets cited by AI search engines (ChatGPT browsing, Claude with web tool, Perplexity, Gemini, Grok). Different from classic SEO because the consumer is an LLM doing extractive QA, not a human running a query and clicking blue links.
Checklist for GEO readiness:
dateModified schema). LLMs prefer fresh content; a 2024 date hurts visibility against a 2026 page.## Question followed by direct answer). LLMs match on question structure.llms.txt at root if you want to direct LLM crawlers (analogous to robots.txt for AI). Format: list of canonical content URLs the site owner wants LLMs to prioritize.GEO does NOT replace SEO; it layers on top. Pages that pass classic SEO and add the GEO checklist tend to win both surfaces.
If the site publishes EN + ES (or any other language pair):
<html lang="en"> matches actual content language (not always "en" by default)/es/ or es.<domain> consistently<link rel="alternate" hreflang="en" href="<en-url>" /> AND <link rel="alternate" hreflang="es" href="<es-url>" /> AND <link rel="alternate" hreflang="x-default" href="<default-url>" /> on every pageAudit-only (these are configured in the platform UI, not by code):
www versions, both http and httpsFor every Substack post draft before publish, run this checklist:
Audit reports always print:
## SEO + GEO audit: <url>
- Surface type: <substack-post | consulting-page | landing | bilingual-pair>
- Audit date: <ISO>
### Quick fixes (under 1 hour, prioritized by impact)
1. <specific fix> — selector: <css-or-line>
2. ...
### Deep fixes (over 1 hour, may need code changes)
1. <specific fix> — touches: <file-or-system>
2. ...
### Pass/fail per capability
- Technical SEO: <pass | partial | fail> + 1-line reason
- On-page: <pass | partial | fail>
- Schema: <pass | partial | fail>
- GEO: <pass | partial | fail>
- Bilingual: <pass | partial | fail | n/a>
- Substack post (if applicable): <pass | partial | fail>
### Next step
<single concrete action the user takes after reading this report>
Before running the audit checklist, gather context:
.agents/product-marketing-context.md or .claude/product-marketing-context.md exists in the project, read it before asking questions. Use that context and only ask for what's not already covered.(Pattern source: coreyhaines31/marketingskills/seo-audit. Their "Initial Assessment" framing prevents going straight to checklist when scope is unclear.)
Before optimizing for AI search, MEASURE current state:
(Diagnostic source: coreyhaines31/marketingskills/ai-seo. Critical missing piece in v1 of this substrate — measurement-before-intervention is the right SEO sequence.)
When the user reports "my traffic dropped" / "my rankings fell" / "Google update hit me":
https://status.search.google.com/ plus community trackers). If a known update hit, the cause is usually content quality + topical relevance, not technical.(Triage flow source: coreyhaines31/marketingskills/seo-audit. Substantial gap in v1 — solo operators need the triage when rankings fall, not just the proactive checklist.)
V1 of this substrate excluded programmatic SEO ("solo operators don't need it"). That was wrong. Programmatic SEO at solo-operator scale (5-50 pages, not 5,000) is a real capability:
<our-product> vs <competitor> for each meaningful competitor.<our-tool> + <integration> when an integration is launched.Constraints for solo operators:
Out of scope (genuine over-reach for solo ops): 1,000+ programmatic page generation, SEO-API-based content sourcing, AI-generated content at scale.
(Source: coreyhaines31/marketingskills/programmatic-seo. v1 was wrong to exclude this entirely; corrected here.)
V1 covered 4 schema types (BlogPosting, Person, Organization, BreadcrumbList). The full set worth covering for solo + creator surfaces:
BlogPosting (kept from v1) — for blog posts, Substack articlesPerson (kept) — for about pages, author pagesOrganization (kept) — for company / consultancy pagesBreadcrumbList (kept) — for any page below rootFAQPage — for pages with Q&A content; eligible for Google rich-result FAQ accordionHowTo — for step-by-step guides; eligible for HowTo rich result with image carouselProduct — for any paid product, course, coaching offer, digital downloadEvent — for ticketed events, webinars, cohort launchesCourse — for courses/cohorts (different schema than Product; specifically for educational offerings)Review + AggregateRating — for testimonials and review aggregations on landing pagesWebSite with SearchAction — for sites with on-site search; lets Google show a search box in the sitelinksUse Google's Rich Results Test before publish.
(Schema expansion source: coreyhaines31/marketingskills/schema-markup. v1 missed FAQ, HowTo, Product, Event, Course, Review/AggregateRating, WebSite-SearchAction.)
For new sites OR site restructures (NOT covered in v1):
For existing site restructures, the migration plan needs:
(IA source: coreyhaines31/marketingskills/site-architecture. Substantial gap in v1.)
This substrate covers the substrate primitives. Delegate to specialist skills for deeper work:
marketing-skills:ai-seo (coreyhaines)marketing-skills:programmatic-seo (coreyhaines)marketing-skills:site-architecture (coreyhaines)marketing-skills:schema-markup (coreyhaines)claude-seo:* (AgriciDaniel)marketing-skills:form-cro, marketing-skills:onboarding-cro, marketing-skills:page-cro (coreyhaines)marketing-skills:pricing-strategy (coreyhaines)The substrate primitives stay opinionated and lean. The full SEO/marketing surface is plugin-installed and discoverable when the user's prompt drifts beyond substrate scope.
| Source | What got incorporated | What was left out |
|---|---|---|
| AgriciDaniel/claude-seo (MIT, 6,276 stars) | 25 sub-skills surfaced as cross-skill references; substrate primitives kept; specific extensions excluded as listed below | seo-dataforseo (paid), seo-firecrawl (paid), seo-image-gen (covered by nano-banana), seo-flow (out), seo-ecommerce (out for solo), seo-cluster (manual under 200 pages) |
| coreyhaines31/marketingskills (MIT, 27,584 stars) | Initial Assessment pattern, AI visibility diagnostic, ranking-loss triage flow, programmatic SEO inclusion, expanded schema types (FAQ + HowTo + Product + Event + Course + Review + WebSite), site architecture / IA section, cross-skill references at the top, context-file-check pattern | Form CRO + onboarding CRO + page CRO + pricing strategy delegated to specialist skills (in same plugin) |
| Cross-team practice + 2026 search ecosystem norms | hreflang reciprocity rule, Substack-specific per-post checklist, GEO + AI Overviews layer | n/a |
Audit gap closed 2026-05-10. v1 of this substrate (initial build) cited only AgriciDaniel/claude-seo as the source. The everything-comparison rule required cross-checking the broader marketing-skill landscape, which surfaced the coreyhaines marketingskills bundle. v2 (this revision) incorporates the missing capabilities with proper attribution.
Substrate primitives stay opinionated, full domain surface stays in plugin-installed bundles, cross-skill references make the delegation explicit.