Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

seo-review — Claude Code skill: what it does, how to install

Runs targeted SEO audits on JavaScript concept guides to optimize search visibility and featured snippets.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add leonardomso/33-js-concepts --skill seo-review -a claude-code
Open on GitHub

What seo-review does

The skill evaluates documentation in five steps. It builds keyword clusters covering primary terms and interview questions. Then it inspects on-page tags, tests featured snippet readiness, and outputs a structured report.

Pre-configured query sets cover core topics like the Call Stack, Event Loop, and Promises. Because the skill relies directly on patterns from the 33 JavaScript Concepts project, auditing content outside of educational JavaScript guides requires writing custom keyword templates.

What it helps with

  • generate keyword clusters for JavaScript concept topics
  • audit on-page elements before publishing documentation
  • optimize article structure for search engine featured snippets
  • evaluate internal linking across concept guides

Example prompts for the agent

  • Run a seo-review on our new closures guide
  • Audit the Event Loop documentation page using seo-review
  • Check on-page SEO and snippet potential for the Promises article

How to install seo-review

1Skills CLI (Vercel)

npx skills add leonardomso/33-js-concepts --skill seo-review -a claude-code

2Manually: put the files in place

~/.claude/skills/seo-review/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/seo-review/

From the same set6

The whole set →

Similar

seo-image-gen AgriciDaniel Generates OG images, blog heroes, product photos, and infographics through Gemini. Use it when an SEO asset needs to be created from an agent workflow. Claude Code CX Codex Cursor +1 6,000installs seo-sxo AgriciDaniel The skill compares your page's type against the top 10 search results and finds the gap between what Google rewards and what the page actually delivers. Claude Code CX Codex Cursor +1 5,600installs seo-flow AgriciDaniel Skill integrates FLOW, a structured SEO approach with 41 prompts across five stages. Get stage-specific prompts from keyword research through conversion optimization without improvised queries. Claude Code CX Codex Cursor +1 5,400installs seo-report every-app Compiles SEO research into a standalone HTML report and saves it with save_report. It helps turn audit findings into printable pages and team summaries. Claude Code CX Codex Cursor +1 1,900installs audit-website squirrelscan Runs squirrel CLI audits against a website, pinpoints SEO, performance, and security issues, and applies fixes directly to source code. Claude Code CX Codex Cursor +1 73,900installs gtm-positioning-strategy official Smit Patel (https://linkedin.com/in/smitkpatel) This skill helps identify product differentiation and test whether buyers respond to positioning claims. Use it before changing messaging or committing to a rebrand. GitHub Copilot 1,900installs seo-audit coreyhaines31 Diagnoses technical SEO issues, indexing drops, and metadata errors. Identifies why your site is losing organic search rankings in Google. Claude Code CX Codex Cursor +1 236,800installs brand claudekit Keeps brand voice, visual rules and design tokens in one markdown file, then feeds them to your agent's prompts and to your CSS variables. Claude Code CX Codex Cursor +1 39,500installs

Questions about seo-review

How to install seo-review in Claude Code?

Run npx skills add leonardomso/33-js-concepts --skill seo-review -a claude-code in your terminal.

What does the seo-review skill do?

It runs a five-step SEO review on JavaScript guides, evaluating keyword clustering, on-page factors, featured snippet readiness, and internal links.

Which concepts have pre-built keyword clusters?

The skill includes ready-to-use matrices for Call Stack, Primitive Types, Value vs Reference, Type Coercion, Closures, Event Loop, Promises, and several other JavaScript core topics.

Source text

SKILL.md · MIT
---
name: seo-review
description: Perform a focused SEO audit on JavaScript concept pages to maximize search visibility, featured snippet optimization, and ranking potential
---

# Skill: SEO Audit for Concept Pages

Use this skill to perform a focused SEO audit on concept documentation pages for the 33 JavaScript Concepts project. The goal is to maximize search visibility for JavaScript developers.

## When to Use

- Before publishing a new concept page
- When optimizing underperforming pages
- Periodic content audits
- After major content updates
- When targeting new keywords

## Goal

Each concept page should rank for searches like:
- "what is [concept] in JavaScript"
- "how does [concept] work in JavaScript"
- "[concept] JavaScript explained"
- "[concept] JavaScript tutorial"
- "[concept] JavaScript example"

