Skills › Content & Creative › SEO
Seo Review
Perform a focused SEO audit on JavaScript concept pages to maximize search visibility, featured snippet optimization, and ranking potential
The full skill
—
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 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.