
Seo Optimizer
- 79 installs
- 14 repo stars
- Updated March 2, 2026
- oakoss/agent-skills
Helps with marketing & seo tasks during AI-assisted development.
About
seo-optimizer is a Claude Code skill for marketing & seo. It helps solo builders move faster with AI-assisted coding.
- seo-optimizer
- Marketing & SEO
- AI-coding skill
Seo Optimizer by the numbers
- 79 all-time installs (skills.sh)
- +2 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #1,193 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/oakoss/agent-skills --skill seo-optimizerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 79 |
|---|---|
| repo stars | ★ 14 |
| Last updated | March 2, 2026 |
| Repository | oakoss/agent-skills ↗ |
What it does
Helps with marketing & seo tasks during AI-assisted development.
Files
SEO Optimizer
Overview
Optimizes digital visibility through entity-based SEO, structured data, and content architecture. Focuses on AI Overviews optimization, E-E-A-T authority signals, and semantic topic clustering rather than keyword-centric approaches.
When to use: Search ranking optimization, structured data implementation, content audits, topical authority planning, featured snippet targeting, Core Web Vitals improvement.
When NOT to use: Paid advertising campaigns, social media strategy, email marketing, brand identity design.
Quick Reference
| Pattern | Approach | Key Points |
|---|---|---|
| AI Overviews | Question-based H2s with direct answers | 1-2 sentence answer before expanding; scannable lists |
| E-E-A-T signals | Experience-led content with author bios | First-hand evidence, SME review labels, credentials |
| Structured data | JSON-LD schema for entities | Organization, Article, FAQ, Breadcrumb schemas |
| Topic clusters | Pillar page + cluster architecture | Internal links flow between pillar and clusters |
| Semantic SEO | Intent mapping + related terms | Map pages to Informational/Commercial/Transactional intent |
| Content audit | 30-point scoring methodology | Title, meta, keywords, structure, snippets, linking, technical |
| Featured snippets | Format-matched content blocks | 40-60 word definitions, numbered steps, comparison tables |
| Schema markup | Explicit entity definitions | Define Who/What/Where in first paragraph + Schema.org |
| Content freshness | Periodic refresh protocol | Update critical articles every 6 months with current data |
| Core Web Vitals | Performance-first design | LCP, CLS, INP monitoring and continuous improvement |
Common Mistakes
| Mistake | Correct Pattern |
|---|---|
| Keyword stuffing to boost rankings | Use semantic SEO with semantically related terms and natural language |
| Publishing generic AI-generated content without expert review | Lead with first-hand experience and E-E-A-T signals |
| Ignoring Core Web Vitals (LCP, CLS, INP) impact on rankings | Implement performance-first design and monitor vitals continuously |
| Using hidden or incomplete JSON-LD schema markup | Define explicit, complete structured data that maps entities clearly |
| Building thin affiliate pages without topical depth | Create pillar pages with full cluster coverage |
| Writing definitions longer than 60 words for snippet targeting | Keep definition paragraphs to 40-60 words for featured snippet eligibility |
| Using non-descriptive anchor text like "click here" or "read more" | Use keyword-rich descriptive anchor text that describes the destination |
| Missing primary keyword from title, description, or first 100 words | Place primary keyword in title, meta description, first paragraph, and one H2 |
Delegation
- Audit a site for technical SEO issues, missing schema, and Core Web Vitals problems: Use
Exploreagent to crawl pages and identify structured data gaps - Implement JSON-LD schema markup and meta tags across page templates: Use
Taskagent to add Organization, Article, FAQ, and Breadcrumb schemas - Plan a topical authority strategy with pillar pages and content clusters: Use
Planagent to map keyword intent, cluster hierarchy, and internal linking architecture
References
- AI Overviews optimization and search visibility
- E-E-A-T standards and authority building
- Semantic entity SEO and topic clusters
- Schema markup patterns with JSON-LD
- Content audit methodology and scoring
AI Overviews Optimization
Google AI Overviews use LLMs to synthesize answers directly in search results. Visibility in these AI-generated summaries is a primary goal of content optimization.
Scannable Answer Boxes
AI models extract information from structured, scannable text. Format content so models can identify and synthesize key points.
Heading format: Use H2/H3 headings that are direct questions:
## How Does Lazy Loading Work?
**Lazy loading** defers the initialization of resources until they are needed.
It reduces initial page load time by loading images, scripts, and components
only when they enter the viewport or are triggered by user interaction.Answer pattern: Follow the question heading with a 1-2 sentence direct answer before expanding into detail. Bold the core concept in the answer.
Entity Extraction Optimization
AI searches for entities (people, places, things, concepts) and their relationships. Make entities explicit rather than implied.
First paragraph rule: Define the core entity in the first paragraph of the page. State what it is, what category it belongs to, and its primary purpose.
Schema.org markup: Provide a machine-readable entity map using JSON-LD:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How Lazy Loading Improves Performance",
"author": {
"@type": "Person",
"name": "Jane Smith",
"jobTitle": "Senior Performance Engineer"
},
"about": {
"@type": "Thing",
"name": "Lazy Loading",
"description": "A design pattern that defers resource initialization"
}
}
</script>Topical Depth (The 360-Degree Rule)
AI Overviews favor content that covers a topic from multiple angles. A single page should address:
| Angle | Example Heading |
|---|---|
| Definition | What is lazy loading? |
| Mechanism | How does lazy loading work? |
| Comparison | Lazy loading vs eager loading |
| Pitfalls | Common lazy loading mistakes |
| Implementation | Step-by-step lazy loading setup |
| Real-world use | Lazy loading in production applications |
Question-Based and Semantically Related Keywords
Question keywords target the query patterns that trigger AI Overview summaries:
- "What are the benefits of..."
- "Step-by-step guide to..."
- "How does X compare to Y..."
Semantically related terms are concepts that naturally co-occur in high-quality discussions of a topic. Include them without forcing:
Topic: "React Server Components"
Related terms: streaming, hydration, bundle size, server-side rendering,
client components, use server directive, RSC payloadVisual Data Insights
AI Overviews can extract insights from tables, charts, and structured data.
Data table requirement: Include at least one data table or comparison chart per long-form article. Tables are highly extractable by AI models.
Image alt text: Describe the _insight_ of the image, not just its visual content:
<!-- Weak: describes appearance -->
<img alt="Bar chart showing three colored bars" />
<!-- Strong: describes the insight -->
<img
alt="Performance comparison showing lazy loading reduces LCP by 40% compared to eager loading"
/>Content Structure for AI Overview Visibility
Effective structure for AI extraction:
1. Lead with the answer -- first 50 words should directly answer the page's core question 2. Use numbered lists for processes -- AI models extract step-by-step content as featured snippets 3. Use comparison tables -- side-by-side format is preferred for "X vs Y" queries 4. Keep paragraphs to 2-4 sentences -- shorter blocks are easier for models to parse 5. Bold key terms on first mention -- signals term importance to extraction algorithms
Content Audit Methodology
A systematic approach to evaluating and optimizing content pages for search visibility. Uses a 30-point scoring system across seven categories.
Scoring Overview
| Category | Max Points |
|---|---|
| Title Tag | 4 |
| Meta Description | 4 |
| Keyword Placement | 5 |
| Content Structure | 6 |
| Featured Snippets | 4 |
| Internal Linking | 4 |
| Technical SEO | 3 |
| Total | 30 |
Score interpretation:
| Score | Status | Action |
|---|---|---|
| 27-30 (90%+) | Excellent | Ready to publish |
| 23-26 (75-89%) | Good | Minor optimizations needed |
| 17-22 (55-74%) | Fair | Several improvements needed |
| 0-16 (<55%) | Poor | Significant work required |
Title Tag (4 Points)
| Check | Points |
|---|---|
| Length 50-60 characters | 1 |
| Primary keyword in first half | 1 |
| Contains compelling hook or benefit | 1 |
| Includes topic qualifier (e.g., "in JavaScript") | 1 |
Formula: [Concept]: [What You'll Understand] in [Topic]
Strong examples:
- "Closures: How Functions Remember Their Scope in JavaScript" (58 chars)
- "Event Loop: How Async Code Actually Runs in JavaScript" (54 chars)
Weak patterns: Too short ("Closures"), too long (>60 chars), no hook ("JavaScript Closures"), missing qualifier.
Meta Description (4 Points)
| Check | Points |
|---|---|
| Length 150-160 characters | 1 |
| Starts with action word (Learn, Understand, Discover) | 1 |
| Contains primary keyword | 1 |
| Promises specific value (lists what reader will learn) | 1 |
Formula: [Action word] [what it is] in [Topic]. [Specific things they'll learn]: [topic 1], [topic 2], and [topic 3].
Strong example: "Learn JavaScript closures and how functions remember their scope. Covers lexical scoping, practical use cases, memory considerations, and common closure patterns." (159 chars)
Keyword Placement (5 Points)
| Check | Points |
|---|---|
| Primary keyword in title | 1 |
| Primary keyword in meta description | 1 |
| Primary keyword in first 100 words | 1 |
| Keyword in at least one H2 heading | 1 |
| No keyword stuffing (reads naturally) | 1 |
Density guideline: Do not exceed 3-4 mentions of the exact phrase per 1,000 words. Use variations naturally.
Content Structure (6 Points)
| Check | Points |
|---|---|
| Opens with question hook | 1 |
| Code example in first 200 words | 1 |
| "What you'll learn" summary near top | 1 |
| Short paragraphs (2-4 sentences) | 1 |
| 1,500+ words total | 1 |
| Key terms bolded on first mention | 1 |
Content length guidelines:
| Length | Assessment |
|---|---|
| <1,000 words | Too thin -- add depth |
| 1,000-1,500 | Minimum viable |
| 1,500-2,500 | Good |
| 2,500-4,000 | Excellent |
| >4,000 | Consider splitting into cluster pages |
Featured Snippets (4 Points)
| Check | Points |
|---|---|
| "What is X" has 40-60 word definition | 1 |
| At least one H2 phrased as a question | 1 |
| Numbered steps for "how to" content | 1 |
| Comparison tables for "X vs Y" content | 1 |
Snippet format mapping:
| Query Type | Winning Format |
|---|---|
| "What is X" | 40-60 word paragraph definition |
| "How to X" | Numbered list or steps |
| "X vs Y" | Comparison table |
| "Types of X" | Bullet list with bold labels |
Internal Linking (4 Points)
| Check | Points |
|---|---|
| 3-5 related pages linked in body text | 1 |
| Descriptive anchor text (not "click here") | 1 |
| Prerequisites noted with links at top | 1 |
| Related content section at bottom with 4 links | 1 |
Anchor text quality:
| Weak | Strong |
|---|---|
| "click here" | "React performance optimization guide" |
| "this article" | "our guide to Server Components" |
| "read more" | "understanding the event loop" |
Technical SEO (3 Points)
| Check | Points |
|---|---|
| Single H1 per page (the title only) | 1 |
| URL slug contains primary keyword | 1 |
| Page linked from at least one other page (not orphaned) | 1 |
URL slug rules: lowercase, hyphens not underscores, include primary keyword, under 50 characters, no IDs or random strings.
Audit Report Template
After auditing, document findings with:
1. Score summary -- points per category with status 2. Target keywords -- primary and secondary keywords with search intent 3. Category-by-category analysis -- specific issues found per section 4. Priority fixes -- high/medium/low ranked action items 5. Implementation checklist -- verification steps after making fixes
Core Web Vitals Performance Check
While not scored in the 30-point content audit, performance directly impacts rankings. Verify these thresholds on every audited page:
| Metric | Good | Needs Improvement | Poor |
|---|---|---|---|
| LCP | <= 2.5s | 2.5s - 4.0s | > 4.0s |
| INP | <= 200ms | 200ms - 500ms | > 500ms |
| CLS | <= 0.1 | 0.1 - 0.25 | > 0.25 |
Common performance fixes for content pages:
| Issue | Fix |
|---|---|
| LCP image loads slowly | Use WebP/AVIF, set explicit dimensions, preload LCP image |
| INP delayed by heavy JS | Code-split, defer non-critical scripts, reduce third-party |
| CLS from images without size | Set width and height attributes on all <img> tags |
| CLS from web font reflow | Use font-display: swap and preload critical fonts |
| CLS from injected ads or embeds | Reserve space with CSS min-height for dynamic content |
E-E-A-T Standards
Experience, Expertise, Authoritativeness, and Trust (E-E-A-T) are the signals search engines use to separate human-quality expertise from generic content.
Experience (The "I" Factor)
Content demonstrating first-hand experience ranks higher than abstract summaries.
Signals to include:
- Personal pronouns indicating direct experience: "In our testing," "I found that..."
- Unique screenshots, case study data, or proprietary research
- Specific metrics from real implementations rather than theoretical claims
- Before/after comparisons from actual projects
Example framing:
## Our Migration Results
After migrating 12 production services from REST to GraphQL over 6 months,
we measured a **34% reduction in API response time** and a **22% decrease
in frontend bundle size** due to eliminated over-fetching.Expertise
Demonstrate domain knowledge through credentials and depth.
Author bios: Every major article should have a detailed author bio with:
- Professional credentials and current role
- Links to other published work or profiles
- Relevant experience summary (years, specializations)
SME review labels: High-stakes content (health, finance, legal) must be reviewed by a subject matter expert:
_Reviewed by Dr. Sarah Chen, Board-Certified Financial Analyst, CFA.
Last reviewed: January 2026._Authoritativeness
Pillar page strategy: Build thorough pages (2,000+ words) that establish the site as a definitive source for a topic cluster. Each pillar page should:
- Cover the topic exhaustively from multiple angles
- Link to 5-10 supporting cluster articles
- Receive internal links back from those cluster articles
- Target the highest-volume keyword in the cluster
Backlink quality: Focus on citations from reputable domains in the specific industry rather than volume of links from unrelated sites.
Trust
Transparency signals:
- Clearly state publishing and last-updated dates
- Cite sources of data with links
- Disclose affiliations and sponsorships
- Display contact information and organizational details
Technical trust:
- HTTPS with valid certificates
- Core Web Vitals within acceptable thresholds (LCP < 2.5s, CLS < 0.1, INP < 200ms). After the December 2025 core update, sites with poor vitals face steeper traffic losses in competitive queries
- Accessible design (WCAG compliance)
AI Attribution
Transparency about AI usage is a trust signal.
Labeling pattern:
_Written by [Author Name], with AI assistance for data synthesis.
All facts verified by the author._Validation requirement: Human verification of all AI-generated facts is mandatory. AI-generated content without expert review is flagged as low-quality by E-E-A-T filters.
E-E-A-T Checklist
| Signal | Implementation | Priority |
|---|---|---|
| Author bio with credentials | Visible on every article page | Critical |
| First-hand experience evidence | Case studies, screenshots, metrics | Critical |
| SME review label | "Reviewed by" with credentials | High (for YMYL content) |
| Publishing and update dates | Visible in page header or footer | High |
| Source citations | Inline links to authoritative sources | High |
| AI attribution | Disclosure of AI assistance | Medium |
| Security posture | HTTPS, valid certs, Core Web Vitals | Critical |
Schema Markup Patterns
JSON-LD is the preferred format for structured data. It is embedded in a <script> tag and does not affect page rendering.
Core Patterns
Organization Schema
Define the publishing entity on every page:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Company",
"url": "https://yourcompany.com",
"logo": "https://yourcompany.com/logo.png",
"description": "Brief description of what the organization does",
"sameAs": [
"https://twitter.com/yourcompany",
"https://linkedin.com/company/yourcompany",
"https://github.com/yourcompany"
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer support",
"url": "https://yourcompany.com/support"
}
}
</script>Article Schema
For blog posts, guides, and documentation pages:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How to Optimize React Performance",
"description": "A guide to React performance optimization techniques",
"datePublished": "2026-01-15",
"dateModified": "2026-01-28",
"author": {
"@type": "Person",
"name": "Jane Smith",
"url": "https://yourcompany.com/team/jane-smith",
"jobTitle": "Senior Frontend Engineer"
},
"publisher": {
"@type": "Organization",
"name": "Your Company",
"logo": {
"@type": "ImageObject",
"url": "https://yourcompany.com/logo.png"
}
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://yourcompany.com/guides/react-performance"
}
}
</script>FAQ Schema
For pages with question-and-answer content:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is React Server Components?",
"acceptedAnswer": {
"@type": "Answer",
"text": "React Server Components render on the server and send only the HTML result to the client, reducing JavaScript bundle size and improving initial load performance."
}
},
{
"@type": "Question",
"name": "How do Server Components differ from SSR?",
"acceptedAnswer": {
"@type": "Answer",
"text": "SSR renders the full component tree on the server and hydrates on the client. Server Components never hydrate — they stay on the server permanently, eliminating their client-side JavaScript entirely."
}
}
]
}
</script>Breadcrumb Schema
For establishing page hierarchy in search results:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://yourcompany.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Guides",
"item": "https://yourcompany.com/guides"
},
{
"@type": "ListItem",
"position": 3,
"name": "React Performance"
}
]
}
</script>HowTo Schema
For step-by-step tutorials:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to Set Up Lazy Loading in React",
"description": "Step-by-step guide to implementing lazy loading with React.lazy and Suspense",
"step": [
{
"@type": "HowToStep",
"name": "Import React.lazy",
"text": "Replace static imports with React.lazy() for route-level components."
},
{
"@type": "HowToStep",
"name": "Wrap in Suspense",
"text": "Add a Suspense boundary with a fallback component around the lazy-loaded component."
},
{
"@type": "HowToStep",
"name": "Test loading states",
"text": "Verify the fallback renders during chunk loading using network throttling."
}
]
}
</script>Implementation Guidelines
| Rule | Rationale |
|---|---|
| One Organization schema per site (in layout) | Establishes site-wide entity identity |
| Article schema on every content page | Enables rich result display in SERPs |
| FAQ schema only when content has Q&A format | Misuse triggers manual actions |
| Breadcrumb schema on all non-homepage pages | Improves SERP display and click-through |
| HowTo schema on step-by-step content only | Enables rich step display in search |
Validation
Test structured data using:
- Google's Rich Results Test: validates eligibility for rich results
- Schema.org Validator: validates syntax correctness
- Lighthouse audit: checks for structured data presence and errors
Common validation errors:
| Error | Fix |
|---|---|
Missing @context | Add "@context": "https://schema.org" |
| Invalid date format | Use ISO 8601: "2026-01-15" |
| Missing required fields | Check schema.org docs for type requirements |
| Duplicate schemas | One schema per type per page |
Semantic Entity SEO
Semantic SEO focuses on user intent and relationships between concepts rather than keyword density. Search engines map content to entities in a knowledge graph.
The Intent Map
Map every page to a specific user intent category:
| Intent | Query Pattern | Content Format |
|---|---|---|
| Informational | "How to bake a cake" | Tutorial with steps |
| Commercial | "Best ovens 2026" | Comparison with pros/cons |
| Transactional | "Buy GE Oven Model X" | Product page with CTA |
| Navigational | "GE Oven support page" | Direct landing page |
Implementation: Add intent as metadata or a comment in the page frontmatter. Every page should serve exactly one primary intent.
Topic Clusters
Group related content around a central pillar page.
Architecture:
┌──────────────┐
│ Pillar Page │
│ (3000+ words) │
└──────┬───────┘
│
┌────────────────┼────────────────┐
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐
│ Cluster A │ │ Cluster B │ │ Cluster C │
│ (1500 words)│ │ (1500 words)│ │ (1500 words)│
└───────────┘ └───────────┘ └───────────┘Internal linking rules:
- Cluster articles link UP to the pillar page
- The pillar page links DOWN to each cluster article
- Cluster articles link ACROSS to related clusters where natural
- Use descriptive anchor text (not "click here")
Example cluster for "React Performance":
| Role | Page | Target Keyword |
|---|---|---|
| Pillar | React Performance Guide | react performance |
| Cluster | React Memo and useMemo | react memoization |
| Cluster | React Lazy Loading | react code splitting |
| Cluster | React Profiler | react profiling tools |
| Cluster | React Server Components | react server components performance |
Schema.org for Entities
Use structured data to explicitly define entities for the knowledge graph.
Organization schema -- define who you are:
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Acme Corp",
"url": "https://acme.com",
"logo": "https://acme.com/logo.png",
"sameAs": ["https://twitter.com/acmecorp", "https://github.com/acmecorp"]
}FAQ schema -- define the questions you answer:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is lazy loading?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Lazy loading defers resource initialization until needed."
}
}
]
}Breadcrumb schema -- define the page hierarchy:
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Guides",
"item": "https://example.com/guides"
},
{ "@type": "ListItem", "position": 3, "name": "Performance" }
]
}NLP-Friendly Writing
Write in patterns that NLP models parse reliably.
Active sentences: Subject, verb, object order. Avoid passive voice for key definitions.
Strong: "React Server Components render on the server."
Weak: "Rendering on the server is done by React Server Components."Semantically related terms: Include terms that naturally co-occur in quality discussions of the topic. Do not force them; weave them in where they fit.
Consistent terminology: Pick one term and use it throughout. Do not alternate between "endpoint," "route," and "URL" for the same concept.
Content Freshness
AI-powered search engines favor current data.
Refresh protocol: Update critical articles every 6 months with:
- Current statistics and benchmarks
- Updated tool versions and recommendations
- New patterns that have emerged since publication
- Removal of deprecated approaches