SEO
Improve search visibility through technical correctness, performance, and content relevance — not gimmicks.
Distinct from ai-visibility: This skill covers traditional search engine optimization (Google, Bing). ai-visibility covers GEO — optimizing for AI crawlers, llms.txt, and AI citation surfaces.
When to Use
- Auditing crawlability, indexability, canonicals, or redirects
- Improving title tags, meta descriptions, and heading structure
- Adding or validating structured data (JSON-LD)
- Improving Core Web Vitals (LCP, INP, CLS)
- Keyword research and URL-to-keyword mapping
- Planning internal linking or sitemap/robots changes
Principles
- Fix technical blockers before content optimization
- One page — one clear primary search intent
- Prefer long-term quality signals over manipulative patterns
- Mobile-first: indexing is mobile-first
- Recommendations should be page-specific and implementable
Technical SEO Checklist
Crawlability
robots.txt allows important pages, blocks low-value surfaces
- No important page is unintentionally
noindex
- Important pages reachable within shallow click depth
- No redirect chains longer than two hops
- Canonical tags are self-consistent and non-looping
Indexability
- Preferred URL format is consistent
- Multilingual pages have correct
hreflang if used
- Sitemaps reflect the intended public surface
- No duplicate URLs without canonical control
Core Web Vitals targets
| Metric |
Target |
| LCP (Largest Contentful Paint) |
< 2.5s |
| INP (Interaction to Next Paint) |
< 200ms |
| CLS (Cumulative Layout Shift) |
< 0.1 |
Common fixes: preload hero assets · reduce render-blocking JS · reserve layout space · trim heavy third-party scripts
On-Page Rules
Title tags
- ~50–60 characters
- Primary keyword/concept near the front
- Legible to humans first
Meta descriptions
- ~120–160 characters
- Honest description of the page
- Include main topic naturally
Heading structure
- One clear
H1 per page
H2/H3 reflect actual content hierarchy
- Do not skip levels for visual styling
Structured Data
| Page type |
Schema type |
| Homepage |
Organization or LocalBusiness |
| Blog/article |
Article or BlogPosting |
| Product page |
Product + Offer |
| Interior nav |
BreadcrumbList |
| Q&A sections |
FAQPage (only when content truly matches) |
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Page Title Here",
"author": { "@type": "Person", "name": "Author Name" },
"publisher": { "@type": "Organization", "name": "Brand Name" }
}
Keyword Mapping
- Define the search intent
- Gather realistic keyword variants
- Prioritize by intent match, value, and competition
- Map one primary keyword/theme to one URL
- Detect and avoid keyword cannibalization
Audit Output Format
[HIGH] Duplicate title tags on product pages
Location: src/routes/products/[slug].tsx
Issue: Dynamic titles collapse to the same default string.
Fix: Generate unique titles using product name + primary category.
[MEDIUM] Missing structured data on blog posts
Location: src/routes/blog/[slug].tsx
Issue: No Article schema — missing potential rich snippet eligibility.
Fix: Add JSON-LD BlogPosting schema with headline, author, datePublished.
Anti-Patterns
| Anti-pattern |
Fix |
| Keyword stuffing |
Write for users first |
| Thin near-duplicate pages |
Consolidate or differentiate |
| Schema for content that doesn't match |
Remove or align content |
noindex on indexable pages |
Audit robots meta tags |
| Missing canonical on paginated series |
Add canonical pointing to series root |
See Also
1---2name: seo3description: Use when the user wants better search visibility, SEO remediation, schema markup, sitemap/robots work, or keyword mapping — audits and implements technical SEO, on-page optimization, Core Web Vitals, and structured data4---56# SEO78Improve search visibility through technical correctness, performance, and content relevance — not gimmicks.910> **Distinct from [`ai-visibility`](../ai-visibility/SKILL.md):** This skill covers traditional search engine optimization (Google, Bing). `ai-visibility` covers GEO — optimizing for AI crawlers, llms.txt, and AI citation surfaces.1112## When to Use1314- Auditing crawlability, indexability, canonicals, or redirects15- Improving title tags, meta descriptions, and heading structure16- Adding or validating structured data (JSON-LD)17- Improving Core Web Vitals (LCP, INP, CLS)18- Keyword research and URL-to-keyword mapping19- Planning internal linking or sitemap/robots changes2021## Principles22231. Fix technical blockers before content optimization242. One page — one clear primary search intent253. Prefer long-term quality signals over manipulative patterns264. Mobile-first: indexing is mobile-first275. Recommendations should be page-specific and implementable2829## Technical SEO Checklist3031### Crawlability3233- `robots.txt` allows important pages, blocks low-value surfaces34- No important page is unintentionally `noindex`35- Important pages reachable within shallow click depth36- No redirect chains longer than two hops37- Canonical tags are self-consistent and non-looping3839### Indexability4041- Preferred URL format is consistent42- Multilingual pages have correct `hreflang` if used43- Sitemaps reflect the intended public surface44- No duplicate URLs without canonical control4546### Core Web Vitals targets4748| Metric | Target |49|--------|--------|50| LCP (Largest Contentful Paint) | < 2.5s |51| INP (Interaction to Next Paint) | < 200ms |52| CLS (Cumulative Layout Shift) | < 0.1 |5354Common fixes: preload hero assets · reduce render-blocking JS · reserve layout space · trim heavy third-party scripts5556## On-Page Rules5758### Title tags5960- ~50–60 characters61- Primary keyword/concept near the front62- Legible to humans first6364### Meta descriptions6566- ~120–160 characters67- Honest description of the page68- Include main topic naturally6970### Heading structure7172- One clear `H1` per page73- `H2`/`H3` reflect actual content hierarchy74- Do not skip levels for visual styling7576## Structured Data7778| Page type | Schema type |79|-----------|-------------|80| Homepage | `Organization` or `LocalBusiness` |81| Blog/article | `Article` or `BlogPosting` |82| Product page | `Product` + `Offer` |83| Interior nav | `BreadcrumbList` |84| Q&A sections | `FAQPage` (only when content truly matches) |8586```json87{88 "@context": "https://schema.org",89 "@type": "Article",90 "headline": "Page Title Here",91 "author": { "@type": "Person", "name": "Author Name" },92 "publisher": { "@type": "Organization", "name": "Brand Name" }93}94```9596## Keyword Mapping97981. Define the search intent992. Gather realistic keyword variants1003. Prioritize by intent match, value, and competition1014. Map one primary keyword/theme to one URL1025. Detect and avoid keyword cannibalization103104## Audit Output Format105106```text107[HIGH] Duplicate title tags on product pages108Location: src/routes/products/[slug].tsx109Issue: Dynamic titles collapse to the same default string.110Fix: Generate unique titles using product name + primary category.111112[MEDIUM] Missing structured data on blog posts113Location: src/routes/blog/[slug].tsx114Issue: No Article schema — missing potential rich snippet eligibility.115Fix: Add JSON-LD BlogPosting schema with headline, author, datePublished.116```117118## Anti-Patterns119120| Anti-pattern | Fix |121|-------------|-----|122| Keyword stuffing | Write for users first |123| Thin near-duplicate pages | Consolidate or differentiate |124| Schema for content that doesn't match | Remove or align content |125| `noindex` on indexable pages | Audit robots meta tags |126| Missing canonical on paginated series | Add canonical pointing to series root |127128## See Also129130- [ai-visibility](../ai-visibility/SKILL.md) — GEO optimization for AI crawlers and llms.txt131- [content-strategy](../content-strategy/SKILL.md) — keyword research, topic clusters, content calendar