borghei/content-creator
> Create SEO-optimized marketing content with consistent brand voice, using a brand voice analyzer, SEO optimizer, and content frameworks. Use when writing blog posts, creating social content, or analyzing brand voice.
npx skills add https://github.com/borghei/Claude-Skills --skill content-creator
Professional-grade brand voice analysis, SEO optimization, and platform-specific content frameworks.
content creation, blog posts, SEO, brand voice, social media, content calendar, marketing content, content strategy, content marketing, brand consistency, content optimization, social media marketing, content planning, blog writing, content frameworks, brand guidelines, social media strategy
Before creating the content, confirm these inputs. If any is unknown or vague, ASK — do not assume:
Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the artifact.
scripts/brand_voice_analyzer.py on existing content to establish baselinereferences/brand_guidelines.md to select voice attributesreferences/content_frameworks.mdscripts/seo_optimizer.py [file] [primary-keyword] to optimizereferences/social_media_optimization.mdreferences/content_frameworks.mdassets/content_calendar_template.mdFor new brands or clients:
Step 1: Analyze Existing Content (if available)
python scripts/brand_voice_analyzer.py existing_content.txt
Step 2: Define Voice Attributes
references/brand_guidelines.mdStep 3: Create Voice Sample
Step 1: Keyword Research
Step 2: Content Structure
references/content_frameworks.mdStep 3: Optimization Check
python scripts/seo_optimizer.py blog_post.md "primary keyword" "secondary,keywords,list"
Step 4: Apply SEO Recommendations
Step 1: Platform Selection
references/social_media_optimization.mdStep 2: Content Adaptation
references/content_frameworks.mdStep 3: Optimization Checklist
Step 1: Monthly Planning
assets/content_calendar_template.mdStep 2: Weekly Distribution
Step 3: Batch Creation
Analyzes text content for voice characteristics, readability, and consistency.
Usage:
# Human-readable output
python scripts/brand_voice_analyzer.py content.txt
# JSON output for integrations
python scripts/brand_voice_analyzer.py content.txt json
Parameters:
| Parameter | Required | Description |
|-----------|----------|-------------|
| file | Yes | Path to content file |
| format | No | Output format: text (default) or json |
Output:
Analyzes content for SEO optimization and provides actionable recommendations.
Usage:
# Basic analysis
python scripts/seo_optimizer.py article.md "main keyword"
# With secondary keywords
python scripts/seo_optimizer.py article.md "main keyword" "secondary,keywords,list"
# JSON output
python scripts/seo_optimizer.py article.md "keyword" --json
Parameters:
| Parameter | Required | Description |
|-----------|----------|-------------|
| file | Yes | Path to content file (md or html) |
| primary_keyword | Yes | Main target keyword |
| secondary_keywords | No | Comma-separated secondary keywords |
| --json | No | Output in JSON format |
Output:
references/brand_guidelines.md
references/content_frameworks.md
references/social_media_optimization.md
references/analytics_guide.md
This skill works best with:
references/analytics_guide.md)| Problem | Likely Cause | Solution |
|---------|-------------|----------|
| SEO score is low despite keyword inclusion | Keywords present but not in strategic positions (title, H1, first paragraph, H2s) | Place primary keyword in the first paragraph, at least one H2, and the page title. Keyword density alone is no longer a ranking factor -- placement and natural integration matter more in 2026 |
| Brand voice analyzer shows inconsistent results across content | Multiple authors writing without shared voice guidelines | Establish a baseline by running brand_voice_analyzer.py on your best-performing content. Document the formality score, tone, and perspective as your target profile. Have all authors reference this baseline |
| Content ranks initially then drops | Thin content or lack of E-E-A-T signals | Google's December 2025 core update and helpful content system penalize shallow content. Add first-person experience, original data (3+ fresh statistics per 1,000 words), expert quotes, and case studies. Content must demonstrate Experience that AI cannot replicate |
| AI-generated content flagged or not ranking | Unedited AI output lacking human oversight, expertise, or originality | Google does not penalize AI-assisted content per se, but mass-produced AI content without human review, original perspective, or expertise signals will underperform. Always add personal experience, proprietary data, and fact-checked claims. Layer in E-E-A-T signals: author bylines with credentials, cited sources, real examples |
| SEO optimizer recommends increasing keyword density above 3% | Legacy recommendation conflicting with current best practice | Override any density target above 2%. A 2026 study of 1,500+ Google results found no correlation between keyword density and ranking. Pages in the top 10 have 50% lower keyword density than two years ago. Focus on topical coverage and semantic relevance instead |
| Content not winning featured snippets | Missing concise answer format near the top of the page | Provide a 2-3 sentence direct answer to the core question within the first 120-150 words. Use short paragraphs (2-4 sentences), bulleted lists, and clear H2/H3 subheadings. Featured snippets have 42.9% CTR -- the highest of any SERP feature |
| Social media content underperforming despite good blog content | Direct copy-paste without platform adaptation | Each platform requires format-specific adaptation. LinkedIn favors 1,300-character posts with carousel documents (21.77% median engagement rate). Instagram prioritizes visual-first carousel posts. TikTok requires short-form video. Use the repurposing matrix in references/content_frameworks.md |
brand_voice_analyzer.py. Variance of more than 15 points in formality score between pieces indicates inconsistencyIn Scope:
Out of Scope:
| Integration | Purpose | How to Connect |
|-------------|---------|----------------|
| Google Search Console | Monitor indexing, search queries, CTR, and position data | Use Search Console data to identify underperforming pages, then run seo_optimizer.py to diagnose and fix issues. Track position changes after optimization |
| Google Analytics 4 (GA4) | Content performance measurement, engagement metrics | Measure page views, time on page, bounce rate, and conversions per content piece. Feed insights back into content strategy decisions |
| SEO Tools (Ahrefs, SEMrush, Moz) | Keyword research, backlink data, competitive analysis | Export target keywords from SEO tools to use as input for seo_optimizer.py. Use competitive gap analysis to inform content topics |
| CMS Platforms (WordPress, Webflow, Ghost) | Content publishing and meta tag implementation | Apply meta tag suggestions from seo_optimizer.py directly to CMS fields. Implement heading structure recommendations in post editor |
| social-media-analyzer skill | Social content performance tracking | Analyze which content formats and topics perform best on social, then use findings to inform content creation priorities |
| campaign-analytics skill | Content ROI measurement | Track content-attributed conversions through campaign analytics. Identify which content pieces drive the most pipeline or revenue |
| app-store-optimization skill | App description writing | Apply SEO writing principles and brand voice consistency to app store descriptions using shared voice guidelines |
Type: CLI script (positional arguments, no argparse flags)
Usage:
python brand_voice_analyzer.py <file> [format]
| Argument | Position | Required | Default | Description |
|----------|----------|----------|---------|-------------|
| file | 1st | Yes | -- | Path to text content file to analyze |
| format | 2nd | No | text | Output format: text (human-readable) or json (machine-readable) |
Output Fields:
word_count -- Total words in contentreadability_score -- Flesch Reading Ease (0-100). Below 30 = difficult, 30-60 = moderate, 60-70 = standard, 70+ = easyvoice_profile -- Per-dimension analysis:formality -- Dominant: formal or casual (based on keyword matching)tone -- Dominant: professional or friendlyperspective -- Dominant: authoritative or conversationalsentence_analysis -- Average sentence length (words), variety (low/medium/high), total countrecommendations -- Actionable suggestions for readability, sentence variety, and voice consistencyType: CLI script (positional arguments with one optional flag)
Usage:
python seo_optimizer.py <file> [primary_keyword] [secondary_keywords] [--json]
| Argument | Position/Flag | Required | Default | Description |
|----------|--------------|----------|---------|-------------|
| file | 1st | Yes | -- | Path to content file (markdown or HTML) |
| primary_keyword | 2nd | No | None | Main target keyword for density and placement analysis |
| secondary_keywords | 3rd | No | None | Comma-separated secondary keywords (e.g., "seo,content,optimization") |
| --json | Flag | No | text output | Output raw JSON instead of human-readable format |
Output Fields:
optimization_score -- Overall SEO score (0-100). Scoring: content length (20 pts), keyword optimization (30 pts), structure (25 pts), readability (25 pts)content_length -- Word countkeyword_analysis:primary_keyword -- Count, density (0-1 scale), in_first_paragraph (bool), in_headings (bool)secondary_keywords -- Per-keyword count and densitylsi_keywords -- Top 10 semantically related terms extracted from contentstructure_analysis -- Heading counts (h1/h2/h3), paragraph count, average paragraph length, list count, internal/external link countsreadability -- Score (0-100), level (Easy/Moderate/Difficult/Very Difficult), average sentence lengthmeta_suggestions -- Generated title, meta description, URL slug, Open Graph tagsrecommendations -- Prioritized list of specific improvement actionsTake borghei/content-creator from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.