S

seo-review

Perform a focused SEO audit on JavaScript concept pages to maximize search visibility, featured snippet optimization, and ranking potential

SKILL.md


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):


    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:


    <!-- In Prerequisites (Warning box) -->

    <Warning>

    Prerequisite: This guide assumes you understand Promises

    and the 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


    <!-- 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

  • 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 underscoresevent-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.


    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 word definition | ✅/❌ | Currently XX words |

    | Question-format H2 | ✅/❌ | Found: "[H2]" / Not found |

    | Numbered steps | ✅/❌ | [notes] |

    | Comparison tables | ✅/❌/N/A | [notes] |


    Snippet Opportunities:


    1. "What is [concept]" snippet:

    - Current definition: XX words

    - Action: [Expand to/Trim to] 40-60 words


    2. "How to [action]" snippet:

    - Action: [Add Steps component / Already present]


    ---


    Internal Linking Analysis


    Score: X/4


    | Check | Status | Notes |

    |-------|--------|-------|

    | 3-5 internal links in body | ✅/❌ | Found X links |

    | Descriptive anchor text | ✅/❌ | [notes] |

    | Prerequisites in Warning | ✅/❌ | [present/missing] |

    | Related Concepts section | ✅/❌ | X cards present |


    Current Internal Links:

    1. [Anchor text] → /concepts/[slug]

    2. [Anchor text] → /concepts/[slug]


    Recommended Links to Add:

  • Link to [concept] in [section/context]
  • Link to [concept] in [section/context]

  • Bad Anchor Text Found:

  • Line XX: "click here" → change to "[descriptive text]"

  • ---


    Technical SEO Analysis


    Score: X/3


    | Check | Status | Notes |

    |-------|--------|-------|

    | Single H1 per page | ✅/❌ | [Found X H1 tags] |

    | URL slug contains keyword | ✅/❌ | Current: /concepts/[slug] |

    | Not an orphan page | ✅/❌ | Linked from X other pages |


    H1 Tags Found:

  • Line XX: # [H1 text] ← Should be the only one
  • [List any additional H1s that need to be changed to H2]

  • Slug Analysis:

  • Current slug: [slug].mdx
  • Contains keyword: ✅/❌
  • Format correct: ✅/❌ (lowercase, hyphens, no special chars)

  • Incoming Links Found:

    1. /concepts/[other-concept] → Links to this page in [section]

    2. /concepts/[other-concept] → Links in Related Concepts


    If orphan page, add links from:

  • [Suggested concept page] in [section]
  • [Suggested concept page] in Related Concepts

  • ---


    Priority Fixes


    High Priority (Do First)


    1. [Issue]

    - Current: [what it is now]

    - Recommended: [what it should be]

    - Impact: [why this matters]


    2. [Issue]

    - Current: [what it is now]

    - Recommended: [what it should be]

    - Impact: [why this matters]


    Medium Priority


    1. [Issue]

    - Recommendation: [fix]


    Low Priority (Nice to Have)


    1. [Issue]

    - Recommendation: [fix]


    ---


    Competitive Analysis (Optional)


    Top-Ranking Pages for "[primary keyword]":


    1. [Competitor 1 - URL]

    - What they do well: [observation]

    - Word count: ~X,XXX


    2. [Competitor 2 - URL]

    - What they do well: [observation]

    - Word count: ~X,XXX


    Our Advantages:

  • [What we do better]

  • Gaps to Fill:

  • [What we're missing that competitors have]

  • ---


    Implementation Checklist


    After making fixes, verify:


  • [ ] Title is 50-60 characters with keyword and hook
  • [ ] Description is 150-160 characters with action word and value
  • [ ] Primary keyword in title, description, first 100 words, and H2
  • [ ] Opens with question hook
  • [ ] Code example in first 200 words
  • [ ] "What you'll learn" Info box present
  • [ ] Paragraphs are 2-4 sentences
  • [ ] 1,500+ words total
  • [ ] Key terms bolded on first mention
  • [ ] 40-60 word definition for featured snippet
  • [ ] At least one question-format H2
  • [ ] 3-5 internal links with descriptive anchor text
  • [ ] Prerequisites in Warning box (if applicable)
  • [ ] Related Concepts section has 4 cards
  • [ ] Single H1 per page (title only)
  • [ ] URL slug contains primary keyword
  • [ ] Page linked from at least one other concept page
  • [ ] All fixes implemented and verified

  • ---


    Final Recommendation


    Ready to Publish: ✅ Yes / ❌ No - [reason]


    Next Review Date: [When to re-audit, e.g., "3 months" or "after major update"]


    ---


    Quick Reference


    Character Counts


    | Element | Ideal Length |

    |---------|--------------|

    | Title | 50-60 characters |

    | Meta Description | 150-160 characters |

    | Definition paragraph | 40-60 words |


    Keyword Density


  • Don't exceed 3-4 mentions of exact phrase per 1,000 words
  • Use variations naturally (e.g., "closures", "closure", "JavaScript closures")

  • Content Length


    | 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 |


    ---


    Summary


    When auditing a concept page for SEO:


    1. Identify target keywords using the keyword cluster for that concept

    2. Check title tag — 50-60 chars, keyword first, hook, ends with "JavaScript"

    3. Check meta description — 150-160 chars, action word, keyword, specific value

    4. Verify keyword placement — Title, description, first 100 words, H2

    5. Audit content structure — Question hook, early code, Info box, short paragraphs

    6. Optimize for featured snippets — 40-60 word definitions, numbered steps, tables

    7. Check internal linking — 3-5 links, good anchors, Related Concepts section

    8. Generate report — Document score, issues, and prioritized fixes


    Remember: SEO isn't about gaming search engines — it's about making content easy to find for developers who need it. Every optimization should also improve the reader experience.