---

## SEO Audit Methodology

Follow these five steps for a complete SEO audit.

### Step 1: Identify Target Keywords

Before auditing, identify the keyword cluster for the concept.

#### Keyword Cluster Template

| Type | Pattern | Example (Closures) |
|------|---------|-------------------|
| **Primary** | [concept] JavaScript | closures JavaScript |
| **What is** | what is [concept] in JavaScript | what is a closure in JavaScript |
| **How does** | how does [concept] work | how do closures work |
| **How to** | how to use/create [concept] | how to use closures |
| **Why** | why use [concept] | why use closures JavaScript |
| **Examples** | [concept] examples | closure examples JavaScript |
| **vs** | [concept] vs [related] | closures vs scope |
| **Interview** | [concept] interview questions | closure interview questions |

### Step 2: On-Page SEO Audit

Check all on-page SEO elements systematically.

### Step 3: Featured Snippet Optimization

Verify content is structured to win featured snippets.

### Step 4: Internal Linking Audit

Check the internal link structure.

### Step 5: Generate Report

Document findings using the report template.

---

## Keyword Clusters by Concept

Use these pre-built keyword clusters for each concept.

<AccordionGroup>
  <Accordion title="Call Stack">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript call stack, call stack JavaScript |
    | What is | what is the call stack in JavaScript |
    | How does | how does the call stack work |
    | Error | maximum call stack size exceeded, stack overflow JavaScript |
    | Visual | call stack visualization, call stack explained |
    | Interview | call stack interview questions JavaScript |
  </Accordion>

  <Accordion title="Primitive Types">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript primitive types, primitives in JavaScript |
    | What are | what are primitive types in JavaScript |
    | List | JavaScript data types, types in JavaScript |
    | vs | primitives vs objects JavaScript |
    | typeof | typeof JavaScript, JavaScript typeof operator |
    | Interview | JavaScript types interview questions |
  </Accordion>

  <Accordion title="Value vs Reference Types">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript value vs reference, pass by reference JavaScript |
    | What is | what is pass by value in JavaScript |
    | How does | how does JavaScript pass objects |
    | Comparison | value types vs reference types JavaScript |
    | Copy | how to copy objects JavaScript, deep copy JavaScript |
  </Accordion>

  <Accordion title="Type Coercion">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript type coercion, type conversion JavaScript |
    | What is | what is type coercion in JavaScript |
    | How does | how does type coercion work |
    | Implicit | implicit type conversion JavaScript |
    | Explicit | explicit type conversion JavaScript |
    | Interview | type coercion interview questions |
  </Accordion>

  <Accordion title="Equality Operators">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript equality, == vs === JavaScript |
    | What is | what is the difference between == and === |
    | Comparison | loose equality vs strict equality JavaScript |
    | Best practice | when to use == vs === |
    | Interview | JavaScript equality interview questions |
  </Accordion>

  <Accordion title="Scope and Closures">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript closures, JavaScript scope |
    | What is | what is a closure in JavaScript, what is scope |
    | How does | how do closures work, how does scope work |
    | Types | types of scope JavaScript, lexical scope |
    | Use cases | closure use cases, why use closures |
    | Interview | closure interview questions JavaScript |
  </Accordion>

  <Accordion title="Event Loop">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript event loop, event loop JavaScript |
    | What is | what is the event loop in JavaScript |
    | How does | how does the event loop work |
    | Visual | event loop visualization, event loop explained |
    | Related | call stack event loop, task queue JavaScript |
    | Interview | event loop interview questions |
  </Accordion>

  <Accordion title="Promises">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript Promises, Promises in JavaScript |
    | What is | what is a Promise in JavaScript |
    | How to | how to use Promises, how to chain Promises |
    | Methods | Promise.all, Promise.race, Promise.allSettled |
    | Error | Promise error handling, Promise catch |
    | vs | Promises vs callbacks, Promises vs async await |
  </Accordion>

  <Accordion title="async/await">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript async await, async await JavaScript |
    | What is | what is async await in JavaScript |
    | How to | how to use async await, async await tutorial |
    | Error | async await error handling, try catch async |
    | vs | async await vs Promises |
    | Interview | async await interview questions |
  </Accordion>

  <Accordion title="this Keyword">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript this keyword, this in JavaScript |
    | What is | what is this in JavaScript |
    | How does | how does this work in JavaScript |
    | Binding | call apply bind JavaScript, this binding |
    | Arrow | this in arrow functions |
    | Interview | this keyword interview questions |
  </Accordion>

  <Accordion title="Prototypes">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript prototype, prototype chain JavaScript |
    | What is | what is a prototype in JavaScript |
    | How does | how does prototype inheritance work |
    | Chain | prototype chain explained |
    | vs | prototype vs class JavaScript |
    | Interview | prototype interview questions JavaScript |
  </Accordion>

  <Accordion title="DOM">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript DOM, DOM manipulation JavaScript |
    | What is | what is the DOM in JavaScript |
    | How to | how to manipulate DOM JavaScript |
    | Methods | getElementById, querySelector JavaScript |
    | Events | DOM events JavaScript, event listeners |
    | Performance | DOM performance, virtual DOM vs DOM |
  </Accordion>

  <Accordion title="Higher-Order Functions">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript higher order functions, higher order functions |
    | What are | what are higher order functions |
    | Examples | map filter reduce JavaScript |
    | How to | how to use higher order functions |
    | Interview | higher order functions interview |
  </Accordion>

  <Accordion title="Recursion">
    | Type | Keywords |
    |------|----------|
    | Primary | JavaScript recursion, recursion in JavaScript |
    | What is | what is recursion in JavaScript |
    | How to | how to write recursive functions |
    | Examples | recursion examples JavaScript |
    | vs | recursion vs iteration JavaScript |
    | Interview | recursion interview questions |
  </Accordion>
