From claude-blog
Creates multilingual blog posts from a topic: writes original, translates and culturally localizes to specified languages, generates hreflang tags, sitemap entries, and CMS language map. For international content pipelines.
npx claudepluginhub agricidaniel/claude-blog --plugin claude-blogThis skill uses the workspace's default tool permissions.
The flagship multilingual orchestrator. Combines blog writing, translation,
Translates existing blog posts into target languages with SEO-optimized localization. Preserves markdown structure, frontmatter, schema JSON-LD, embeds; localizes keywords, meta tags, numbers, dates, currencies. Flags artifacts for review.
Generates new Traditional Chinese blog articles from a topic: confirms details, selects templates, approves outlines, researches stats/images/YouTube with anti-hallucination, humanizes writing, delivers with stats. Triggers on 'write blog' or '寫文章'.
Writes or edits structured blog posts (800-1200 words) with sections, referencing published posts and guidelines to avoid repetition and match voice.
Share bugs, ideas, or general feedback.
The flagship multilingual orchestrator. Combines blog writing, translation, cultural adaptation, and full international SEO into a single command. Produces publication-ready blog posts in every target language with hreflang tags, localized JSON-LD schema, and CMS-integration metadata.
Adapted from
claude-blog-multilingualby Chris Mueller (AI Marketing Hub Pro Hub Challenge submission, March 2026, scored 85/100 Proficient). Original: https://github.com/Chriss54/multilingual-int This port removes the originalcurl | bashinstaller and credential handling flagged in the audit, integrates as core skills, and uses the shared cultural-adaptation reference underblog-translate/references/.
Invoked internally by this orchestrator:
| Component | Source | Required |
|---|---|---|
blog-write | claude-blog (this plugin) | Yes |
blog-translate | claude-blog (this plugin) | Yes |
blog-localize | claude-blog (this plugin) | Yes (when --localize is on, default) |
seo-hreflang | claude-seo (sibling plugin) | No, falls back to a self-contained generator |
If seo-hreflang is not installed, the orchestrator emits hreflang tags using
its own minimal generator (Phase 5 below) and notes the limitation in the
delivery summary. Hreflang validation in that case is structural only, not the
deeper validation seo-hreflang provides.
/blog multilingual <topic> --languages <lang1,lang2,...> [--source <lang>] [--no-localize] [--format <md|mdx|html>]
| Argument | Required | Default | Description |
|---|---|---|---|
<topic> | Yes | , | Blog topic or working title |
--languages | Yes | , | Comma-separated ISO 639-1 codes (e.g. de,fr,es,ja,pt-BR) |
--source | No | en | Source language to write the original in |
--no-localize | No | off | Skip cultural adaptation (translation only) |
--format | No | auto | Output format: md, mdx, or html |
If --languages is missing, ask the user once before running anything:
"Which languages should the blog be published in? Provide ISO 639-1 codes
separated by commas (e.g., de,fr,es,ja,pt-BR). The post will be written in
<source> first, then translated."
pt-BR, es-MX, zh-TW are also accepted).--format.--source, drop it
from the translation list with a notice.multilingual/
{source-lang}/
{lang-1}/
{lang-2}/
...
Output MUST stay inside the project root. Never write outside the cwd.Progress: Phase 1: Configuration complete, [N] languages selected ([codes])
Invoke the blog-write sub-skill (route through /blog write so all
existing rules apply: template auto-selection, sourced statistics, citation
capsules, FAQ schema, internal-link zones, charts, image embedding). Pass the
topic and any blog-write parameters surfaced by the user.
Save the original to multilingual/{source-lang}/{slug}.{ext}.
Progress: Phase 2: Original written, multilingual/{source-lang}/{slug}.{ext}
For each target language, invoke blog-translate:
Save translations to multilingual/{lang}/{localized-slug}.{ext}.
Progress: Phase 3: Translating to [lang] ([X]/[N]) per language, then
Phase 3: All translations complete.
If --no-localize is NOT set, invoke blog-localize for every translated
post:
Update files in place. The localizer swaps brand examples, adapts CTAs,
substitutes legal references, and adjusts formality. See
../blog-localize/SKILL.md for the full adaptation pass.
Progress: Phase 4: Cultural adaptation complete for [N] languages.
Generate three artifacts plus localized schema. If the seo-hreflang skill
from claude-seo is installed, delegate validation to it. Otherwise use the
self-contained generator below.
Copy-paste ready tags for <head>:
<!-- Hreflang tags. Paste into <head> of each language version. -->
<link rel="alternate" hreflang="{source}" href="{source-url}" />
<link rel="alternate" hreflang="{lang-1}" href="{lang-1-url}" />
<link rel="alternate" hreflang="{lang-2}" href="{lang-2-url}" />
<link rel="alternate" hreflang="x-default" href="{source-url}" />
Rules (mirrored from seo-hreflang):
x-default points to the source-language version.Save to multilingual/hreflang-tags.html.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>{source-url}</loc>
<xhtml:link rel="alternate" hreflang="{source}" href="{source-url}" />
<xhtml:link rel="alternate" hreflang="{lang-1}" href="{lang-1-url}" />
<xhtml:link rel="alternate" hreflang="x-default" href="{source-url}" />
</url>
<!-- Repeat one <url> block per language version -->
</urlset>
Save to multilingual/hreflang-sitemap.xml.
Machine-readable mapping for CMS integration:
{
"sourceSlug": "how-to-avoid-ai-slop",
"sourceLanguage": "en",
"generatedDate": "YYYY-MM-DD",
"versions": [
{
"lang": "en",
"slug": "how-to-avoid-ai-slop",
"file": "en/how-to-avoid-ai-slop.md",
"title": "How to Avoid AI Slop in 2026",
"description": "..."
},
{
"lang": "de",
"slug": "wie-man-ki-slop-vermeidet",
"file": "de/wie-man-ki-slop-vermeidet.md",
"title": "KI-Slop vermeiden in 2026",
"description": "..."
}
],
"hreflang": {
"method": "html",
"x-default": "en"
}
}
Save to multilingual/hreflang-map.json.
If the user asks, or if a frontmatter schema: true flag is present, attach
or update JSON-LD on every language version with inLanguage and
translationOfWork fields:
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "[Localized title]",
"description": "[Localized description]",
"inLanguage": "[lang-code]",
"isPartOf": { "@type": "Blog", "inLanguage": "[lang-code]" },
"translationOfWork": {
"@type": "BlogPosting",
"inLanguage": "[source-lang]",
"url": "[source-url]"
}
}
Use the existing /blog schema sub-skill if richer schema (FAQ, Person,
Breadcrumb) is wanted on each version.
## Multilingual blog complete: [Title]
### Original
- Language: [source]
- File: multilingual/{source}/{slug}.{ext}
### Translations
| Language | File | Localized | Keywords adapted |
|----------|------|-----------|------------------|
| de | multilingual/de/{slug}.md | yes | [N] |
| fr | multilingual/fr/{slug}.md | yes | [N] |
| es | multilingual/es/{slug}.md | yes | [N] |
### International SEO assets
- multilingual/hreflang-tags.html
- multilingual/hreflang-sitemap.xml
- multilingual/hreflang-map.json
- Localized schema embedded per version (if requested)
### Total
- [N] posts in [N] languages
- [N] SEO assets generated
### Next steps
- Replace `{url}` placeholders in hreflang tags with your real URLs.
- Merge `hreflang-sitemap.xml` into your existing sitemap.
- Run `/blog locale-audit multilingual/` to verify completeness.
- Resolve `[INTERNAL-LINK]` placeholders with locale-specific URLs.
- If claude-seo is installed, run `/seo hreflang multilingual/` for
deeper validation.
| When | Run |
|---|---|
| To regenerate or reword the source | /blog write <topic> |
| To translate one existing file only | /blog translate <file> --to <codes> |
| To deepen cultural fit on one file | /blog localize <file> --locale <code> |
| To audit a multilingual directory | /blog locale-audit <directory> |
| For deeper hreflang validation | /seo hreflang <directory> (claude-seo, optional) |
| Scenario | Action |
|---|---|
blog-write missing | Error: "This skill requires blog-write. Reinstall claude-blog." |
| One translation fails | Complete the rest, report partial results, suggest a retry command |
| Source language equals a target | Skip that target, log a notice |
| More than 10 target languages | Warn about wall-clock time, proceed if confirmed |
seo-hreflang not installed | Use the self-contained generator, note it in the summary |
| Command | Purpose |
|---|---|
/blog multilingual <topic> --languages de,fr,es | Write source, translate, localize, emit hreflang assets |
/blog translate <file> --to de,fr,es | Translate one file into target languages |
/blog localize <file> --locale de-DE | Cultural deep-adaptation of one translated file |
/blog locale-audit <directory> | Multilingual QA across a directory |