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.
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:
<Warning>
**Prerequisite:** This guide assumes you understand [Promises](/concepts/promises)
and the [Event Loop](/concepts/event-loop). Read those first if needed.
</Warning>
When the callback finishes, it's added to the task queue โ managed by
the [event loop](/concepts/event-loop).
<CardGroup cols={2}>
<Card title="Promises" icon="handshake" href="/concepts/promises">
async/await is built on top of Promises