</AccordionGroup>

---

## Audit Checklists

### Title Tag Checklist (4 points)

| # | Check | Points | How to Verify |
|---|-------|--------|---------------|
| 1 | Length 50-60 characters | 1 | Count characters in `title` frontmatter |
| 2 | Primary keyword in first half | 1 | Concept name appears early |
| 3 | Ends with "in JavaScript" | 1 | Check title ending |
| 4 | Contains compelling hook | 1 | Promises value/benefit to reader |

**Scoring:**
- 4/4: ✅ Excellent
- 3/4: ⚠️ Good, minor improvements possible
- 0-2/4: ❌ Needs significant work

**Title Formula:**
```
[Concept]: [What You'll Understand] in JavaScript
```

**Good Examples:**
| Concept | Title (with character count) |
|---------|------------------------------|
| Closures | "Closures: How Functions Remember Their Scope in JavaScript" (58 chars) |
| Event Loop | "Event Loop: How Async Code Actually Runs in JavaScript" (54 chars) |
| Promises | "Promises: Handling Async Operations in JavaScript" (49 chars) |
| DOM | "DOM: How Browsers Represent Web Pages in JavaScript" (51 chars) |

**Bad Examples:**
| Issue | Bad Title | Better Title |
|-------|-----------|--------------|
| Too short | "Closures" | "Closures: How Functions Remember Their Scope in JavaScript" |
| Too long | "Understanding JavaScript Closures and How They Work with Examples" (66 chars) | "Closures: How Functions Remember Their Scope in JavaScript" (58 chars) |
| No hook | "JavaScript Closures" | "Closures: How Functions Remember Their Scope in JavaScript" |
| Missing "JavaScript" | "Understanding Closures and Scope" | Add "in JavaScript" at end |

---

### Meta Description Checklist (4 points)

| # | Check | Points | How to Verify |
|---|-------|--------|---------------|
| 1 | Length 150-160 characters | 1 | Count characters in `description` frontmatter |
| 2 | Starts with action word | 1 | "Learn", "Understand", "Discover" (NOT "Master") |
| 3 | Contains primary keyword | 1 | Concept name + "JavaScript" present |
| 4 | Promises specific value | 1 | Lists what reader will learn |

**Description Formula:**
```
[Action word] [what it is] in JavaScript. [Specific things they'll learn]: [topic 1], [topic 2], and [topic 3].
```

**Good Examples:**

