Installs into .claude/skills of the current project.
Are you the author of seo?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/nurdamiron-seo)
---
name: seo
description: "19 sub-skills: technical audit, E-E-A-T, schema, GEO, LLM optimization, brand AI tracking, intent classification, IndexNow, content rewrite, AI Overviews. Real data only."
user-invocable: true
argument-hint: "[command] [url]"
allowed-tools:
- WebFetch
- WebSearch
- Bash
- Read
- Write
---
# SEO Analyzer v4.0 — Real Data Only
## BEFORE YOU START — Ask if unclear
If the user runs `/seo` without a URL or command, ask:
```
What would you like to analyze?
1. Full audit — /seo audit [url]
2. Single page — /seo page [url]
3. LLM readiness — /seo llm [url]
4. Schema fix — /seo schema [url]
5. Content/E-E-A-T — /seo content [url]
6. Action plan — /seo plan [url]
7. Brand AI check — /seo brand [brand-name] [url]
8. Search intent — /seo intent [url]
9. IndexNow check — /seo indexnow [url]
10. Content rewrite — /seo rewrite [url]
11. AI Overviews — /seo aio [keyword] [url]
Which command and URL?
```
Never simulate, hallucinate, or estimate data you haven't fetched.
If a fetch fails — say so. If you can't check something — say so.
---
## Sub-skills (19 total)
```
/seo audit — full site audit (runs all checks)
/seo page — single page deep analysis
/seo content — E-E-A-T quality scoring
/seo schema — JSON-LD structured data
/seo images — alt text + format audit
/seo sitemap — XML sitemap generation
/seo hreflang — international SEO
/seo local — local business + GBP
/seo geo — AI Overviews / GEO
/seo llm — LLM / AI citation optimization
/seo plan — strategic SEO roadmap
/seo competitor — competitor gap analysis
/seo content-opt — on-page optimization
/seo programmatic — pages at scale
/seo brand — AI brand visibility tracking (NEW)
/seo intent — search intent classification (NEW)
/seo indexnow — IndexNow implementation check (NEW)
/seo rewrite — AutoGEO content rewrite suggestions (NEW)
/seo aio — AI Overviews presence check (NEW)
```
---
## STEP 1 — Real Data Collection (mandatory before any analysis)
When given a URL, run ALL of these in order. Never skip.
### 1a — Fetch live pages
```
WebFetch: [url] → parse HTML: title, meta, H1-H6, canonical,
og tags, JSON-LD blocks, viewport, lang attr
WebFetch: [url]/robots.txt → crawl rules, AI crawler allowances
WebFetch: [url]/sitemap.xml → if 404, check robots.txt for Sitemap: line
WebFetch: [url]/llms.txt → LLM accessibility file (note if missing)
```
Parse raw HTML directly. Extract all `<script type="application/ld+json">` blocks.
Check for client-side rendering: if HTML body has minimal content + heavy JS = CSR warning
(AI crawlers cannot execute JavaScript — CSR content is invisible to them).
### 1b — Core Web Vitals (PageSpeed Insights API, no key required)
```
WebFetch: https://www.googleapis.com/pagespeedonline/v5/runPagespeed
?url=[url_encoded]&strategy=mobile
WebFetch: https://www.googleapis.com/pagespeedonline/v5/runPagespeed
?url=[url_encoded]&strategy=desktop
```
Extract from JSON:
```
lighthouseResult.audits.largest-contentful-paint.displayValue → LCP
lighthouseResult.audits.interaction-to-next-paint.displayValue → INP
lighthouseResult.audits.total-blocking-time.displayValue → TBT
lighthouseResult.audits.cumulative-layout-shift.displayValue → CLS
lighthouseResult.categories.performance.score × 100 → Perf score
lighthouseResult.categories.seo.score × 100 → Lighthouse SEO
```
If API returns error or rate limit: state "CWV: fetch failed — check manually at
pagespeed.web.dev" and mark CWV score as N/A (do not guess).
### 1c — HTTP response headers
```
Bash: curl -sI "[url]" 2>/dev/null | head -40
```
Check: HTTPS redirect (301 from http://), Strict-Transport-Security,
X-Frame-Options, X-Content-Type-Options, Content-Security-Policy,
server/framework leakage in Server: header.
### 1d — Search index presence
```
WebSearch: site:[domain]
```
Note approximate indexed page count from snippet text.
Do NOT treat this number as exact — it is Google's estimate only.
---
## STEP 2 — What this skill CANNOT measure (always state in report)
Always include this block in the report:
```
-- DATA LIMITATIONS ──────────────────────────────────────────
Backlinks requires Ahrefs / Semrush / Moz
Full site crawl requires Screaming Frog / Sitebulb
GSC impressions/CTR requires Google Search Console access
Real INP field data requires Chrome UX Report (CrUX)
Holistic CWV score requires GSC Core Web Vitals report
AI citation tracking requires Brandwatch / Mention / manual
──────────────────────────────────────────────────────────────
```
---
## STEP 3 — Scoring Weights (0-100 total)
```
Technical SEO 20 pts (crawlability, HTTPS, architecture, CWV)
Content / E-E-A-T 20 pts (depth, authorship, citations, freshness)
On-Page SEO 17 pts (title, meta, headings, URL, internal links)
LLM Readiness 18 pts (llms.txt, crawlers, structure, entity clarity)
Schema Markup 9 pts (JSON-LD types, validity, rich snippet eligibility)
Core Web Vitals 10 pts (LCP, INP, CLS — real PSI data only)
Images 6 pts (alt text, WebP/AVIF, lazy loading, sizing)
```
Priority: CRITICAL > HIGH > MEDIUM > LOW
---
## STEP 4 — Technical SEO Checks
### Crawlability
- robots.txt present, valid syntax, no accidental Disallow: /
- sitemap.xml linked from robots.txt, all URLs return 200
- Canonical tags on all indexable pages (self-referencing + cross-page)
- No noindex on pages that should rank
- No redirect chains longer than 1 hop
### Client-Side Rendering (CRITICAL for AI + SEO)
- If HTML <body> has < 500 chars of text content → CSR detected
- CSR means AI crawlers see empty page — GPTBot, ClaudeBot, Google-Extended
cannot execute JavaScript
- Fix: SSR / SSG / prerendering required
### Site Architecture
- Max crawl depth: 3 clicks from homepage to any page
- Internal links use descriptive anchor text (not "click here")
- No orphan pages (pages with zero internal links)
### HTTPS & Security Headers
- Redirects http:// → https:// (301)
- HSTS present: `Strict-Transport-Security: max-age=31536000`
- `X-Content-Type-Options: nosniff`
- `X-Frame-Options: DENY` or `SAMEORIGIN`
- No sensitive data in Server: header
### Core Web Vitals 2026 (75th percentile, holistic site-level scoring)
```
LCP < 2.5s good | 2.5-4.0s needs improvement | > 4.0s poor
INP < 200ms good | 200-500ms needs improvement | > 500ms poor
CLS < 0.1 good | 0.1-0.25 needs improvement | > 0.25 poor
```
Note: Google March 2026 Core Update introduced holistic CWV scoring —
performance is now evaluated across the entire domain, not per-URL.
43% of sites fail the INP threshold (most common failure in 2026).
---
## STEP 5 — Content Quality (E-E-A-T)
### Experience
- First-hand knowledge signals: personal data, case studies, original research
- "We found that..." / "In our testing..." patterns
- Original statistics or surveys (highest AI citation value)
### Expertise
- Named author on every article (not "Admin" or "Staff Writer")
- Author bio page with: credentials, publication history, social links
- Topic depth: glossary, definitions, comprehensive coverage
### Authoritativeness
- Outbound citations to primary sources (studies, official docs, .gov/.edu)
- Year-tagged data — flag anything older than 2 years
- Numbers > adjectives: "42% faster" beats "much faster"
### Trustworthiness
- About + Contact + Privacy pages present and linked from footer
- Author sameAs links: LinkedIn, Google Scholar, ORCID, Twitter/X
- Organization sameAs: Wikidata, Crunchbase, LinkedIn Company
### Content Freshness (AI prefers recent content)
- 85% of Google AI Overview citations are from content < 2 years old
- 44% of citations are from 2025 content
- Visible "Last updated: YYYY-MM-DD" on pages
- `dateModified` in Article schema (not just `datePublished`)
---
## STEP 6 — On-Page SEO
- Title: 50-60 chars, primary keyword in first 3 words, unique per page
- Meta description: 150-160 chars, includes action verb + keyword, unique
- H1: exactly one per page, matches search intent directly
- Heading hierarchy: H1 > H2 > H3, no skipped levels
- URL: short, lowercase, hyphens only, keyword present, no query params
- Internal linking: 3-5 contextual links per page, descriptive anchors
- Open Graph: og:title, og:description, og:image (1200x630), og:url
- Twitter Card: twitter:card, twitter:title, twitter:image
---
## STEP 7 — LLM Optimization (GEO) — 18 points
### Why LLMs cite some content and not others (2026 research data)
- 44.2% of all LLM citations come from the first 30% of a page's text
- Definition-first openings get significantly higher AI impression scores
- Content depth + readability beat traffic + backlinks for AI citation
- Listicles (21.9%), articles (16.7%), product pages (13.7%) = most cited types
- Structured content (headings, lists, FAQ) = most effective format in AI search
- Perplexity inline citations convert at 11x the rate of traditional organic search
- Top-10 organic ranking strongly correlates with AI citation (Ahrefs/Semrush data)
### AI Platform Market Share (2026)
```
ChatGPT 55-60% of AI referral traffic
Perplexity 18-22% (but 11x conversion vs organic)
Gemini ~8.7%
Others ~13%
```
### 7.1 — llms.txt (3 pts)
Community standard (llmstxt.org), NOT yet IETF/W3C official.
Adopted by 600+ sites including Stripe, Cloudflare, Anthropic, Vercel.
Reduces AI hallucinations about your site by 30-70%.
Required format:
```markdown
# [Site Name]
> [One sentence describing what the site is and who it's for]
## Docs
- [Page Title](https://example.com/page): [one sentence description]
- [Page Title](https://example.com/page): [one sentence description]
## API Reference
- [Endpoint](https://example.com/api/v1): [description]
## Optional: pages not for LLMs
- /admin
- /checkout
- /user/settings
```
Score:
- 3 pts: llms.txt exists, valid format, covers key pages
- 1 pt: llms.txt exists but incomplete
- 0 pts: missing
### 7.2 — AI Crawler Access in robots.txt (3 pts)
Complete list of AI crawlers to ALLOW (as of 2026):
```
# OpenAI
User-agent: GPTBot # training data
User-agent: OAI-SearchBot # ChatGPT search
User-agent: ChatGPT-User # ChatGPT browsing (user-triggered)
# Anthropic
User-agent: ClaudeBot # primary crawler
User-agent: Claude-SearchBot # Claude search
User-agent: Claude-User # user-triggered
# Perplexity
User-agent: PerplexityBot # primary crawler
# Note: Perplexity-User IGNORES robots.txt — user-triggered requests
# cannot be blocked via robots.txt. This is a known limitation.
# Google
User-agent: Google-Extended # Gemini / AI Overviews training
User-agent: Google-CloudVertexBot # Vertex AI
# Others
User-agent: Applebot-Extended # Apple AI
User-agent: DeepSeekBot # DeepSeek
User-agent: DuckAssistBot # DuckDuckGo AI
User-agent: Gemini-Deep-Research
User-agent: CCBot # Common Crawl (used by many LLMs)
User-agent: YouBot # You.com
```
IMPORTANT: Blocking these = invisible to that AI platform.
IMPORTANT: Perplexity-User ignores robots.txt by design (user-triggered).
Check each explicitly in robots.txt. Blanket `Allow: /` is NOT enough.
Score:
- 3 pts: all major crawlers explicitly allowed (or no blocks at all)
- 2 pts: main crawlers allowed, some minor ones missing
- 1 pt: partial — some major crawlers blocked
- 0 pts: GPTBot or ClaudeBot blocked
### 7.3 — Answer-First Content Structure (3 pts)
- First paragraph must directly answer the primary query (inverted pyramid)
- "Definition pattern": "[Topic] is [definition]" in first 150 words
- No preamble: ban "In today's world", "It's important to understand", "Many people"
- First 30% of content carries 44.2% of all citation weight — make it count
- Every H2/H3 should be phrased as the question it answers
Score:
- 3 pts: clear answer in first 150 words, every section heading is a question
- 2 pts: answer present but buried after preamble
- 1 pt: no clear answer structure
- 0 pts: heavy preamble, answer not findable in first 30%
### 7.4 — Structured Formatting (2 pts)
- H2/H3 headings for each key question
- Bullet/numbered lists for comparisons, features, steps
- Tables for specs, pricing, comparisons (AI extracts tabular data well)
- Bold on key terms at first use
- Code blocks for technical content
### 7.5 — FAQ / HowTo Schema (2 pts)
- FAQPage schema for question/answer sections
- HowTo schema for step-by-step content
- speakable schema on Article/WebPage for AI Overviews + voice
(target 2-4 speakable sections per page)
### 7.6 — Entity Clarity (2 pts)
- Consistent entity naming (no ambiguous pronouns for brand/product)
- Organization schema with sameAs to Wikidata, LinkedIn, Crunchbase
- Person schema for all authors with sameAs to professional profiles
- Definitions for all acronyms and industry terms (use `<abbr>`)
### 7.7 — Data Density + Citation Worthiness (2 pts)
- Original statistics, surveys, or proprietary research = highest value
- Third-party data cited with direct source links
- Year tagged: "(2025 data)", "(as of March 2026)"
- Flag any stats older than 2 years as needing refresh
### 7.8 — No Client-Side Rendering (1 pt)
- Server renders full HTML — AI crawlers cannot execute JS
- Test: WebFetch the URL and check if meaningful text is in the raw HTML
- 0 pts if body text < 500 chars in raw HTML (CSR detected)
---
## STEP 8 — Schema Markup
JSON-LD only (never microdata or RDFa).
Required types by content:
```
All pages: Organization, BreadcrumbList, WebSite (with SearchAction)
Articles: Article (with author Person, datePublished, dateModified)
Products: Product (with offers Offer, aggregateRating AggregateRating)
FAQ content: FAQPage
How-to: HowTo
Local biz: LocalBusiness
Authors: Person (with sameAs, jobTitle, affiliation)
```
Validate at:
- schema.org/validator
- search.google.com/test/rich-results
- validator.schema.org
Rich snippet eligibility check: FAQ, HowTo, Product, Review, Event, Recipe
---
## STEP 9 — NEW: Brand AI Visibility (/seo brand)
Track how AI search engines currently describe your brand. Uses WebSearch to simulate
what users see when they ask AI assistants about the brand.
### Process
Run these WebSearch queries (replace [brand] with actual brand name):
```
WebSearch: "[brand]" site:perplexity.ai OR inurl:perplexity
WebSearch: what is [brand] [industry]
WebSearch: [brand] review [year]
WebSearch: [brand] vs competitors
WebSearch: [brand] [core product/service]
```
Also check:
```
WebFetch: [url]/llms.txt → brand description accuracy
WebSearch: site:[domain] → index coverage
```
### What to analyze from results
- **Brand description accuracy**: Does Google/AI describe the brand correctly?
- **Sentiment**: Positive / neutral / negative signals in top results
- **Competitor co-mentions**: Which competitors appear alongside the brand?
- **Knowledge gap**: Is the brand absent from results for key queries?
- **Entity disambiguation**: Is the brand confused with other entities?
### Output format
```
╔══════════════════════════════════════════════════════════════╗
║ BRAND AI VISIBILITY | [brand] | [date] ║
╠══════════════════════════════════════════════════════════════╣
║ AI Visibility Score: [XX]/100 ║
╚══════════════════════════════════════════════════════════════╝
Query Result Presence
─────────────────────────────────────────────────────────────
"what is [brand]" [found/not found] [score]
"[brand] vs competitors" [found/not found] [score]
"[brand] [core product]" [found/not found] [score]
─────────────────────────────────────────────────────────────
Brand description found:
"[exact text AI currently shows about the brand]"
Issues detected:
[!] [specific inaccuracy or gap found]
Fix recommendations:
- Add Organization sameAs to Wikidata entry
- Update llms.txt with accurate brand description
- Create/update About page with clear entity signals
- Add FAQ schema answering "What is [brand]?"
```
Scoring (0-100):
- 30 pts: Brand appears in top results for "[brand]" query
- 25 pts: Accurate description in search snippets
- 20 pts: Appears for "[brand] vs" or "[brand] review" queries
- 15 pts: Positive sentiment dominant
- 10 pts: No entity disambiguation issues
---
## STEP 10 — NEW: Search Intent Classification (/seo intent)
For every page analyzed, classify its search intent and check alignment.
### The 4 Intent Types
```
Navigational — user wants a specific site/page (brand queries)
Informational — user wants to learn (how, what, why, guide, tutorial)
Commercial — user is researching before buying (best, top, review, compare)
Transactional — user wants to act now (buy, get, download, sign up, price)
```
### Classification Process
1. **Fetch the page** — extract: title, H1, meta description, first 300 words, URL slug
2. **Identify primary keyword intent signals**:
- URL contains: /blog/, /guide/, /how-to/, /what-is/ → Informational
- URL contains: /buy/, /shop/, /pricing/, /checkout/ → Transactional
- URL contains: /best-, /top-, /review/, /compare/ → Commercial
- URL is homepage or brand name → Navigational
3. **Check content-intent alignment**:
- Informational page should have: definitions, explanations, FAQs, no hard CTAs
- Transactional page should have: price, Add to Cart, urgency signals, trust badges
- Commercial page should have: comparison tables, pros/cons, ratings, "best for" summaries
- Navigational page should have: clear brand identity, direct links to key sections
### Intent Mismatch Detection
Flag when:
- Transactional intent page lacks pricing info or CTA
- Informational page has aggressive sales CTAs (reduces E-E-A-T)
- Commercial page has no comparison data
- Title signals one intent but content delivers another
### Output format per page
```
Page: [url]
Detected intent: [Navigational / Informational / Commercial / Transactional]
Confidence: [High / Medium / Low]
Content alignment: [Aligned / MISMATCH]
Intent signals found:
+ [signal 1]
+ [signal 2]
- [mismatch signal if any]
Fix: [specific change to align content with intent]
```
---
## STEP 11 — NEW: IndexNow Check (/seo indexnow)
IndexNow lets sites instantly notify Bing, Yandex, Naver, and Seznam when content changes.
Google does NOT support IndexNow (uses its own crawl system).
### What to check
1. **IndexNow key file**:
```
WebFetch: [url]/[any-key].txt
```
Look for a plain-text file containing just the API key (alphanumeric, 8-128 chars).
Also check: `WebFetch: [url]/indexnow.txt`
2. **robots.txt hint**:
```
# robots.txt may contain:
# IndexNow: [key]
```
3. **Meta tag** (less common):
```html
<meta name="indexnow-verification" content="[key]">
```
4. **Sitemap ping test** (informational only — cannot verify from outside):
Check if site documentation mentions IndexNow integration.
### Supported search engines (2026)
```
Bing → indexnow.org endpoint
Yandex → yandex.com/indexnow
Naver → searchadvisor.naver.com
Seznam → seznam.cz
DuckDuckGo → via Bing partnership
```
### Output format
```
IndexNow Status:
─────────────────────────────────────────────────
Key file found: [YES: /abc123.txt / NO]
robots.txt hint: [YES / NO]
Meta tag: [YES / NO]
─────────────────────────────────────────────────
Status: [IMPLEMENTED / NOT IMPLEMENTED]
If NOT IMPLEMENTED — fix:
1. Generate a key: openssl rand -hex 32
2. Create /[key].txt containing just the key
3. Add to robots.txt: IndexNow: [key]
4. On content publish: POST to https://api.indexnow.org/indexnow
Body: {"host":"[domain]","key":"[key]","urlList":["[updated-url]"]}
5. Bing propagates to DuckDuckGo automatically
```
---
## STEP 12 — NEW: AutoGEO Content Rewrite (/seo rewrite)
Based on AutoGEO (ICLR 2026) — automatically generate AI-optimized rewrites
of the most citation-critical sections of a page.
### Process
1. **Fetch the page** and extract:
- First 300 words (highest citation weight zone)
- All H2/H3 headings
- First paragraph under each heading
2. **Analyze for AutoGEO failure patterns**:
- Preamble before the answer ("In today's fast-paced world...")
- Passive voice density > 20%
- No definition in first 150 words
- Headings that don't phrase a question
- Missing statistics or data points
- Long sentences > 25 words (LLMs prefer ≤ 20 words)
- Jargon without inline definition
3. **Generate rewrites** for each failing section:
Show original → rewritten side by side:
```
SECTION: [H2 heading]
─────────────────────────────────────────────────────────
ORIGINAL:
"[exact original text, first 2-3 sentences]"
REWRITTEN (AutoGEO):
"[rewritten version: definition-first, active voice, data added,
question-phrased heading, ≤ 20 word sentences]"
Changes made:
+ Added definition in sentence 1
+ Moved key stat to opening
+ Converted heading to question format
+ Shortened avg sentence: 31 → 18 words
─────────────────────────────────────────────────────────
```
### AutoGEO Rewrite Rules (apply in order)
1. **Definition first**: Open with "[Topic] is [definition]" — never with context-setting
2. **Active voice**: "We measured X" not "X was measured"
3. **Stat anchoring**: Include one number in first 2 sentences if topic allows
4. **Question headings**: Every H2/H3 = a question the section answers
5. **Short sentences**: Max 20 words. Split anything longer
6. **Bold key terms**: First use of every important term gets `**bold**`
7. **Inverted pyramid**: Most important → least important (journalism style)
8. **No throat-clearing**: Delete first sentence if it contains "In today's", "It is important", "Many people"
### Output: rewrite-suggestions.md
Write a file with all rewrite suggestions in diff-friendly format.
---
## STEP 13 — NEW: AI Overviews Presence Check (/seo aio)
Google AI Overviews (formerly SGE) appear for ~20% of queries in 2026.
Check whether your content is being cited or excluded.
### Process
1. **Identify target keywords** from the page (if not provided):
- Extract H1, first H2, meta title → derive 3-5 informational queries
2. **Run presence checks via WebSearch**:
```
WebSearch: [keyword] — note if result snippet looks like an AI Overview summary
WebSearch: what is [topic from page]
WebSearch: how to [action from page]
WebSearch: best [product/service from page]
WebSearch: [brand] [core topic]
```
3. **Analyze SERP signals** from WebSearch results:
- Are results informational or commercial? (AI Overviews favor informational)
- Does the domain appear in any top-3 results?
- Are competitors in results for these queries?
- Is featured snippet present? (correlates strongly with AIO citations)
4. **AIO eligibility scoring**:
```
Query: [keyword]
─────────────────────────────────────────────────────────
SERP type: [Informational / Commercial / Mixed]
AIO likely: [YES / NO / UNKNOWN]
Your domain in top 3: [YES / NO]
Featured snippet: [YES — yours / YES — competitor / NO]
AIO citation risk: [Likely cited / Unlikely / Blocked by CSR]
─────────────────────────────────────────────────────────
```
### AIO Ranking Factors (2026 data)
- Top-10 organic position = strongest predictor of AIO inclusion
- 85% of AIO citations are from content < 2 years old
- FAQ schema + speakable schema significantly improve AIO appearance
- Content with statistics cited from primary sources = 3x more likely in AIO
- CSR pages = 0% AIO inclusion (AI cannot render JavaScript)
- Answer-first structure (STEP 7.3) = highest AIO correlation
### Output
```
╔══════════════════════════════════════════════════════════════╗
║ AI OVERVIEWS CHECK | [domain] | [date] ║
╠══════════════════════════════════════════════════════════════╣
║ AIO Readiness Score: [XX]/100 ║
╚══════════════════════════════════════════════════════════════╝
Keyword SERP Type Top-3? AIO Eligible?
─────────────────────────────────────────────────────────
[keyword 1] Info YES LIKELY
[keyword 2] Commercial NO UNLIKELY
[keyword 3] Mixed NO POSSIBLE
─────────────────────────────────────────────────────────
Blockers found:
[!] CSR detected — AI cannot index content
[!] No FAQ schema — missing AIO signal
[~] Content age > 2 years on [page] — refresh needed
Quick wins:
- Add FAQPage schema to [url]
- Add speakable markup to answer sections
- Refresh publication date + add dateModified to schema
```
---
## STEP 14 — Terminal Output Format
### Phase 1 — Data collection log (show as you fetch)
```
╔══════════════════════════════════════════════════════════════╗
║ SEO ANALYZER v4.0 | [domain] ║
╚══════════════════════════════════════════════════════════════╝
Fetching data — no simulation, real results only
[1/7] HTML + meta + schema ......................... [status]
[2/7] robots.txt + sitemap.xml ..................... [status]
[3/7] llms.txt ..................................... [status]
[4/7] PageSpeed Insights (mobile + desktop) ........ [status]
[5/7] HTTP headers (curl -sI) ...................... [status]
[6/7] Search index (site:[domain]) ................. [status]
[7/7] IndexNow key file ............................ [status]
[status] = "done" | "FAILED: [reason]" | "404 not found"
```
Show each line as it completes. Show real values, not placeholders.
### Phase 2 — Health Report
```
╔══════════════════════════════════════════════════════════════╗
║ SEO HEALTH REPORT | [domain] | [YYYY-MM-DD] ║
╠══════════════════════════════════════════════════════════════╣
║ SCORE: [XX]/100 [progress_bar] Grade: [letter] ║
╚══════════════════════════════════════════════════════════════╝
Category Points Bar Weight
────────────────────────────────────────────────────
Technical SEO [x]/20 [██████████] 20%
Content / E-E-A-T [x]/20 [██████████] 20%
LLM Readiness [x]/18 [██████████] 18% <- AI era
On-Page SEO [x]/17 [██████████] 17%
Core Web Vitals [x]/10 [██████████] 10%
Schema Markup [x]/ 9 [██████████] 9%
Images [x]/ 6 [██████████] 6%
────────────────────────────────────────────────────
TOTAL [x]/100 [██████████]
Core Web Vitals (real PSI data):
LCP [mobile]: [value] [GOOD/NEEDS WORK/POOR]
INP [mobile]: [value] [GOOD/NEEDS WORK/POOR]
CLS [mobile]: [value] [GOOD/NEEDS WORK/POOR]
Performance: [score]% mobile | [score]% desktop
╔══════════════════════════════════════════════════════════════╗
║ CRITICAL [N] HIGH [N] MEDIUM [N] LOW [N] ║
╚══════════════════════════════════════════════════════════════╝
-- CRITICAL ─────────────────────────────────────────────────
[!] [exact issue found from real data — never invented]
-- HIGH ──────────────────────────────────────────────────────
[#] [exact issue found from real data]
-- MEDIUM ────────────────────────────────────────────────────
[~] [exact issue found from real data]
-- LOW ───────────────────────────────────────────────────────
[-] [exact issue found from real data]
-- DATA LIMITATIONS ──────────────────────────────────────────
Backlinks requires Ahrefs / Semrush / Moz
Full site crawl requires Screaming Frog / Sitebulb
GSC data requires Google Search Console access
Real INP field data requires Chrome UX Report (CrUX)
Holistic CWV score requires GSC Core Web Vitals report
──────────────────────────────────────────────────────────────
╔══════════════════════════════════════════════════════════════╗
║ GENERATED FILES ║
╠══════════════════════════════════════════════════════════════╣
║ sitemap.xml — built from crawled URLs ║
║ robots.txt — all AI crawlers allowed ║
║ llms.txt — site map for LLMs ║
║ schema.json — JSON-LD ready to paste ║
║ seo-action-plan.md — prioritized fixes with effort tags ║
║ rewrite-suggestions.md — AutoGEO content rewrites ║
╚══════════════════════════════════════════════════════════════╝
```
### Progress bar rule
`█` = filled, `░` = empty, always 10 chars.
`[████████░░]` = 80% | `[████░░░░░░]` = 40% | `[██████████]` = 100%
### Grade thresholds
```
90-100 A+ AI-citation-ready, excellent
80-89 A Strong, minor gaps
70-79 B+ Good, LLM gaps need fixing
60-69 B Fair, structural work needed
50-59 C Weak, significant problems
< 50 D Critical, rebuild fundamentals
```
---
## STEP 15 — Generated Artifacts
After every full audit, write these files using the Write tool:
**sitemap.xml**
- Include only URLs that returned 200 from WebFetch
- Add lastmod (today's date if unknown), priority, changefreq
- Never invent URLs
**robots.txt**
- Allow all AI crawlers listed in 7.2
- Keep existing disallow rules from original robots.txt
- Add Sitemap: [url]/sitemap.xml line
- Add IndexNow: [key] line if key was found
**llms.txt**
- Per llmstxt.org format
- Only include pages you actually fetched and verified
- Note pages not suitable for LLMs (admin, checkout, etc.)
**schema.json**
- JSON-LD based on actual page content
- Include Organization + WebSite + Article (if article) + FAQ (if FAQ content found)
- Add speakable on sections that directly answer questions
**seo-action-plan.md**
```
# SEO Action Plan — [domain] — [date]
## CRITICAL (fix today)
- [ ] [issue]: [exact fix] — effort: [low/medium/high]
## HIGH (fix this week)
- [ ] [issue]: [exact fix] — effort: [low/medium/high]
## MEDIUM (fix this month)
- [ ] [issue]: [exact fix] — effort: [low/medium/high]
## LOW (backlog)
- [ ] [issue]: [exact fix] — effort: [low/medium/high]
```
**rewrite-suggestions.md** (generated by /seo rewrite or included in full audit)
```
# AutoGEO Rewrite Suggestions — [domain] — [date]
## [Page URL]
### [Section heading]
**ORIGINAL:** [original text]
**REWRITTEN:** [AutoGEO-optimized version]
**Changes:** [list of applied rules]
```
---
## Standards & Sources (2026)
- Core Web Vitals: developers.google.com/search/docs/appearance/core-web-vitals
- INP replaced FID: March 2024
- Holistic CWV scoring: Google March 2026 Core Update
- llms.txt spec: llmstxt.org (community standard, not IETF/W3C yet)
- E-E-A-T: developers.google.com/search/docs/fundamentals/creating-helpful-content
- AI Overviews ranking: 85% citations from content < 2 years old
- AutoGEO research: ICLR 2026 (cxcscmu/AutoGEO)
- GEO research: arxiv.org/abs/2311.09735 (Princeton GEO paper)
- AI crawler user agents: pulserank.ai/ai-crawlers-user-agents (updated monthly)
- IndexNow: indexnow.org (real-time indexing for Bing, Yandex, Naver, Seznam)
- Schema.org: schema.org/docs/schemas.html
- Search intent classification: Semrush/Ahrefs intent framework (4-type model)
- Brand AI visibility: Gego framework (AI2HU/gego)