skills/seo-optimizer/SKILL.md
Blog post SEO: keywords, titles, meta descriptions, internal linking.
npx skillsauth add notque/claude-code-toolkit seo-optimizerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill operates as an SEO analysis and optimization workflow for blog posts. It implements a 4-phase ASSESS-DECIDE-APPLY-VERIFY cycle that balances search visibility improvements with content quality and authentic author voice.
Key Principles:
Goal: Build a complete picture of the post's current search optimization.
Step 1: Read and parse the post
Read the target post file. Extract:
Step 2: Identify primary keyword
Determine the primary keyword/phrase by:
Document the result:
Primary keyword: "hugo debugging"
Secondary keywords: "template errors", "build failures", "hugo troubleshooting"
Step 3: Analyze keyword placement
Check keyword presence in each priority location:
| Location | Weight | Check | |----------|--------|-------| | Title | Critical | Exact match or close variation, front-loaded preferred | | First paragraph | High | Within first 100 words | | H2 headers | Medium | Present in 2-3 of main section headers | | Body text | Medium | Natural usage throughout | | URL slug | Medium | Keyword in filename |
Calculate keyword density with this formula:
Density = (keyword occurrences / total words) * 100
Target: 1-2% | Warning: > 2.5% | Critical: > 3%
Constraint: Never recommend keyword density above 2.5%. Over-optimization hurts readability and search rankings (search engines penalize stuffing). Aim for 1-2% density with natural placement in title, first paragraph, and occasional headers.
Step 4: Evaluate title
| Criteria | Target | |----------|--------| | Length | 50-60 characters | | Keyword position | Front-loaded (first half) | | Specificity | Specific problem/outcome over vague topic | | Click potential | Conveys clear value to searcher |
Constraint: Never suggest clickbait titles that misrepresent content (e.g., "You Won't BELIEVE These Hugo Debugging Secrets!"). Violates technical, authentic tone and misleads readers. Suggest specific, descriptive titles that accurately convey content value.
Step 5: Check meta description
If description exists: verify 150-160 characters, contains primary keyword, accurately reflects content, compels click.
If missing: flag for generation in Phase 3.
Constraint: Meta descriptions must accurately reflect content. No clickbait. Description is the SERP sales pitch—always analyze and optimize. Vague descriptions do not differentiate content or compel clicks. Include specific outcomes, techniques, or problems addressed. Reference the primary keyword naturally.
Step 6: Audit header structure
Verify: exactly one H1 (the title), 3-7 H2s for main sections, H3s for subsections, no skipped levels (no H1 to H3 without H2).
Step 7: Scan for internal linking opportunities
List all related posts. For each candidate:
Gate: Complete analysis with data for every check. Do not proceed to Phase 2 without keyword density calculated and all locations assessed.
Goal: Rank findings by impact and effort, select actionable improvements.
Step 1: Score each issue
| Issue | Impact | Effort | |-------|--------|--------| | Missing meta description | High | Low | | Title too short/long or missing keyword | High | Low | | No keyword in first paragraph | Medium | Low | | Missing internal links | Medium | Low | | Header structure problems | Medium | Medium | | Low keyword density | Low | Medium |
Step 2: Prioritize high-impact, low-effort first
Constraint: Drop any suggestion where the existing content is already good. Do not force changes for the sake of completeness. If existing structure is logical and readable, forcing keywords into every header damages content quality for marginal SEO gain. Only suggest header changes where keywords fit naturally AND improve clarity.
Gate: Prioritized list of changes with rationale for each. Skip items that would not materially improve search visibility.
Goal: Show the user exactly what will change, get confirmation, apply.
Step 1: Generate output report
===============================================================
SEO ANALYSIS: {file_path}
===============================================================
CURRENT STATE:
Title: "{current_title}" ({char_count} chars)
{assessment}
Description: "{current_description}" or "(missing)"
{assessment}
Primary Keyword: "{keyword}"
- In title: yes/no
- In H2s: {count} of {total}
- In first paragraph: yes/no
- Density: {percentage}%
Headers: H2({count}), H3({count})
{assessment}
Internal Links: {count}
{assessment}
===============================================================
SUGGESTIONS:
Title (pick one):
1. "{alternative_1}" ({chars} chars) — [pattern used]
2. "{alternative_2}" ({chars} chars) — [pattern used]
3. "{alternative_3}" ({chars} chars) — [pattern used]
Description:
"{generated_description}" ({chars} chars)
Internal Links:
- Link "{anchor_text}" -> {target_post}
Keyword Improvements:
- {specific_suggestion}
===============================================================
Apply changes? [preview / apply / skip]
===============================================================
Step 2: Handle user response
Constraint: Always show current vs suggested changes before applying modifications. Confirmation required before modifying any file.
Step 3: Apply confirmed changes
Only modify:
title in front matter (if user selected an alternative)description in front matter (add or update)summary in front matter (sync with description for Hugo/PaperMod)Gate: All applied changes shown to user. No changes made without explicit confirmation.
Goal: Ensure changes did not break the post or introduce problems.
Step 1: Show the diff of all modified files
Step 2: Verify front matter is valid YAML (no unclosed quotes, no broken structure)
Step 3: Check that keyword density did not exceed 2.5% after changes
Constraint: SEO is one factor among many. Never let search optimization override content quality or readability. If changes reduce natural language flow, revert them.
Step 4: If Hugo is available, run a build to confirm no breakage:
hugo --quiet
Step 5: If build fails, revert changes immediately:
git checkout {file_path}
Gate: Post builds successfully with all changes applied. Keyword density within target range. All verification steps pass.
Cause: Specified post path does not exist or was misspelled Solution:
Cause: Applied changes broke front matter YAML or content structure Solution:
git checkout {file_path}Cause: Post is already over-optimized or changes would push density above 2.5% Solution:
${CLAUDE_SKILL_DIR}/references/seo-guidelines.md: Length requirements, density targets, and best practices${CLAUDE_SKILL_DIR}/references/keyword-placement.md: Priority locations and placement techniques${CLAUDE_SKILL_DIR}/references/title-patterns.md: Effective title structures for technical blogsdocumentation
Document translation: quick/normal/refined modes with chunked parallel subagents and glossary support.
development
AI image generation: Gemini and Nano Banana backends; single/series/batch workflows with prompt-to-disk.
testing
Unified voice content generation pipeline with mandatory validation and joy-check. 13-phase pipeline: LOAD, GROUND, STATS-CHECKPOINT, GENERATE, HOOK-GATE, VALIDATE, REFINE, VARIETY-GATE, JOY-CHECK, ANTI-AI, CLOSE-GATE, OUTPUT, CLEANUP. Use when writing articles, blog posts, or any content that uses a voice profile. Use for "write article", "blog post", "write in voice", "generate content", "draft article", "write about".
documentation
Critique-and-rewrite loop for voice fidelity validation.