| Concept | Description |
|---------|-------------|
| Closures | "Learn JavaScript closures and how functions remember their scope. Covers lexical scoping, practical use cases, memory considerations, and common closure patterns." (159 chars) |
| Event Loop | "Discover how the JavaScript event loop manages async code execution. Understand the call stack, task queue, microtasks, and why JavaScript is single-threaded but non-blocking." (176 chars - trim!) |
| DOM | "Learn how the DOM works in JavaScript. Understand how browsers represent HTML as a tree, select and manipulate elements, traverse nodes, and optimize rendering." (162 chars) |

**Bad Examples:**

| Issue | Bad Description | Fix |
|-------|-----------------|-----|
| Too short | "Learn about closures" | Expand to 150-160 chars with specifics |
| Starts with "Master" | "Master JavaScript closures..." | "Learn JavaScript closures..." |
| Too vague | "A guide to closures" | List specific topics covered |
| Missing keyword | "Functions can remember things" | Include "closures" and "JavaScript" |

---

### Keyword Placement Checklist (5 points)

| # | Check | Points | How to Verify |
|---|-------|--------|---------------|
| 1 | Primary keyword in title | 1 | Check frontmatter `title` |
| 2 | Primary keyword in meta description | 1 | Check frontmatter `description` |
| 3 | Primary keyword in first 100 words | 1 | Check opening paragraphs |
| 4 | Keyword in at least one H2 heading | 1 | Scan all `##` headings |
| 5 | No keyword stuffing | 1 | Content reads naturally |

**Keyword Placement Map:**

```
┌─────────────────────────────────────────────────────────────────────────┐
│                         KEYWORD PLACEMENT                                │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  🔴 CRITICAL (Must have keyword)                                         │
│  ─────────────────────────────────                                       │
│  • title frontmatter                                                     │
│  • description frontmatter                                               │
│  • First paragraph (within 100 words)                                    │
│  • At least one H2 heading                                               │
│                                                                          │
│  🟡 RECOMMENDED (Include naturally)                                      │
│  ──────────────────────────────────                                      │
│  • "What you'll learn" Info box                                          │
│  • H3 subheadings                                                        │
│  • Key Takeaways section                                                 │
│  • First sentence after major H2s                                        │
│                                                                          │
│  ⚠️ AVOID                                                                │
│  ─────────                                                               │
│  • Same phrase >4 times per 1000 words                                   │
│  • Forcing keywords where pronouns work better                           │
│  • Awkward sentence structures to fit keywords                           │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘
```

---

### Content Structure Checklist (6 points)

| # | Check | Points | How to Verify |
|---|-------|--------|---------------|
| 1 | Opens with question hook | 1 | First paragraph asks engaging question |
| 2 | Code example in first 200 words | 1 | Simple example appears early |
| 3 | "What you'll learn" Info box | 1 | `<Info>` component after opening |
| 4 | Short paragraphs (2-4 sentences) | 1 | Scan content for long blocks |
| 5 | 1,500+ words | 1 | Word count check |
| 6 | Key terms bolded on first mention | 1 | Important terms use `**bold**` |

**Content Structure Template:**

```
┌─────────────────────────────────────────────────────────────────────────┐
│                       IDEAL PAGE STRUCTURE                               │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  1. QUESTION HOOK (First 50 words)                                       │
│     "How does JavaScript...? Why do...?"                                 │
│                                                                          │
│  2. BRIEF ANSWER + CODE EXAMPLE (Words 50-200)                           │
│     Quick explanation + simple code demo                                 │
│                                                                          │
│  3. "WHAT YOU'LL LEARN" INFO BOX                                         │
│     5-7 bullet points                                                    │
│                                                                          │
│  4. PREREQUISITES WARNING (if applicable)                                │
│     Link to required prior concepts                                      │
│                                                                          │
│  5. MAIN CONTENT SECTIONS (H2s)                                          │
│     Each H2 answers a question or teaches a concept                      │
│     Include code examples, diagrams, tables                              │
│                                                                          │
│  6. COMMON MISTAKES / GOTCHAS SECTION                                    │
│     What trips people up                                                 │
│                                                                          │
│  7. KEY TAKEAWAYS                                                        │
│     8-10 numbered points summarizing everything                          │
│                                                                          │
│  8. TEST YOUR KNOWLEDGE                                                  │
│     5-6 Q&A accordions                                                   │
│                                                                          │
│  9. RELATED CONCEPTS                                                     │
│     4 cards linking to related topics                                    │
│                                                                          │
│  10. RESOURCES (Reference, Articles, Videos)                             │
│      MDN links, curated articles, videos                                 │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘
```

