Install
$ agentstack add skill-nurkamol-claude-skills-rankmath-seo-blog-generator ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
🧠 Universal SEO Blog Generator — RankMath Pro Edition
🎯 Objective
Generate premium, SEO-optimized HTML blog posts for any company or industry, achieving 90–100 RankMath Pro scores while maintaining a natural, authoritative, conversion-focused tone.
Output must be a fully structured HTML file, ready to publish in WordPress.
⚙️ Step 1: Learn the Business (MANDATORY)
Analyze the provided website URL or content and extract:
- Business name and primary services / products
- Target audience (homeowners, contractors, B2B, etc.)
- Brand tone (professional, friendly, authoritative)
- Service locations / cities
- Internal pages available for linking (services, contact, blog posts)
- Phone number for CTA
> If any of the above is missing → ask the user before proceeding.
❓ Step 2: Ask Before Generating
Before writing, confirm:
- Number of posts to generate
- Topic for each post — or ask to suggest based on business
- Location-based? (yes / no — affects local SEO rules)
- Primary goal per post:
- SEO traffic
- Lead generation
- Brand authority
- Output format — ask the user which format they need:
- HTML (default) — clean `` markup, ready for Classic editor, MCP publishing, or manual paste
- Gutenberg — native WordPress block markup using `` etc., paste directly into the Gutenberg editor block inserter or Code Editor view
> If the user plans to publish via pk_publish_post MCP, HTML is recommended — the plugin converts automatically. Only choose Gutenberg if the user will paste manually into the WordPress block editor.
🔑 Step 3: Focus Keyword Rules (CRITICAL — RankMath Pro)
The focus keyword is the exact phrase RankMath will test against. Every rule below must be satisfied for a 90+ score.
3.1 — Choose the Keyword Correctly
- Use an exact phrase that matches real search queries (e.g.
HERS rating Sacramento) - Do NOT paraphrase it in any of the required positions below
- Do NOT reuse the same focus keyword across multiple posts
3.2 — Keyword Placement Checklist (ALL required)
| Location | Rule | |---|---| | SEO Title | Exact phrase must appear in the first 50% of the title | | Meta Description | Exact phrase must appear in the first 120 characters | | URL / Slug | Exact phrase (hyphenated) in slug. Total slug ≤ 75 chars | | First 10% of content | Exact phrase in the opening paragraph (not first sentence — within first ~100 words) | | Body content | Exact phrase used 4–5 times naturally throughout (1–1.5% density) | | At least one H2 or H3 | Exact phrase or close variation in a subheading | | At least one image alt | Exact phrase in the alt attribute of the first or most prominent image |
3.3 — Keyword Density Formula
Target uses = (word count × 0.01) to (word count × 0.015)
Examples:
1,000 words → 10–15 uses ← aim for lower end to stay natural
1,200 words → 12–18 uses ← 4–5 exact phrase + semantic variations
> ⚠️ RankMath counts exact phrase AND semantic combinations. > Use the exact phrase 4–5 times. Fill the remaining density with > semantic keywords (e.g. for HERS rating Sacramento: "home energy > rating", "Sacramento energy test", "certified HERS rater", "Title 24").
📝 Step 4: SEO Title Rules
RankMath tests four things on the title — all must pass:
- Exact focus keyword in first 50% of title — place keyword at the START
- Power word — include one emotionally engaging word (e.g. Proven, Fast, Essential, Complete, Trusted, Powerful, Smart, Hidden, Real)
- Positive or negative sentiment — the title must evoke emotion
- Number — include a specific number (e.g. 7 Ways, 5 Signs, 3 Steps)
- Length: ≤ 60 characters total
Title Formula:
[Focus Keyword]: [Number] [Power Word] [Benefit/Outcome]
Examples:
✅ HERS Rating Sacramento: 7 Proven Ways to Cut Energy Costs (57 chars)
✅ Duct Testing Roseville: 5 Essential Facts Every Homeowner Needs (59 chars)
✅ Leaky Ducts Rio Linda: How to Stop Hidden Energy Waste Fast (58 chars)
❌ 7 Ways a HERS Rating Cuts Sacramento Energy Costs (keyword not at start)
❌ Title 24 Compliance in Sacramento: A Homeowner's Guide to HERS (too long, keyword buried)
📄 Step 5: Meta Description Rules
- Exact focus keyword in first 120 characters — place it naturally near the beginning
- Total length: 120–160 characters
- Conversion-focused — answer "what's in it for me?"
- Include a subtle CTA or benefit hook
Formula:
[Focus keyword] [benefit statement] — [differentiator or urgency hook].
Example:
✅ HERS rating Sacramento homeowners trust reveals hidden energy waste,
lowers cooling costs, and gives you a clear upgrade plan — same-day results.
(143 chars — keyword in chars 1–23 ✅)
❌ Sacramento energy bills keep climbing. Discover how a HERS rating identifies
hidden waste...
(keyword not in first 120 chars ❌)
🔗 Step 6: Linking Rules
Internal Links
- Minimum 2–3 internal links per post
- Link to: Services page, Contact page, relevant blog posts
- Use natural anchor text — never "click here" or bare URLs
- No
target="_blank"on any link
External Links (MANDATORY — RankMath Additional SEO test)
- Minimum 1 external dofollow link to an authoritative source
(e.g. California Energy Commission, Energy Star, RESNET, government sites)
- Do NOT add
rel="nofollow"orrel="noopener noreferrer"— this will fail
the RankMath "Linking to External Content with a Followed Link" test
- Place the external link naturally within the body, not in the CTA
> ⚠️ v1.0 BUG: Adding target="_blank" automatically adds rel="noopener noreferrer" > in many WordPress themes — which makes the link nofollow. Use plain `` only.
🖼️ Step 7: Image Rules
- Use 4 images minimum (RankMath scores: 1 image = partial, 4+ images = 100%)
- Source from: Pexels, Unsplash, or Pixabay (free commercial use)
- Use live image URLs — no placeholders
- Add
loading="lazy"to all images except the hero (first) image
Alt Text Rules (MANDATORY):
- IMG 1 (hero): Must contain the exact focus keyword
- IMG 2–4: Use descriptive, semantic alt text related to topic
- Keep alt text under 125 characters
HTML Format:
🧾 Step 8: Output Format
Format Choice (set in Step 2, question 5)
If HTML → use the `` structure below (default). If Gutenberg → replace every HTML tag with its native block equivalent (see Gutenberg Block Map below).
Metadata Comment Block (top of file):
Full HTML Structure:
[Title — contains focus keyword]
[Opening paragraph — exact focus keyword within first 100 words,
NOT as the very first word of the sentence]
In This Article
Section 1 Title
Section 2 Title
[Section — include focus keyword or variation here]
[Content — short paragraphs, max 120 words each]
Section 2
[Content]
Schedule / Contact
[Final paragraph — use focus keyword one last time]
Call or text us today at
(XXX) XXX-XXXX
to [action relevant to post topic].
Gutenberg Block Map (use when format = Gutenberg)
Wrap each element in its native block comment. Example:
[Title]
[Opening paragraph]
...
[Section heading]
[item]
Full tag → block mapping:
| HTML | Gutenberg block | |---|---| | ` | wp:heading {"level":1} | | | wp:heading {"level":2} | | – | wp:heading {"level":N} | | | wp:paragraph | | | wp:list | | | wp:list {"ordered":true} | | (standalone) | wp:image wrapped in | | | wp:quote | | | wp:code | | | wp:separator | | , | wp:html` |
> ⚠️ Do NOT use Gutenberg format when publishing via pk_publish_post — the MCP plugin handles HTML-to-blocks conversion automatically.
📋 SEO Summary Block (ALWAYS output this in chat after generating content)
After delivering the HTML or Gutenberg content, always output the following block as plain text in the chat — so the user can copy SEO fields directly into RankMath without opening the file:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 SEO SUMMARY — paste into RankMath
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Focus Keyword: [exact phrase]
Secondary Keywords: [kw1], [kw2], [kw3], [kw4]
SEO Title: [title ≤60 chars — keyword in first 50%]
Meta Description: [120–160 chars — exact keyword in first 120 chars]
Slug: [focus-keyword-hyphenated]
Categories: [Primary Category], [Location Category], General
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
This block is always shown — regardless of HTML or Gutenberg format, regardless of whether publishing via MCP or manually.
✍️ Step 9: Content Rules
Length
- Minimum: 1,000 words (RankMath 40% score at 1,000–1,500 words)
- Target: 1,500–2,000 words (RankMath 60% score)
- Best: 2,500+ words (RankMath 100% score on content length test)
- Balance: longer = better score, but content must remain valuable — no padding
Keyword Density (EXACT rules)
- Exact focus phrase: 4–5 times
- Semantic / secondary keywords: fill body naturally
- Combined density target: 1.0–1.5%
- Never exceed 2.5% — RankMath will flag keyword stuffing
Paragraph Rules (RankMath Content Readability test)
- Maximum 120 words per paragraph — RankMath flags longer paragraphs
- Aim for 3–5 sentences per paragraph
- Use bullet lists to break up dense information
Structure Requirements
- H1: Contains focus keyword (usually same as SEO title)
- H2 sections: 5–8 sections minimum
- H3 subsections: Use for numbered lists or sub-topics within H2s
- Table of Contents: Required — use `` with anchor links
- Focus keyword in at least one H2 or H3
Tone & Language
- Authoritative but accessible
- Industry-specific terminology (shows expertise to Google)
- Conversion-focused — address the reader's pain points directly
- No filler phrases ("In today's world...", "In conclusion...")
- No passive voice heavy sections
📍 Step 10: Local SEO Rules (when location-based)
- Use city/region name naturally throughout — 3–5 times in the body
- Include city in: H1 or first H2, at least one image alt, meta description
- Mention surrounding service areas in the CTA section
- Do NOT repeat the city name in every sentence — Google penalizes spammy local SEO
☎️ Step 11: CTA Rules
- Every post must end with a CTA section
- Use the real, extracted phone number
- Format:
(XXX) XXX-XXXX - CTA should be specific to the post topic (not generic "call us today")
- Include the business's service area in the CTA paragraph
Example:
Call or text us today at
(916) 289-1211
to schedule your same-day HERS duct test in Roseville.
✅ Step 12: Pre-Publish Self-Check
Before outputting the final HTML, verify every item:
Basic SEO
- [ ] Exact focus keyword in SEO title, in first 50% of title
- [ ] Exact focus keyword in meta description, within first 120 chars
- [ ] Exact focus keyword in slug
- [ ] Exact focus keyword within first 10% of content body
- [ ] Exact focus keyword in body 4–5 times (1–1.5% density)
- [ ] Exact focus keyword NOT used in another post (uniqueness)
Additional SEO
- [ ] Exact focus keyword in at least one H2 or H3
- [ ] Exact focus keyword in at least one image alt attribute
- [ ] Keyword density 1.0–1.5% (not below, not above 2.5%)
- [ ] Slug is ≤ 75 characters total
- [ ] At least 1 external dofollow link (NO rel="nofollow", NO rel="noopener noreferrer")
- [ ] At least 2–3 internal links with natural anchors
- [ ] No
target="_blank"on any link
Title Readability
- [ ] Focus keyword in first 50% of SEO title
- [ ] At least 1 power word in title
- [ ] Title has positive OR negative sentiment
- [ ] Title contains a number
- [ ] Title ≤ 60 characters
Content Readability
- [ ] Table of Contents present (`` with anchor links)
- [ ] No paragraph exceeds 120 words
- [ ] At least 4 images with live URLs
- [ ]
loading="eager"on hero image,loading="lazy"on all others - [ ] `` wrapper present
- [ ] Image Reference Block in metadata comment is complete and matches all `` tags in the HTML
CTA
- [ ] Real phone number in `` at end of post
- [ ] CTA is specific to post topic and location
🏆 RankMath Score Targets
| Section | Target | Key Requirements | |---|---|---| | Basic SEO | ✅ All green | Keyword in title (first 50%), meta desc (first 120 chars), URL, first 10% of content, body 4–5× | | Additional SEO | ✅ All green | Keyword in H2/H3, image alt, density 1–1.5%, external dofollow link, internal links | | Title Readability | ✅ All green | Keyword at start, power word, sentiment, number, ≤60 chars | | Content Readability | ✅ All green | ToC, short paragraphs, 4+ images | | Overall Score | 90–100 / 100 | All sections passing |
🚀 Step 13: Publishing via PixelKraft SEO Pro MCP
When publishing with pk_publish_post, note:
Native Gutenberg Blocks (automatic)
The plugin automatically converts the HTML output to native Gutenberg blocks before saving. You do NOT need to change the HTML structure — keep the ` wrapper and ` in place. The server strips them and maps each element:
| HTML tag | Gutenberg block | |---|---| | `, – | wp:heading | | | wp:paragraph | | | wp:list | | | wp:list (ordered) | | | wp:image | | | wp:quote | | | wp:code | | | wp:separator | | , , etc. | wp:html` |
Categories by Name
Pass category names as strings — no need to look up IDs first:
categories: ["HERS Compliance", "Roseville", "Title 24"]
New categories are created automatically if they don't exist.
Full pkpublishpost Call
pk_publish_post(
title: "[SEO Title from metadata block]",
content: "[full HTML article output]",
keyword: "[focus keyword]",
meta_title: "[SEO Title ≤60 chars]",
meta_desc: "[meta description 120–160 chars]",
slug: "[slug from metadata block]",
categories: ["[Primary Category]", "[Location Category]"],
status: "publish" ← or "draft" for review
)
📋 Quick Reference Card
TITLE: [Keyword]: [Number] [Power Word] [Benefit] — ≤60 chars, keyword first
META: [Exact keyword] in char 1–120, total 120–160 chars
SLUG: exact-keyword-hyphenated (≤75 chars total URL)
INTRO: Exact keyword within first 100 words, not first word of sentence
BODY: 4–5 exact uses + semantic variations = 1–1.5% density
H2/H3: At least 1 subheading contains exact keyword or close variation
IMG ALT: IMG 1 must contain exact keyword
LINKS: 2–3 internal (natural anchors) + 1 external dofollow (no rel attributes)
PARAGRAPHS: ≤120 words each
TOC: Required — with anchor links
IMAGES: 4 minimum, live URLs, loading="eager" on hero only
IMG REF: List ALL images (URL + alt) in metadata comment block for easy manual replacement
FORMAT: Ask user — HTML (default) or Gutenberg block markup
SEO SUMMARY: Always output keyword / secondary keywords / title / meta / slug / categories in chat after generating
CTA: Real tel: link, specific to post topic + location
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: nurkamol
- Source: nurkamol/claude-skills
- License: MIT
- Homepage: https://pixelkraft.net
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.