# Three SEO skills on pre-launch Astro: what each caught

> Three SEO skills, one pre-launch Astro site, no live URL: title fixed in 3 minutes, full-site scored at 82/100, content E-E-A-T at 65/100.

**Canonical URL**: https://agentcookbooks.com/blog/three-seo-skills-pre-launch-audit/

**Published**: 2026-04-29

**Tags**: claude-code, skills, seo

---

Three skills, one site, one day before the custom domain attached. No Search Console, no paid SEO tools, no live URL to crawl — everything ran against Astro source files. The targets: [`/seo-page`](/skills/seo-page/) on `src/pages/index.astro`, [`/seo-audit`](/skills/seo-audit/) on the full source tree, and [`/seo-content`](/skills/seo-content/) on a single skill wiki entry. The receipts: per-page audit caught a 16-character title tag and a missing internal link in 3 minutes; full-site pass scored 82/100 with a 60% framework-degradation footnote (no live URL means no crawl, no Core Web Vitals, no indexation data); content audit landed E-E-A-T at 65/100 and surfaced the placeholder-receipts gap on a bulk-imported wiki entry. Below: what each skill found and where the degradation kicks in without paid tooling.

## [`/seo-page`](/skills/seo-page/): per-page audit, two fixes in 3 minutes

**Target:** `src/pages/index.astro` (homepage).

The skill loads about 85 lines of audit framework — on-page checklist, content quality, schema, images, Core Web Vitals, a full output-format spec. One guardrail baked in: never recommend HowTo (deprecated) or FAQ (government/health-only) schema. That alone saves a common mistake on pages with Q&A-shaped sections.

Two critical fixes landed immediately.

**1. Title tag was 16 characters.** The homepage wasn't passing a `title` prop to `Base.astro`; the layout renders `${title} — ${SITE_TITLE}` if a prop is passed, otherwise just `SITE_TITLE`. Result: the page title was just "Agent Cookbooks." Fixed with `title="Claude Code cookbook: hooks, skills, MCP"` — 58 characters, primary keyword front-loaded.

**2. No body link to `/skills/`.** The site had 142 skill wiki entries at that point and one blog post. The homepage body linked only to `/blog/`. One-word anchor added.

A third critical issue — `/og-default.png` and `/logo-512.png` referenced in code but not generated — wasn't file-editable. Flagged, not fixed.

**The source-only catch:** the skill is shaped for live HTML. Applied to an Astro source file it means manually tracing the layout chain — `index.astro` → `Base.astro` → `consts.ts` — to know what actually ends up in `<head>`. Three reads before the audit can start. Not a skill defect; the prescribed path uses DataForSEO MCP on a live URL. Just not what was available.

Time: compressed a ~10-minute manual check to ~3 minutes by enumerating exactly what to look at.

## [`/seo-audit`](/skills/seo-audit/): full-site pass, 82/100

**Scope:** 8 source files read in parallel — `robots.txt`, `index.astro`, `skills/index.astro`, `blog/index.astro`, `Base.astro`, `SkillPage.astro`, `BlogPost.astro`, `llms.txt.ts`, `astro.config.mjs`.

The skill loads about 340 lines of methodology: Crawlability/Indexation, Technical Foundations, On-Page, Content Quality, E-E-A-T, and a substantial International SEO/hreflang reference section (not applicable here — single-locale site, ~80 lines loaded for nothing).

One warning earns its keep immediately: `web_fetch` can't see JS-injected schema. A lesser audit would false-flag missing schema on raw HTML reads. All schema on this site is in `<script>` JSON-LD blocks emitted server-side from layouts, so static reads catch everything — but the warning matters on other sites.

**What came back clean:** TechArticle + SoftwareApplication + BreadcrumbList on skill pages correctly composed. Per-skill raw markdown endpoints with `rel="alternate"`. `llms.txt` with citation guidance. `robots.txt` naming 14 AI crawlers explicitly.

**Schema coverage:** 5/7 page types fully covered. Gap at `/blog/` index (no schema) and topic pages (unverified). 4 high-priority code edits proposed: add `/blog/<slug>.md` raw markdown endpoints, add CollectionPage JSON-LD to the blog index, port auto-related-by-topic to `BlogPost.astro`, tighten the blog index title.

**Score: 82/100.** That's a band, not a real number. Pre-launch sites can't have a real score because half the inputs — traffic, link profile, Core Web Vitals — don't exist yet.

**The 60% degradation:** "Crawlability & Indexation" assumes you can run a `site:` query. "Core Web Vitals" needs PageSpeed Insights. "Indexation Issues" needs Search Console coverage. None available pre-launch. Source-only, you're using maybe 60% of the prescribed checks. 0 external requests were needed for this run — everything resolved from source.

## [`/seo-content`](/skills/seo-content/): content quality audit, E-E-A-T 65/100

**Target:** `src/content/skills/competitor-profiling.md` — one of 40 bulk-imported wiki entries flagged as having placeholder receipts.

The skill loads about 190 lines of framework — E-E-A-T scoring rubric (4×25 points), AI Citation Readiness criteria, Helpful Content System notes, GEO strategies.

**Scores:**
- E-E-A-T: 65/100. Experience tanked: 8/25. No firsthand artifact in Receipts.
- AI Citation Readiness: 70/100. Good structure, missing first-party data.

**5 issues found:** editorial bar violation (no firsthand artifact), zero internal links to related entries, no first-party data, word count ~600 vs. 800-word floor.

**The structural finding:** the page that got flagged has the same receipts gap as 40 of 142 wiki entries. The audit identifies this, it doesn't fix it. The fix is running the actual skill and capturing notes — the audit and the receipts workflow are complements, not substitutes.

**The framework fit problem:** E-E-A-T scoring assumes an author bio, customer testimonials, and HTTPS signals. None apply to a brand-anonymous skill review page. The rubric needs loose interpretation for this content type. The skill also references `skills/seo/references/eeat-framework.md` as a supplementary file; that file isn't auto-loaded with the skill. Same pattern as [`/copy-editing`](/skills/copy-editing/)'s "Plain English Alternatives" reference — supplementary files load on demand, not with the skill activation.

## What three skills cover together

| Skill | Scope | Tooling needed | What degrades without it |
|---|---|---|---|
| `/seo-page` | One page | DataForSEO MCP (live URL) | Must trace layout chain manually on source files |
| `/seo-audit` | Full site | Screaming Frog, GSC, PageSpeed | ~40% of checks — crawlability, CWV, indexation |
| `/seo-content` | One content piece | None | Framework fit loosens for non-marketing content types |

None of them substitute for paid tooling and a live URL. All three degrade gracefully — the degradation is just visible rather than silent. `/seo-content` is the cheapest to run without external tools: it reads the markdown, scores the content, finds the gap. No crawler needed.

The three skills don't overlap. Per-page issues, site-wide architecture issues, and content-quality issues are different scopes. Running all three takes less time than a manual audit of any one.

Subscribe to RSS for the rest.