---

### Featured Snippet Checklist (4 points)

| # | Check | Points | How to Verify |
|---|-------|--------|---------------|
| 1 | "What is X" has 40-60 word definition | 1 | Count words in first paragraph after "What is" H2 |
| 2 | At least one H2 is phrased as question | 1 | Check for "What is", "How does", "Why" H2s |
| 3 | Numbered steps for "How to" content | 1 | Uses `<Steps>` component or numbered list |
| 4 | Comparison tables (if applicable) | 1 | Tables for "X vs Y" content |

**Featured Snippet Patterns:**

```
┌─────────────────────────────────────────────────────────────────────────┐
│                     FEATURED SNIPPET FORMATS                             │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  QUERY TYPE             WINNING FORMAT         YOUR CONTENT              │
│  ───────────            ──────────────         ────────────              │
│                                                                          │
│  "What is X"            Paragraph              40-60 word definition     │
│                                                after H2, bold keyword    │
│                                                                          │
│  "How to X"             Numbered list          <Steps> component or      │
│                                                1. 2. 3. markdown         │
│                                                                          │
│  "X vs Y"               Table                  | Feature | X | Y |       │
│                                                comparison table          │
│                                                                          │
│  "Types of X"           Bullet list            - **Type 1** — desc       │
│                                                - **Type 2** — desc       │
│                                                                          │
│  "[X] examples"         Code block             ```javascript             │
│                         + explanation          // example code           │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘
```

**Definition Paragraph Example (40-60 words):**

```markdown
## What is a Closure in JavaScript?

A **closure** is a function that retains access to variables from its outer 
(enclosing) scope, even after that outer function has finished executing. 
Closures are created every time a function is created in JavaScript, allowing 
inner functions to "remember" and access their lexical environment.
```

(This is 52 words - perfect for a featured snippet)

---

### Internal Linking Checklist (4 points)

| # | Check | Points | How to Verify |
|---|-------|--------|---------------|
| 1 | 3-5 related concepts linked in body | 1 | Count `/concepts/` links in prose |
| 2 | Descriptive anchor text | 1 | No "click here", "here", "this" |
| 3 | Prerequisites in Warning box | 1 | `<Warning>` with links at start |
| 4 | Related Concepts section has 4 cards | 1 | `<CardGroup>` at end with 4 Cards |

**Good Anchor Text:**

| ❌ Bad | ✓ Good |
|--------|--------|
| "click here" | "event loop concept" |
| "here" | "JavaScript closures" |
| "this article" | "our Promises guide" |
| "read more" | "understanding the call stack" |

**Link Placement Strategy:**

```markdown
<!-- In Prerequisites (Warning box) -->
<Warning>
**Prerequisite:** This guide assumes you understand [Promises](/concepts/promises) 
and the [Event Loop](/concepts/event-loop). Read those first if needed.
</Warning>

<!-- In Body Content (natural context) -->
When the callback finishes, it's added to the task queue — managed by 
the [event loop](/concepts/event-loop).

<!-- In Related Concepts Section -->
<CardGroup cols={2}>
  <Card title="Promises" icon="handshake" href="/concepts/promises">
    async/await is built on top of Promises
  </Card>
</CardGroup>
```

---

### Technical SEO Checklist (3 points)

| # | Check | Points | How to Verify |
|---|-------|--------|---------------|
| 1 | Single H1 per page | 1 | Only one `#` heading (the title) |
| 2 | URL slug contains keyword | 1 | `/concepts/closures` not `/concepts/topic-1` |
| 3 | No orphan pages | 1 | Page is linked from at least one other page |

**H1 Rule:**

Every page should have exactly ONE H1 (your main title). This is critical for SEO:
- The H1 tells Google what the page is about
- Multiple H1s confuse search engines about page hierarchy
- All other headings should be H2 (`##`) and below
- The H1 should contain your primary keyword

```markdown
# Closures in JavaScript     ← This is your H1 (only one!)

## What is a Closure?        ← H2 for sections
### Lexical Scope            ← H3 for subsections
## How Closures Work         ← Another H2
```

