Market SEO — On-page, Technical, and AI Search Audit
Modern SEO has three surfaces: classic Google rankings, Core Web Vitals, and generative search (AI Overviews, ChatGPT browsing, Perplexity). This skill covers all three.
Workflow
- Run
python3 scripts/analyze_page.py <url> to get title, meta, headings, schema, canonical, viewport, tracking.
- Fetch
/robots.txt, /sitemap.xml, /llms.txt directly.
- Read the page content for E-E-A-T signals (author bio, citations, specific detail).
- Score each section, write the audit.
On-Page Checklist
Title tag
- Present, unique, 50–60 chars
- Primary keyword near the start
- Brand at the end (
| Brand or — Brand)
- Compelling enough to earn a click
Meta description
- 140–160 chars
- Includes the keyword naturally
- Has a reason to click (outcome, differentiator, number)
Headings
- Exactly one H1, contains the primary keyword, differs from the title
- H2s describe sections and contain secondary keywords
- No skipped levels (H2 → H4)
Images
- Every content image has descriptive alt text
- Decorative images have empty
alt=""
- Below-fold images use
loading="lazy"
- Filenames are descriptive (not
IMG_0042.jpg)
Internal linking
- 3–10 contextual links per 1,000 words
- Descriptive anchor text (not "click here")
- No orphan pages (should be linked from at least one relevant page)
URL structure
- Human-readable, keyword-containing, under 75 chars, hyphens not underscores, lowercase
Technical SEO
| Check |
Good |
Needs work |
Fail |
| HTTPS |
Valid cert |
Mixed content |
HTTP only |
| robots.txt |
Present, references sitemap, doesn't block CSS/JS |
Minor misconfig |
Blocks the whole site |
| sitemap.xml |
Present, all URLs 200, lastmod accurate |
Exists but stale |
Missing |
| Canonical |
Self-referencing or correct target |
Inconsistent |
Missing |
| Viewport meta |
Present |
— |
Missing |
| Schema (JSON-LD) |
Organization + page-specific types |
Partial |
None |
| hreflang (if multilingual) |
Correct pairs |
Missing return links |
Missing entirely |
Core Web Vitals targets (2024+)
| Metric |
Good |
Needs work |
Poor |
| LCP (Largest Contentful Paint) |
≤ 2.5s |
2.5–4.0s |
> 4.0s |
| INP (Interaction to Next Paint) |
≤ 200ms |
200–500ms |
> 500ms |
| CLS (Cumulative Layout Shift) |
≤ 0.1 |
0.1–0.25 |
> 0.25 |
CWV is a real ranking factor and a large conversion factor — flag failures as revenue issues, not just SEO issues.
E-E-A-T Assessment
Google ranks content by Experience, Expertise, Authoritativeness, Trustworthiness. Score each 0–10 with evidence.
- Experience — first-hand signals: screenshots, case data, "I built this and here's what happened"
- Expertise — author bio with credentials, accurate terminology, depth beyond surface
- Authoritativeness — inbound citations, press, recognized author names
- Trustworthiness — HTTPS, privacy policy, contact info, sourced claims, no dark patterns
AI Search / GEO Readiness (new surface)
Generative engines (Google AI Overviews, ChatGPT, Perplexity, Bing Copilot) pull passages, not pages. Optimize for citability:
- llms.txt — present and pointing to the canonical overview of the site
- Passage-level answers — clear Q-style H2/H3 immediately followed by a 40–80 word answer
- Factual density — specific numbers, dates, named entities (LLMs prefer these)
- Structured data — FAQPage, HowTo, Product, Article schema where applicable
- Crawler access —
robots.txt does not block GPTBot, ClaudeBot, PerplexityBot, Google-Extended unless that's a deliberate policy
- Brand mention signals — consistent brand name, entity-style About page, Wikipedia/Wikidata presence
- Freshness signals —
datePublished and dateModified in JSON-LD
Score this section 0–10 and include it as a first-class dimension.
Keyword Analysis
- Primary keyword — what is this page trying to rank for?
- Search intent — informational / commercial / transactional / navigational. Misalignment kills rankings.
- Placement audit — title, H1, first 100 words, one H2, URL, meta, alt text
- Secondary keywords — 5–10 related terms; confirm they appear naturally
- Density — 1–2% is fine, anything over 3% is stuffing
Output: SEO-AUDIT.md
# SEO Audit — [Brand]
**URL:** [url] | **Date:** [YYYY-MM-DD]
## SEO Score: [X]/100
## On-Page
### Title
- Current: "[quoted]" (X chars)
- Recommended: "[new]" (X chars)
- Why: [reasoning]
### Meta Description
... same format ...
### Headings, Images, Internal Links, URL
... each as a mini-section ...
## Technical
[Table with every technical check + pass/fail + note]
## Core Web Vitals
[If measurable: LCP/INP/CLS. If not: instruct client to check PageSpeed Insights and list likely issues based on the HTML.]
## E-E-A-T
| Dimension | Score | Evidence |
|---|---|---|
## AI Search / GEO Readiness: [X]/10
[Specific gaps and fixes for generative search visibility.]
## Keyword Analysis
[Primary, intent, placement, secondary list]
## Schema Opportunities
[Types to add, with one JSON-LD example tailored to the page]
## Prioritized Fixes
### Critical (this week)
1. ...
### High (this month)
1. ...
### Medium (this quarter)
1. ...
Quality Bar
- Always provide before/after for title and meta — clients act on concrete text, not abstract advice.
- Tie every fix to an expected outcome ("better CTR in SERP", "eligible for rich result", "passes CWV").
- Don't recommend schema types that aren't supported by the page content.
- If the site is already well optimized, say so and focus on the next tier (AI search, internal linking, topical authority).
1---2name: market-seo3description: SEO audit covering on-page, technical, content quality (E-E-A-T), and AI search / GEO readiness for Google AI Overviews, ChatGPT, and Perplexity. Invoke whenever the user says "SEO", "rank higher", "Google traffic", "meta tags", "schema", "llms.txt", or runs `/market seo <url>`. Produces SEO-AUDIT.md with prioritized fixes and before/after examples.4---56# Market SEO — On-page, Technical, and AI Search Audit78Modern SEO has three surfaces: classic Google rankings, Core Web Vitals, and generative search (AI Overviews, ChatGPT browsing, Perplexity). This skill covers all three.910## Workflow11121. Run `python3 scripts/analyze_page.py <url>` to get title, meta, headings, schema, canonical, viewport, tracking.132. Fetch `/robots.txt`, `/sitemap.xml`, `/llms.txt` directly.143. Read the page content for E-E-A-T signals (author bio, citations, specific detail).154. Score each section, write the audit.1617## On-Page Checklist1819### Title tag20- Present, unique, 50–60 chars21- Primary keyword near the start22- Brand at the end (` | Brand` or ` — Brand`)23- Compelling enough to earn a click2425### Meta description26- 140–160 chars27- Includes the keyword naturally28- Has a reason to click (outcome, differentiator, number)2930### Headings31- Exactly one H1, contains the primary keyword, differs from the title32- H2s describe sections and contain secondary keywords33- No skipped levels (H2 → H4)3435### Images36- Every content image has descriptive alt text37- Decorative images have empty `alt=""`38- Below-fold images use `loading="lazy"`39- Filenames are descriptive (not `IMG_0042.jpg`)4041### Internal linking42- 3–10 contextual links per 1,000 words43- Descriptive anchor text (not "click here")44- No orphan pages (should be linked from at least one relevant page)4546### URL structure47- Human-readable, keyword-containing, under 75 chars, hyphens not underscores, lowercase4849## Technical SEO5051| Check | Good | Needs work | Fail |52|---|---|---|---|53| HTTPS | Valid cert | Mixed content | HTTP only |54| robots.txt | Present, references sitemap, doesn't block CSS/JS | Minor misconfig | Blocks the whole site |55| sitemap.xml | Present, all URLs 200, lastmod accurate | Exists but stale | Missing |56| Canonical | Self-referencing or correct target | Inconsistent | Missing |57| Viewport meta | Present | — | Missing |58| Schema (JSON-LD) | Organization + page-specific types | Partial | None |59| hreflang (if multilingual) | Correct pairs | Missing return links | Missing entirely |6061### Core Web Vitals targets (2024+)62| Metric | Good | Needs work | Poor |63|---|---|---|---|64| LCP (Largest Contentful Paint) | ≤ 2.5s | 2.5–4.0s | > 4.0s |65| INP (Interaction to Next Paint) | ≤ 200ms | 200–500ms | > 500ms |66| CLS (Cumulative Layout Shift) | ≤ 0.1 | 0.1–0.25 | > 0.25 |6768CWV is a real ranking factor and a large conversion factor — flag failures as revenue issues, not just SEO issues.6970## E-E-A-T Assessment7172Google ranks content by **Experience, Expertise, Authoritativeness, Trustworthiness**. Score each 0–10 with evidence.7374- **Experience** — first-hand signals: screenshots, case data, "I built this and here's what happened"75- **Expertise** — author bio with credentials, accurate terminology, depth beyond surface76- **Authoritativeness** — inbound citations, press, recognized author names77- **Trustworthiness** — HTTPS, privacy policy, contact info, sourced claims, no dark patterns7879## AI Search / GEO Readiness (new surface)8081Generative engines (Google AI Overviews, ChatGPT, Perplexity, Bing Copilot) pull passages, not pages. Optimize for citability:8283- **llms.txt** — present and pointing to the canonical overview of the site84- **Passage-level answers** — clear Q-style H2/H3 immediately followed by a 40–80 word answer85- **Factual density** — specific numbers, dates, named entities (LLMs prefer these)86- **Structured data** — FAQPage, HowTo, Product, Article schema where applicable87- **Crawler access** — `robots.txt` does not block GPTBot, ClaudeBot, PerplexityBot, Google-Extended unless that's a deliberate policy88- **Brand mention signals** — consistent brand name, entity-style About page, Wikipedia/Wikidata presence89- **Freshness signals** — `datePublished` and `dateModified` in JSON-LD9091Score this section 0–10 and include it as a first-class dimension.9293## Keyword Analysis9495- **Primary keyword** — what is this page trying to rank for?96- **Search intent** — informational / commercial / transactional / navigational. Misalignment kills rankings.97- **Placement audit** — title, H1, first 100 words, one H2, URL, meta, alt text98- **Secondary keywords** — 5–10 related terms; confirm they appear naturally99- **Density** — 1–2% is fine, anything over 3% is stuffing100101## Output: SEO-AUDIT.md102103```markdown104# SEO Audit — [Brand]105**URL:** [url] | **Date:** [YYYY-MM-DD]106107## SEO Score: [X]/100108109## On-Page110### Title111- Current: "[quoted]" (X chars)112- Recommended: "[new]" (X chars)113- Why: [reasoning]114115### Meta Description116... same format ...117118### Headings, Images, Internal Links, URL119... each as a mini-section ...120121## Technical122[Table with every technical check + pass/fail + note]123124## Core Web Vitals125[If measurable: LCP/INP/CLS. If not: instruct client to check PageSpeed Insights and list likely issues based on the HTML.]126127## E-E-A-T128| Dimension | Score | Evidence |129|---|---|---|130131## AI Search / GEO Readiness: [X]/10132[Specific gaps and fixes for generative search visibility.]133134## Keyword Analysis135[Primary, intent, placement, secondary list]136137## Schema Opportunities138[Types to add, with one JSON-LD example tailored to the page]139140## Prioritized Fixes141### Critical (this week)1421. ...143### High (this month)1441. ...145### Medium (this quarter)1461. ...147```148149## Quality Bar150151- Always provide before/after for title and meta — clients act on concrete text, not abstract advice.152- Tie every fix to an expected outcome ("better CTR in SERP", "eligible for rich result", "passes CWV").153- Don't recommend schema types that aren't supported by the page content.154- If the site is already well optimized, say so and focus on the next tier (AI search, internal linking, topical authority).