SEO Sweep Phase 3 — Cosmos Universe Audit + Starter Prompt¶
Hand-off date: Mon 11 May 2026, ~12:00 NZST Purpose: Sweep SEO meta across ALL cosmos planets and moons — Earth (aguidetocloud-revamp) was completed in Phase 1+2, but the other 7 planets share the parent brand and need parity. Status: Audit complete. ~100–170 pages need rewrite across 7 surfaces.
TL;DR for next session¶
Paste this into a fresh Copilot CLI session:
Please continue the cosmos-wide SEO sweep. Read
learning-docs/docs/reference/seo-sweep-phase3-prompt.mdfirst — it has the per-planet audit, the live homepage audit, the SLA touch-points, and the recommended commit order. Apply the same parallel-safe rules + SLA protocols. Each planet gets its own commit. Update the session journal at the end.
Phase 1 + 2 already completed on Earth¶
- 818 page rewrites across 7 commits (Phase 2A–2G)
- 845 failing → 50 failing (94% reduction)
- 8 sibling scripts in
aguidetocloud-revamp/scripts/
Other planets share Earth's brand parent (aguidetocloud.com domain). They need their own sweep so the universe presents consistently in SERPs.
Live homepage audit (Mon 11 May 2026)¶
Quick check via Invoke-WebRequest confirms even homepages are failing:
| Planet | Live URL | Title len | Desc len | Notes |
|---|---|---|---|---|
| 🌍 Earth | aguidetocloud.com/ | 72 ❌ | 0 ❌ | Homepage _index.md not in Phase 2 scope. Worth touching. |
| 🌑 Guided | aguidetocloud.com/guided/ | 88 ❌ | 178 ❌ | Both over limit |
| Brain Bar | cmd.aguidetocloud.com/ | 69 ❌ | 0 ❌ | No meta description in HTML |
| Shift | shift.aguidetocloud.com/ | 30 ⚠️ | 185 ❌ | Title too short, desc too long |
| Plain AI | plainai.aguidetocloud.com/ | 8 ❌ | 54 ❌ | Title is literally "Plain AI" |
| Cosmos Atlas | cosmos.aguidetocloud.com/ | 31 ⚠️ | 123 ✓ | Best of the bunch |
Agentic + Claw planets — domain not yet checked. Assume similar issues.
Per-planet detail (from explore agent audit)¶
🪐 Brain Bar¶
- Path:
C:\ssClawy\aguidetocloud-revamp\brainbar\ - Stack: Hugo (sub-project inside Earth's repo)
- Pages: ~7 markdown files (
content/*.md) - Meta source: frontmatter
title:/description:→baseof.html:6-8with.Site.Params.descriptionfallback - No existing SEO audit script
Sampled 5 pages:
| File | T len | D len | Score est |
|---|---:|---:|---:|
| content/about.md | 10 | 60 | ~60 |
| content/all.md | 11 | 92 | ~55 |
| content/watch.md | 14 | 147 | ~68 |
| content/changelog.md | 12 | 89 | ~58 |
| content/wishlist.md | 74 | 97 | ~62 |
Dominant pattern: Titles too short (10-14 chars) — generic page names. Descriptions decent but missing hooks/numbers.
Fix approach: - Hand-craft each of 5 page metas (small surface, hand-crafting > scripting) - Add Site Params default that scores ≥70 for any future page - Estimated rewrites: 3-5 - Risk: low — separate Hugo project, separate deploy, no SLA touch
🌑 Moon — Guided¶
- Path:
C:\ssClawy\guided\ - Stack: Astro
- Pages: ~14 .astro + dynamic routes (
[vendor],[slug],[cert]/practice,[...slug]) - Data: ~126 cert TOMLs + ~614 question JSON files
- Meta source:
BaseLayout.astroprops (title,description) - No existing SEO audit script (
test-guided-qa.cjsis SLA gate, not SEO)
Phase 1 already touched:
- [slug]/index.astro — short title + capped 155-char desc (commit 32d61f4)
- [cert]/practice.astro — same (commit 32d61f4)
- displayCode helper to strip vendor prefix (commit f226246)
Still failing:
- index.astro (homepage) — title 88 chars, desc 178 chars
- help/, about/, other static pages — generic, low score
- [vendor]/index.astro — needs brand+hook consistency
Fix approach:
- Hand-craft homepage + 8-12 static pages
- Audit [vendor]/ template, ensure all 14+ vendors get compliant titles
- Estimated rewrites: 20-40 pages
- Risk: HIGH — SLA-protected: PracticeQuiz.tsx, [cert]/practice.astro, [slug]/index.astro, src/data/questions/*.json. Use full SLA protocol from ~/.copilot/copilot-instructions.md § Practice Exam SLA.
🪐 Shift¶
- Path:
C:\ssClawy\shift\ - Stack: Astro
- Pages: ~12 .astro pages + dynamic routes (
role/[slug],compare/[pair],og/[slug]) - Data:
src/data/roles.json(~35 roles) - Meta source: page props into
BaseLayout.astro:13-18with default fallback at:32 - No SEO audit script. Has
check-paid-firewall.mjs,validate-roles.mjs
Sampled 5 pages:
| File | T len | D len | Score est |
|---|---:|---:|---:|
| index.astro | 5 | ~129 | ~45 |
| about.astro | ~10 | ~110 | ~35 |
| all.astro | ~5 | ~100 | ~40 |
| compare/index.astro | ~10 | ~110 | ~40 |
| role/[slug].astro | role-specific | ~90-120 | ~35 |
Dominant pattern: WEAKEST PLANET. Titles 5-10 chars (way short), no brand/hook/CTA in most. 35 role pages all share the same template — could be uniform fix.
Fix approach:
- Hand-craft homepage + 5-8 static pages
- Build a role-page meta helper (the 35 roles can be templated by job title + category)
- Estimated rewrites: 12-35 pages (depending on whether 35 roles all need touching)
- Risk: medium — no SLA touch, but roles.json is a build-time data input. Don't change schema.
🪐 Plain AI¶
- Path:
C:\ssClawy\plainai\ - Stack: Custom JSON pipeline (NOT Hugo or Astro)
- Pages: ~163 JSON content items (78 topic cards + 60 changes + 18 learn + 3 standalone)
- Meta source:
build-shared.mjspageHead({ title, description, ... })function - Build entry points:
build.mjs,build-changes.mjs,build-learn.mjs - Has accessibility audits:
scripts/qa.mjs,scripts/audit-detail.mjs,audit.mjs— NOT SEO-specific - 🌱 BRAND CONSTRAINT: Plain AI's voice rules in
~/.copilot/plain-ai-voice-guardrail.mdMUST be respected. Forbidden words include "comprehensive", "frontier", "agentic", "robust", etc. Stick to plain English.
Sampled 5 pages:
| File | T len | D len | Score est |
|---|---:|---:|---:|
| content/pages/about.json | ~14 | 58 | ~55 |
| content/pages/why.json | ~23 | 127 | ~60 |
| content/pages/licence.json | ~22 | 142 | ~58 |
| content/topics/ai-news-summaries.json | 20-30 | 100-130 | ~65 |
| content/changes/openai-gpt-5.json | 20-35 | 140-160 | ~75 |
Dominant pattern: Decent baseline. Weakest spots: generic topic titles, missing CTA/hook consistency.
Fix approach:
- Write a Plain AI-specific SEO normalizer that respects voice guardrail
- Three content types: pages, topics, changes, learn — each gets its own template
- Title template proposal: "{name} — Plain AI" with hook for new content
- Description: take intro or first sentence + ensure ≥120 chars; trim ≤155
- Estimated rewrites: 25-50 pages
- Risk: low — JSON only, build is rebuild-from-source
🌌 Cosmos Atlas¶
- Path:
C:\ssClawy\cosmos-atlas\ - Stack: Astro
- Pages: ~2 .astro pages (mostly the interactive atlas itself + 404)
- Meta source:
Base.astroprops with hardcoded defaults - 🔬 HAS A PLAYWRIGHT QA SUITE:
scripts/qa-audit.mjs— universal "growing-guardrail" rule applies. Don't delete checks.
Sampled 5 pages:
| File | T len | D len | Score est |
|---|---:|---:|---:|
| src/pages/index.astro | ~29 | ~128 | ~78 |
| src/pages/404.astro | ~31 | ~87 | ~55 |
Dominant pattern: Best of the bunch. Already mostly SEO-shaped.
Fix approach:
- Touch only 404 + maybe homepage description tweak
- Estimated rewrites: 0-2 pages
- Risk: low — but run node scripts/qa-audit.mjs before AND after per universal Cosmos QA rule
🪐 Agentic Planet¶
- Path:
C:\ssClawy\agentic-planet\ - Stack: Astro
- Pages: ~36 .astro + dynamic routes (
mcp/[slug],vendors/[slug],learn/[slug],recipes/[slug],compare/[category],desk/[slug],faq/[slug]) - Data: Collection-driven (MCPs, vendors, recipes, learn entries)
- Meta source:
BaseLayout.astroprops with default fallback at:45 - No SEO audit script (uses Astro check + pagefind)
Sampled 5 pages:
| File | T len | D len | Score est |
|---|---:|---:|---:|
| src/pages/index.astro | ~20 | ~100 | ~60 |
| mcp/[slug].astro | "X — MCP review" | summary-based | ~70 |
| vendors/[slug].astro | similar pattern | summary-based | ~70 |
| recipes/[slug].astro | similar pattern | description-based | ~68 |
| faq/[slug].astro | "Q: ..." | summary-based | ~62 |
Dominant pattern: Generally solid. Inconsistency between collection summaries is the main gap.
Fix approach: - Audit each collection entry's description field — make sure all hit 120-155 chars + have brand+hook+CTA - Hand-craft homepage + about + faq landing - Estimated rewrites: 10-20 pages - Risk: medium — touches MCP review data; check if any MCP-specific SLA / data feed contracts exist
🪐 Claw Planet¶
- Path:
C:\ssClawy\claw-planet\ - Stack: Astro
- Pages: ~23 .astro + dynamic routes (
connections/[slug],compare/[slug],plugins/[slug],security/[slug],setup/[slug],use-cases/[slug],overview/[slug]) - Data: Collection-driven
- Meta source:
BaseLayout.astro:30-35,82-101, usuallyentry.data.description - Strong editorial safety rails:
voice-lint,audit:claims,audit:verification,smoke,check:links. NO SEO audit script.
Sampled 5 pages:
| File | T len | D len | Score est |
|---|---:|---:|---:|
| src/pages/index.astro | 13 | ~170 | ~60 |
| setup/[slug].astro | "§ N Title" | entry desc | ~68 |
| plugins/[slug].astro | entry title | entry desc | ~68 |
| security/[slug].astro | entry title | entry desc | ~68 |
| compare/index.astro | ~15 | ~110 | ~58 |
Dominant pattern: Descriptive but not aggressively hooky. Many pages miss the hook word.
Fix approach:
- Audit collection entry descriptions for hook word
- Hand-craft homepage + compare landing + few static pages
- Estimated rewrites: 10-18 pages
- Risk: medium — voice-lint may reject certain wording. Run voice-lint before commit.
Recommended Phase 3 commit order¶
Lowest risk first, SLA-touching last:
| Phase | Planet | Risk | Est. rewrites | Status |
|---|---|---|---|---|
| 3A | Cosmos Atlas | low | 0-2 | ✅ DONE (Mon 11 May 2026) — 57a40cc |
| 3B | Brain Bar | low | 3-5 | ✅ DONE (Mon 11 May 2026) — 15ba8695 |
| 3C | Plain AI | low | 25-50 | ✅ DONE (Mon 11 May 2026) — 63c5d50 + 31a9fd4 (homepage followup) |
| 3D | Agentic Planet | medium | 10-20 | ✅ DONE (Mon 11 May 2026) — 74c11ca → ed6c18c (rebased) |
| 3E | Claw Planet | medium | 10-18 | ✅ DONE (Mon 11 May 2026) — 21cf1cd |
| 3F | Shift | medium | 12-35 | ✅ DONE (Mon 11 May 2026) — 03c98c5 (100% L2 on 637 indexed pages) |
| 3G | Guided (Moon) | HIGH | 20-40 | ✅ DONE (Mon 11 May 2026, ~13:30–14:00 NZST) — 5 commits 00113cd → 7550396. 95.7% L2 compliance on 23 indexed pages, 0 critical, 0 SLA failures. Pattern: BaseLayout trimToWord helper + cosmos-style · Guided suffix → homepage rewrite → vendor template (fixed 13 pages) → 4 statics → polish. SLA gate green BEFORE and AFTER every commit (40/40 each run). No PracticeQuiz / question-data / checkout / build-pipeline touched. |
| 3H | Earth homepage | low | 1 page | ✅ DONE (Mon 11 May 2026) — eff277b8 (folded into aguidetocloud-revamp push with 3B) |
Per-planet tooling needed¶
Each planet uses a different SEO meta plumbing. Reusing the 8 Earth scripts isn't straightforward. Approach:
| Planet | Tool needed |
|---|---|
| Brain Bar | Adapt rewrite-tool-index-metas.ps1 for brainbar/content/*.md (just change content dir) |
| Cosmos Atlas | Hand-edit Base.astro defaults + 404.astro props |
| Plain AI | NEW: scripts/normalize-seo.mjs — Node script that walks content/*/*.json, checks SEO quality, writes back. Must respect voice guardrail. |
| Agentic Planet | NEW: Astro collection front-matter normalizer (likely Node) |
| Claw Planet | NEW: Same approach as Agentic, with voice-lint gate |
| Shift | NEW: Role-page meta helper in BaseLayout.astro + audit-and-rewrite for static pages |
| Guided | Hand-craft + audit script extension. No script writes to SLA files. |
Cross-planet shared work (do once)¶
Build a shared L2 quality scorer¶
Currently each planet would need its own scorer. A SHARED quality scorer would be valuable:
Option A: PowerShell at root of each repo (per-repo copies)
Option B: Node-based scorer that reads package.json to learn the planet's meta source, then audits → applicable across Astro planets and Plain AI
Option C: Just adapt the existing Hugo scorer to each planet's content shape (5 scripts total)
Recommendation: Option C — copy aguidetocloud-revamp/scripts/check-seo-quality.ps1 to each planet, adapt for its content layout. Same L2 standards apply universe-wide.
Brand/hook/CTA word lists¶
The wordlists from Earth's Phase 2 are universal. Each planet should share:
- BrandWords (Microsoft, Azure, AI, Copilot, etc.)
- HookWords (Free, New, Complete, etc.)
- CtaWords (Free, Practice, Guide, etc.)
- HypeWords (banned: ultimate, comprehensive, etc.)
Maintain in a single place; copy-paste into each planet's scorer.
SLA + safety rules (cross-planet)¶
| Planet | Don't touch | Pre-push check | Post-deploy smoke |
|---|---|---|---|
| Guided | PracticeQuiz.tsx, [cert]/practice.astro, [slug]/index.astro, src/data/questions/*.json, package.json scripts, Astro config |
node test-guided-qa.cjs |
3-URL smoke (data/checkout/practice) |
| Cosmos Atlas | (interactive nav files) | node scripts/qa-audit.mjs (dev) |
node scripts/qa-audit.mjs https://cosmos.aguidetocloud.com/ (live) |
| Shift | check-paid-firewall.mjs boundaries |
validate-roles.mjs |
Manual visit role pages |
| Claw Planet | (voice/claims-protected content) | voice-lint, audit:claims, audit:verification |
check:links |
| Plain AI | (none — JSON only) | scripts/qa.mjs (accessibility) |
Check live tab favicon = lotus |
| Agentic Planet | (none) | Astro check | Manual visit collection pages |
| Brain Bar | (Brain Bar QA suite if exists) | Hugo build clean | Manual visit |
Parallel-safe git rules¶
Same as Phase 1+2. Each planet has its own repo (except Brain Bar which lives in aguidetocloud-revamp). The other Tools session may also be touching:
- aguidetocloud-revamp/data/toolkit_nav.toml
- aguidetocloud-revamp/static/css/<tool>.css
- aguidetocloud-revamp/layouts/<tool>/list.html
Brain Bar work is in aguidetocloud-revamp/brainbar/ — that's likely safe but check git status -s before staging.
Other planet repos (guided, shift, plainai, cosmos-atlas, agentic-planet, claw-planet) are separate. Each has its own remote.
Done criteria for Phase 3¶
- Per-planet audit script run (or equivalent): <10% pages failing
- 0 critical (<50 score)
- Each planet's smoke/QA suite green
- Per-planet commit + push (one logical change per planet)
- Session journal updated
- This file updated marking each planet as ✅ DONE
What this Phase 3 prompt DOESN'T cover¶
- Image SEO (OG images per page) — Phase 4
- Structured data / JSON-LD per planet — Phase 4
- Sitemap generation — already exists per planet
- Internal linking improvements — Phase 4
- Search Console submission — manual
These are bigger projects. Phase 3 is scoped to title + meta description hygiene only.
Document established: Mon 11 May 2026, ~12:00 NZST. Audit findings produced by Copilot CLI explore agent (cosmos-seo-audit, gpt-5.4-mini, 109s). Phase 1+2 commits live; Phase 3 ready to start in a fresh session.