**URL/Slug Best Practices:**

| ✅ Good | ❌ Bad |
|---------|--------|
| `/concepts/closures` | `/concepts/c1` |
| `/concepts/event-loop` | `/concepts/topic-7` |
| `/concepts/type-coercion` | `/concepts/abc123` |
| `/concepts/async-await` | `/concepts/async_await` |

Rules for slugs:
- **Include primary keyword** — The concept name should be in the URL
- **Use hyphens, not underscores** — `event-loop` not `event_loop`
- **Keep slugs short and readable** — Under 50 characters
- **No UUIDs, database IDs, or random strings**
- **Lowercase only** — `/concepts/Event-Loop` should be `/concepts/event-loop`

**Orphan Page Detection:**

An orphan page has no internal links pointing to it from other pages. This hurts SEO because:
- Google may not discover or crawl it frequently
- It signals the page isn't important to your site structure
- Users can't navigate to it naturally
- Link equity doesn't flow to the page

**How to check for orphan pages:**
1. Search the codebase for links to this concept: `grep -r "/concepts/[slug]" docs/`
2. Verify it appears in at least one other concept's "Related Concepts" section
3. Check that pages listing it as a prerequisite link back appropriately
4. Ensure it's included in the navigation (`docs.json`)

**Fixing orphan pages:**
- Add the concept to related pages' "Related Concepts" CardGroup
- Link to it naturally in body content of related concepts
- Ensure bidirectional linking (if A links to B, B should link back to A where relevant)

---

## Scoring System

### Total Points Available: 30

| 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 | Percentage | Status | Action |
|-------|------------|--------|--------|
| 27-30 | 90-100% | ✅ 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 |

---

## Common SEO Issues and Fixes

### Title Tag Issues

| Issue | Current | Fix |
|-------|---------|-----|
| Too short (<50 chars) | "Closures" (8) | "Closures: How Functions Remember Their Scope in JavaScript" (58) |
| Too long (>60 chars) | "Understanding JavaScript Closures and How They Work with Examples" (66) | "Closures: How Functions Remember Their Scope in JavaScript" (58) |
| Missing keyword | "Understanding Scope" | Add concept name: "Closures: Understanding Scope in JavaScript" |
| No hook | "JavaScript Closures" | Add benefit: "Closures: How Functions Remember Their Scope in JavaScript" |
| Missing "JavaScript" | "Closures Explained" | Add at end: "Closures Explained in JavaScript" |

### Meta Description Issues

| Issue | Current | Fix |
|-------|---------|-----|
| Too short (<120 chars) | "Learn about closures" (20) | Expand with specifics to 150-160 chars |
| Too long (>160 chars) | [Gets truncated] | Edit ruthlessly, keep key information |
| Starts with "Master" | "Master JavaScript closures..." | "Learn JavaScript closures..." |
| No keyword | "Functions that remember" | Include "closures" and "JavaScript" |
| Too vague | "A guide to closures" | List specific topics: "Covers X, Y, and Z" |

### Content Structure Issues

| Issue | Fix |
|-------|-----|
| No question hook | Start with "How does...?" or "Why...?" |
| Code example too late | Move simple example to first 200 words |
| Missing Info box | Add `<Info>` with "What you'll learn" |
| Long paragraphs | Break into 2-4 sentence chunks |
| Under 1,500 words | Add more depth, examples, edge cases |
| No bolded terms | Bold key concepts on first mention |

### Featured Snippet Issues

| Issue | Fix |
|-------|-----|
| No "What is" definition | Add 40-60 word definition paragraph |
| Definition too long | Tighten to 40-60 words |
| No question H2s | Add "What is X?" or "How does X work?" H2 |
| Steps not numbered | Use `<Steps>` or numbered markdown |
| No comparison tables | Add table for "X vs Y" sections |

### Internal Linking Issues

| Issue | Fix |
|-------|-----|
| No internal links | Add 3-5 links to related concepts |
| Bad anchor text | Replace "click here" with descriptive text |
| No prerequisites | Add `<Warning>` with prerequisite links |
| Empty Related Concepts | Add 4 Cards linking to related topics |

### Technical SEO Issues

| Issue | Fix |
|-------|-----|
| Multiple H1 tags | Keep only one `#` heading (the title), use `##` for all sections |
| Slug missing keyword | Rename file to include concept name (e.g., `closures.mdx`) |
| Orphan page | Add links from related concept pages' body or Related Concepts section |
| Underscore in slug | Use hyphens: `event-loop.mdx` not `event_loop.mdx` |
| Uppercase in slug | Use lowercase only: `async-await.mdx` not `Async-Await.mdx` |
| Slug too long | Shorten to primary keyword: `closures.mdx` not `understanding-javascript-closures-and-scope.mdx` |

---

## SEO Audit Report Template

Use this template to document your findings.

```markdown
# SEO Audit Report: [Concept Name]

**File:** `/docs/concepts/[slug].mdx`
**Date:** YYYY-MM-DD
**Auditor:** [Name/Claude]
**Overall Score:** XX/30 (XX%)
**Status:** ✅ Excellent | ⚠️ Needs Work | ❌ Poor

---

## Score Summary

| Category | Score | Status |
|----------|-------|--------|
| Title Tag | X/4 | ✅/⚠️/❌ |
| Meta Description | X/4 | ✅/⚠️/❌ |
| Keyword Placement | X/5 | ✅/⚠️/❌ |
| Content Structure | X/6 | ✅/⚠️/❌ |
| Featured Snippets | X/4 | ✅/⚠️/❌ |
| Internal Linking | X/4 | ✅/⚠️/❌ |
| Technical SEO | X/3 | ✅/⚠️/❌ |
| **Total** | **X/30** | **STATUS** |

---

## Target Keywords

**Primary Keyword:** [e.g., "JavaScript closures"]
**Secondary Keywords:**
- [keyword 1]
- [keyword 2]
- [keyword 3]

**Search Intent:** Informational / How-to / Comparison

---

## Title Tag Analysis

**Current Title:** "[current title from frontmatter]"
**Character Count:** XX characters
**Score:** X/4

| Check | Status | Notes |
|-------|--------|-------|
| Length 50-60 chars | ✅/❌ | XX characters |
| Primary keyword in first half | ✅/❌ | [notes] |
| Ends with "in JavaScript" | ✅/❌ | [notes] |
| Contains compelling hook | ✅/❌ | [notes] |

**Issues Found:** [if any]

**Recommended Title:** "[suggested title]" (XX chars)

---

## Meta Description Analysis

**Current Description:** "[current description from frontmatter]"
**Character Count:** XX characters
**Score:** X/4

| Check | Status | Notes |
|-------|--------|-------|
| Length 150-160 chars | ✅/❌ | XX characters |
| Starts with action word | ✅/❌ | Starts with "[word]" |
| Contains primary keyword | ✅/❌ | [notes] |
| Promises specific value | ✅/❌ | [notes] |

**Issues Found:** [if any]

**Recommended Description:** "[suggested description]" (XX chars)

---

## Keyword Placement Analysis

**Score:** X/5

| Location | Present | Notes |
|----------|---------|-------|
| Title | ✅/❌ | [notes] |
| Meta description | ✅/❌ | [notes] |
| First 100 words | ✅/❌ | Found at word XX |
| H2 heading | ✅/❌ | Found in: "[H2 text]" |
| Natural reading | ✅/❌ | [no stuffing / stuffing detected] |

**Missing Keyword Placements:**
- [ ] [Location where keyword should be added]

---

## Content Structure Analysis

**Word Count:** X,XXX words
**Score:** X/6

| Check | Status | Notes |
|-------|--------|-------|
| Question hook opening | ✅/❌ | [notes] |
| Code in first 200 words | ✅/❌ | Code appears at word XX |
| "What you'll learn" box | ✅/❌ | [present/missing] |
| Short paragraphs | ✅/❌ | [notes on paragraph length] |
| 1,500+ words | ✅/❌ | X,XXX words |
| Bolded key terms | ✅/❌ | [notes] |

**Structure Issues:**
- [ ] [Issue and recommendation]

---

## Featured Snippet Analysis

**Score:** X/4

| Check | Status | Notes |
|-------|--------|-------|
| 40-60...

© leonardomso · MIT · leonardomso/33-js-concepts

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor