New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

One-command multilingual blog creation

Blog Multilingual, One-Command International Publishing

by AgriciDaniel · MIT license · ★ 2,219 on GitHub · updated Sep 18

Blog Multilingual, One-Command International Publishing cover

One-command multilingual blog creation. Writes a blog post, translates it into user-specified languages, applies cultural adaptation, and emits hreflang tags, sitemap entries, and a CMS-ready language map.

---
name: blog-multilingual
description: >
  One-command multilingual blog creation. Writes a blog post, translates it
  into user-specified languages, applies cultural adaptation, and emits
  hreflang tags, sitemap entries, and a CMS-ready language map. The complete
  write-to-publish pipeline for international content. Orchestrates blog-write,
  blog-translate, blog-localize, and (optionally) seo-hreflang.
  Use when user says "multilingual blog", "blog multilingual", "write in
  multiple languages", "international blog", "mehrsprachiger Blog", "blog
  multilingue", "blog multilingue", "create blog in German and French".
user-invokable: true
argument-hint: "<topic> --languages <comma-separated-codes>"
license: MIT
compatibility: Requires claude-blog (blog-write). Optional integration with claude-seo (seo-hreflang) for richer hreflang validation.
metadata:
  author: AgriciDaniel
  version: "2.2.0"

Overview

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.

Manual install (npx, ZIP)
Claude Codenpx skills add AgriciDaniel/claude-blog --skill blog-multilingual -g -a claude-code
Claude Code (manual)mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/AgriciDaniel/claude-blog/tar.gz/2500d4c76503 \ | tar -xz -C ~/.claude/skills --strip-components=2 claude-blog-2500d4c76503/skills/blog-multilingual
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/79b1616d106352b71ff6/blog-multilingual.zip" -OutFile "$env:TEMP\blog-multilingual.zip"; Expand-Archive "$env:TEMP\blog-multilingual.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md13.2 KB
Read the files here
AgriciDaniel/2500d4c1 file
SKILL.md
Show the full text343 lines

Blog Multilingual, One-Command International Publishing

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-multilingual by 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 original curl | bash installer and credential handling flagged in the audit, integrates as core skills, and uses the shared cultural-adaptation reference under blog-translate/references/.

Dependencies

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.

Command Syntax

/blog multilingual <topic> --languages <lang1,lang2,...> [--source <lang>] [--no-localize] [--format <md|mdx|html>]
Argument Required Default Description
<topic> Yes required Blog topic or working title
--languages Yes required Comma-separated Google-compatible hreflang tags (e.g. de,fr,es-MX,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 hreflang tags separated by commas (e.g., de,fr,es-MX,ja,pt-BR). The post will be written in <source> first, then translated."

Workflow

Phase 1: Configuration
  1. Parse arguments. Extract topic, target languages, source, format.
  2. Validate each language code with the shared multilingual locale rules used by blog-translate, blog-localize, and blog-locale-audit: ISO 639-1 language in lowercase, optional ISO 15924 script in title case, optional ISO 3166-1 Alpha-2 region in uppercase. Require a region or explicit neutral mode for ambiguous language-only targets such as es, pt, and zh.
  3. Detect output format from the project (frontmatter convention, file extensions, framework hints) or use --format.
  4. Resolve source language. If a target language equals --source, drop it from the translation list with a notice.
  5. Create the output directory inside the current working directory:
    multilingual/
      {source-lang}/
      {lang-1}/
      {lang-2}/
      ...
    
    Keep all output inside the project root; do not write outside the cwd.

Progress: Phase 1: Configuration complete, [N] languages selected ([codes])

Phase 2: Write Original Blog

Invoke the blog-write sub-skill (route through /blog write so all existing rules apply: template auto-selection, sourced statistics, citation capsules, Article schema priority, FAQPage only as an entity signal when visible FAQ content exists, 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}

Phase 3: Translate to All Target Languages

For each target language, invoke blog-translate:

  • Input: the original blog post produced in Phase 2.
  • Target: the specific language code.
  • Run targets in parallel where the runtime supports it (one Task per language) to reduce wall-clock time.

Save translations to multilingual/{lang}/{localized-slug}.{ext}.

Progress: Phase 3: Translating to [lang] ([X]/[N]) per language, then Phase 3: All translations complete.

Phase 4: Cultural Adaptation

If --no-localize is NOT set, invoke blog-localize for every translated post:

  • Input: the translated blog post.
  • Locale: the target language or region code.
  • Run in parallel.

Apply the localized output only after resolving the generated path inside multilingual/, rejecting symlinks, and creating a backup when overwriting. 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.

Phase 5: International SEO Generation

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.

5a. Hreflang Tags (HTML)

Copy-paste ready tags for <head>:

<!-- Hreflang tags. Paste into <head> of each language version. -->
<link rel="alternate" hreflang="{source}" href="https://example.com/{source-url}" />
<link rel="alternate" hreflang="{lang-1}" href="https://example.com/{lang-1-url}" />
<link rel="alternate" hreflang="{lang-2}" href="https://example.com/{lang-2-url}" />
<link rel="alternate" hreflang="x-default" href="https://example.com/{fallback-url}" />

Rules (mirrored from seo-hreflang):

  • Every page references all alternates including itself (self-referencing).
  • Every href, including x-default, is a fully qualified absolute https://... URL.
  • x-default points to the unmatched-language fallback, such as a global language selector or default market page. It does not have to be the source language version.
  • All URLs use the same protocol (HTTPS) and trailing-slash convention.
  • Bidirectional: every relationship is reciprocal.

Save to multilingual/hreflang-tags.html.

5b. Hreflang Sitemap Fragment
<?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>https://example.com/{source-url}</loc>
    <xhtml:link rel="alternate" hreflang="{source}" href="https://example.com/{source-url}" />
    <xhtml:link rel="alternate" hreflang="{lang-1}" href="https://example.com/{lang-1-url}" />
    <xhtml:link rel="alternate" hreflang="{lang-2}" href="https://example.com/{lang-2-url}" />
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/{fallback-url}" />
  </url>
  <url>
    <loc>https://example.com/{lang-1-url}</loc>
    <xhtml:link rel="alternate" hreflang="{source}" href="https://example.com/{source-url}" />
    <xhtml:link rel="alternate" hreflang="{lang-1}" href="https://example.com/{lang-1-url}" />
    <xhtml:link rel="alternate" hreflang="{lang-2}" href="https://example.com/{lang-2-url}" />
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/{fallback-url}" />
  </url>
  <url>
    <loc>https://example.com/{lang-2-url}</loc>
    <xhtml:link rel="alternate" hreflang="{source}" href="https://example.com/{source-url}" />
    <xhtml:link rel="alternate" hreflang="{lang-1}" href="https://example.com/{lang-1-url}" />
    <xhtml:link rel="alternate" hreflang="{lang-2}" href="https://example.com/{lang-2-url}" />
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/{fallback-url}" />
  </url>
</urlset>

Generate one <url> block per locale. Every block must contain the identical complete set of <xhtml:link> alternates for every locale, plus self and optional x-default, using fully qualified https://... URLs.

Save to multilingual/hreflang-sitemap.xml.

5c. Hreflang Map (JSON)

Machine-readable mapping for CMS integration:

{
  "sourceSlug": "how-to-avoid-ai-slop",
  "sourceLanguage": "en",
  "generatedDate": "YYYY-MM-DD",
  "versions": [
    {
      "lang": "en",
      "locale": "en",
      "hreflang": "en",
      "slug": "how-to-avoid-ai-slop",
      "file": "en/how-to-avoid-ai-slop.md",
      "url": "https://example.com/en/how-to-avoid-ai-slop/",
      "canonical": "https://example.com/en/how-to-avoid-ai-slop/",
      "xDefault": true,
      "title": "How to Avoid AI Slop in 2026",
      "description": "..."
    },
    {
      "lang": "de",
      "locale": "de-DE",
      "hreflang": "de-DE",
      "slug": "wie-man-ki-slop-vermeidet",
      "file": "de/wie-man-ki-slop-vermeidet.md",
      "url": "https://example.com/de/wie-man-ki-slop-vermeidet/",
      "canonical": "https://example.com/de/wie-man-ki-slop-vermeidet/",
      "xDefault": false,
      "title": "KI-Slop vermeiden in 2026",
      "description": "..."
    }
  ],
  "hreflang": {
    "method": "html",
    "x-default": "https://example.com/"
  }
}

Save to multilingual/hreflang-map.json.

5d. Localized Article Schema (Required)

Attach or update Article/BlogPosting 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 for richer schema on each version. Keep Article/BlogPosting, Person, Organization, and BreadcrumbList as the priority stack. FAQPage is optional and only for visible FAQ content as an entity and AI-citation signal, not a Google rich result target.

Phase 6: Delivery Summary
## 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 Article schema embedded per version

### Total
- [N] posts in [N] languages
- [N] SEO assets generated

### Next steps
- Replace `{source-url}`, `{lang-1-url}`, `{lang-2-url}`, and
  `{fallback-url}` placeholders in hreflang tags with real absolute HTTPS
  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.

Cross-References

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)

Error Handling

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
10 or more target languages Stop before writing. Explain scaled-content-abuse risk and require reviewed batches of at most 9 target languages
seo-hreflang not installed Use the self-contained generator, note it in the summary

Commands Recap

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
1---
2name: blog-multilingual
3description: >
4 One-command multilingual blog creation. Writes a blog post, translates it
5 into user-specified languages, applies cultural adaptation, and emits
6 hreflang tags, sitemap entries, and a CMS-ready language map. The complete
7 write-to-publish pipeline for international content. Orchestrates blog-write,
8 blog-translate, blog-localize, and (optionally) seo-hreflang.
9 Use when user says "multilingual blog", "blog multilingual", "write in
10 multiple languages", "international blog", "mehrsprachiger Blog", "blog
11 multilingue", "blog multilingue", "create blog in German and French".
12user-invokable: true
13argument-hint: "<topic> --languages <comma-separated-codes>"
14license: MIT
15compatibility: Requires claude-blog (blog-write). Optional integration with claude-seo (seo-hreflang) for richer hreflang validation.
16metadata:
17 author: AgriciDaniel
18 version: "2.2.0"
19 category: blog
20---
21 
22# Blog Multilingual, One-Command International Publishing
23 
24The flagship multilingual orchestrator. Combines blog writing, translation,
25cultural adaptation, and full international SEO into a single command.
26Produces publication-ready blog posts in every target language with hreflang
27tags, localized JSON-LD schema, and CMS-integration metadata.
28 
29> Adapted from `claude-blog-multilingual` by Chris Mueller (AI Marketing Hub
30> Pro Hub Challenge submission, March 2026, scored 85/100 Proficient).
31> Original: https://github.com/Chriss54/multilingual-int
32> This port removes the original `curl | bash` installer and credential
33> handling flagged in the audit, integrates as core skills, and uses the
34> shared cultural-adaptation reference under `blog-translate/references/`.
35 
36## Dependencies
37 
38Invoked internally by this orchestrator:
39 
40| Component | Source | Required |
41|-----------|--------|----------|
42| `blog-write` | claude-blog (this plugin) | Yes |
43| `blog-translate` | claude-blog (this plugin) | Yes |
44| `blog-localize` | claude-blog (this plugin) | Yes (when `--localize` is on, default) |
45| `seo-hreflang` | claude-seo (sibling plugin) | No, falls back to a self-contained generator |
46 
47If `seo-hreflang` is not installed, the orchestrator emits hreflang tags using
48its own minimal generator (Phase 5 below) and notes the limitation in the
49delivery summary. Hreflang validation in that case is structural only, not the
50deeper validation `seo-hreflang` provides.
51 
52## Command Syntax
53 
54```
55/blog multilingual <topic> --languages <lang1,lang2,...> [--source <lang>] [--no-localize] [--format <md|mdx|html>]
56```
57 
58| Argument | Required | Default | Description |
59|----------|----------|---------|-------------|
60| `<topic>` | Yes | required | Blog topic or working title |
61| `--languages` | Yes | required | Comma-separated Google-compatible hreflang tags (e.g. `de,fr,es-MX,ja,pt-BR`) |
62| `--source` | No | `en` | Source language to write the original in |
63| `--no-localize` | No | off | Skip cultural adaptation (translation only) |
64| `--format` | No | auto | Output format: `md`, `mdx`, or `html` |
65 
66If `--languages` is missing, ask the user once before running anything:
67"Which languages should the blog be published in? Provide hreflang tags
68separated by commas (e.g., `de,fr,es-MX,ja,pt-BR`). The post will be written
69in `<source>` first, then translated."
70 
71## Workflow
72 
73### Phase 1: Configuration
74 
751. Parse arguments. Extract topic, target languages, source, format.
762. Validate each language code with the shared multilingual locale rules used
77 by `blog-translate`, `blog-localize`, and `blog-locale-audit`: ISO 639-1
78 language in lowercase, optional ISO 15924 script in title case, optional
79 ISO 3166-1 Alpha-2 region in uppercase. Require a region or explicit
80 neutral mode for ambiguous language-only targets such as `es`, `pt`, and
81 `zh`.
823. Detect output format from the project (frontmatter convention, file
83 extensions, framework hints) or use `--format`.
844. Resolve source language. If a target language equals `--source`, drop it
85 from the translation list with a notice.
865. Create the output directory inside the current working directory:
87 ```
88 multilingual/
89 {source-lang}/
90 {lang-1}/
91 {lang-2}/
92 ...
93 ```
94 Keep all output inside the project root; do not write outside the cwd.
95 
96Progress: `Phase 1: Configuration complete, [N] languages selected ([codes])`
97 
98### Phase 2: Write Original Blog
99 
100Invoke the `blog-write` sub-skill (route through `/blog write` so all
101existing rules apply: template auto-selection, sourced statistics, citation
102capsules, Article schema priority, FAQPage only as an entity signal when
103visible FAQ content exists, internal-link zones, charts, image embedding). Pass the
104topic and any blog-write parameters surfaced by the user.
105 
106Save the original to `multilingual/{source-lang}/{slug}.{ext}`.
107 
108Progress: `Phase 2: Original written, multilingual/{source-lang}/{slug}.{ext}`
109 
110### Phase 3: Translate to All Target Languages
111 
112For each target language, invoke `blog-translate`:
113 
114- Input: the original blog post produced in Phase 2.
115- Target: the specific language code.
116- Run targets in parallel where the runtime supports it (one Task per
117 language) to reduce wall-clock time.
118 
119Save translations to `multilingual/{lang}/{localized-slug}.{ext}`.
120 
121Progress: `Phase 3: Translating to [lang] ([X]/[N])` per language, then
122`Phase 3: All translations complete`.
123 
124### Phase 4: Cultural Adaptation
125 
126If `--no-localize` is NOT set, invoke `blog-localize` for every translated
127post:
128 
129- Input: the translated blog post.
130- Locale: the target language or region code.
131- Run in parallel.
132 
133Apply the localized output only after resolving the generated path inside
134`multilingual/`, rejecting symlinks, and creating a backup when overwriting.
135The localizer swaps brand examples, adapts CTAs, substitutes legal
136references, and adjusts formality. See
137`../blog-localize/SKILL.md` for the full adaptation pass.
138 
139Progress: `Phase 4: Cultural adaptation complete for [N] languages`.
140 
141### Phase 5: International SEO Generation
142 
143Generate three artifacts plus localized schema. If the `seo-hreflang` skill
144from claude-seo is installed, delegate validation to it. Otherwise use the
145self-contained generator below.
146 
147#### 5a. Hreflang Tags (HTML)
148 
149Copy-paste ready tags for `<head>`:
150 
151```html
152<!-- Hreflang tags. Paste into <head> of each language version. -->
153<link rel="alternate" hreflang="{source}" href="https://example.com/{source-url}" />
154<link rel="alternate" hreflang="{lang-1}" href="https://example.com/{lang-1-url}" />
155<link rel="alternate" hreflang="{lang-2}" href="https://example.com/{lang-2-url}" />
156<link rel="alternate" hreflang="x-default" href="https://example.com/{fallback-url}" />
157```
158 
159Rules (mirrored from `seo-hreflang`):
160 
161- Every page references all alternates including itself (self-referencing).
162- Every `href`, including `x-default`, is a fully qualified absolute
163 `https://...` URL.
164- `x-default` points to the unmatched-language fallback, such as a global
165 language selector or default market page. It does not have to be the source
166 language version.
167- All URLs use the same protocol (HTTPS) and trailing-slash convention.
168- Bidirectional: every relationship is reciprocal.
169 
170Save to `multilingual/hreflang-tags.html`.
171 
172#### 5b. Hreflang Sitemap Fragment
173 
174```xml
175<?xml version="1.0" encoding="UTF-8"?>
176<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
177 xmlns:xhtml="http://www.w3.org/1999/xhtml">
178 <url>
179 <loc>https://example.com/{source-url}</loc>
180 <xhtml:link rel="alternate" hreflang="{source}" href="https://example.com/{source-url}" />
181 <xhtml:link rel="alternate" hreflang="{lang-1}" href="https://example.com/{lang-1-url}" />
182 <xhtml:link rel="alternate" hreflang="{lang-2}" href="https://example.com/{lang-2-url}" />
183 <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/{fallback-url}" />
184 </url>
185 <url>
186 <loc>https://example.com/{lang-1-url}</loc>
187 <xhtml:link rel="alternate" hreflang="{source}" href="https://example.com/{source-url}" />
188 <xhtml:link rel="alternate" hreflang="{lang-1}" href="https://example.com/{lang-1-url}" />
189 <xhtml:link rel="alternate" hreflang="{lang-2}" href="https://example.com/{lang-2-url}" />
190 <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/{fallback-url}" />
191 </url>
192 <url>
193 <loc>https://example.com/{lang-2-url}</loc>
194 <xhtml:link rel="alternate" hreflang="{source}" href="https://example.com/{source-url}" />
195 <xhtml:link rel="alternate" hreflang="{lang-1}" href="https://example.com/{lang-1-url}" />
196 <xhtml:link rel="alternate" hreflang="{lang-2}" href="https://example.com/{lang-2-url}" />
197 <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/{fallback-url}" />
198 </url>
199</urlset>
200```
201 
202Generate one `<url>` block per locale. Every block must contain the identical
203complete set of `<xhtml:link>` alternates for every locale, plus self and
204optional `x-default`, using fully qualified `https://...` URLs.
205 
206Save to `multilingual/hreflang-sitemap.xml`.
207 
208#### 5c. Hreflang Map (JSON)
209 
210Machine-readable mapping for CMS integration:
211 
212```json
213{
214 "sourceSlug": "how-to-avoid-ai-slop",
215 "sourceLanguage": "en",
216 "generatedDate": "YYYY-MM-DD",
217 "versions": [
218 {
219 "lang": "en",
220 "locale": "en",
221 "hreflang": "en",
222 "slug": "how-to-avoid-ai-slop",
223 "file": "en/how-to-avoid-ai-slop.md",
224 "url": "https://example.com/en/how-to-avoid-ai-slop/",
225 "canonical": "https://example.com/en/how-to-avoid-ai-slop/",
226 "xDefault": true,
227 "title": "How to Avoid AI Slop in 2026",
228 "description": "..."
229 },
230 {
231 "lang": "de",
232 "locale": "de-DE",
233 "hreflang": "de-DE",
234 "slug": "wie-man-ki-slop-vermeidet",
235 "file": "de/wie-man-ki-slop-vermeidet.md",
236 "url": "https://example.com/de/wie-man-ki-slop-vermeidet/",
237 "canonical": "https://example.com/de/wie-man-ki-slop-vermeidet/",
238 "xDefault": false,
239 "title": "KI-Slop vermeiden in 2026",
240 "description": "..."
241 }
242 ],
243 "hreflang": {
244 "method": "html",
245 "x-default": "https://example.com/"
246 }
247}
248```
249 
250Save to `multilingual/hreflang-map.json`.
251 
252#### 5d. Localized Article Schema (Required)
253 
254Attach or update Article/BlogPosting JSON-LD on every language version with
255`inLanguage` and `translationOfWork` fields:
256 
257```json
258{
259 "@context": "https://schema.org",
260 "@type": "BlogPosting",
261 "headline": "[Localized title]",
262 "description": "[Localized description]",
263 "inLanguage": "[lang-code]",
264 "isPartOf": { "@type": "Blog", "inLanguage": "[lang-code]" },
265 "translationOfWork": {
266 "@type": "BlogPosting",
267 "inLanguage": "[source-lang]",
268 "url": "[source-url]"
269 }
270}
271```
272 
273Use the existing `/blog schema` sub-skill for richer schema on each version.
274Keep Article/BlogPosting, Person, Organization, and BreadcrumbList as the
275priority stack. FAQPage is optional and only for visible FAQ content as an
276entity and AI-citation signal, not a Google rich result target.
277 
278### Phase 6: Delivery Summary
279 
280```
281## Multilingual blog complete: [Title]
282 
283### Original
284- Language: [source]
285- File: multilingual/{source}/{slug}.{ext}
286 
287### Translations
288| Language | File | Localized | Keywords adapted |
289|----------|------|-----------|------------------|
290| de | multilingual/de/{slug}.md | yes | [N] |
291| fr | multilingual/fr/{slug}.md | yes | [N] |
292| es | multilingual/es/{slug}.md | yes | [N] |
293 
294### International SEO assets
295- multilingual/hreflang-tags.html
296- multilingual/hreflang-sitemap.xml
297- multilingual/hreflang-map.json
298- Localized Article schema embedded per version
299 
300### Total
301- [N] posts in [N] languages
302- [N] SEO assets generated
303 
304### Next steps
305- Replace `{source-url}`, `{lang-1-url}`, `{lang-2-url}`, and
306 `{fallback-url}` placeholders in hreflang tags with real absolute HTTPS
307 URLs.
308- Merge `hreflang-sitemap.xml` into your existing sitemap.
309- Run `/blog locale-audit multilingual/` to verify completeness.
310- Resolve `[INTERNAL-LINK]` placeholders with locale-specific URLs.
311- If claude-seo is installed, run `/seo hreflang multilingual/` for
312 deeper validation.
313```
314 
315## Cross-References
316 
317| When | Run |
318|------|-----|
319| To regenerate or reword the source | `/blog write <topic>` |
320| To translate one existing file only | `/blog translate <file> --to <codes>` |
321| To deepen cultural fit on one file | `/blog localize <file> --locale <code>` |
322| To audit a multilingual directory | `/blog locale-audit <directory>` |
323| For deeper hreflang validation | `/seo hreflang <directory>` (claude-seo, optional) |
324 
325## Error Handling
326 
327| Scenario | Action |
328|----------|--------|
329| `blog-write` missing | Error: "This skill requires `blog-write`. Reinstall claude-blog." |
330| One translation fails | Complete the rest, report partial results, suggest a retry command |
331| Source language equals a target | Skip that target, log a notice |
332| 10 or more target languages | Stop before writing. Explain scaled-content-abuse risk and require reviewed batches of at most 9 target languages |
333| `seo-hreflang` not installed | Use the self-contained generator, note it in the summary |
334 
335## Commands Recap
336 
337| Command | Purpose |
338|---------|---------|
339| `/blog multilingual <topic> --languages de,fr,es` | Write source, translate, localize, emit hreflang assets |
340| `/blog translate <file> --to de,fr,es` | Translate one file into target languages |
341| `/blog localize <file> --locale de-DE` | Cultural deep-adaptation of one translated file |
342| `/blog locale-audit <directory>` | Multilingual QA across a directory |
343 
View all files on GitHub →

Details

Updated
Sep 18, 2026
License
MIT
Stars on the repo
★ 2,219
Checked
Source
AgriciDaniel/claude-blog ↗
Creator
AgriciDaniel · 130 listings
View creator

Made with blog-multilingual

Blog Multilingual, One-Command International Publishing — claude-blog /blog write demo: end-to-end article generation with the 5-gate Delivery Contract (from the AgriciDaniel/claude-blog README)
Blog Multilingual, One-Command International Publishing — claude-blog /blog write demo: end-to-end article generation with the 5-gate Delivery Contract (from the AgriciDaniel/claude-blog README)

by AgriciDaniel

Similar skills

See all →
SkillTranslate books into any language using parallel sub-agentsBook Translation Skilldeusyu/translate-book · by deusyuTranslate books (PDF/DOCX/EPUB) into any language using parallel sub-agents. Converts input -> Markdown chunks -> translated chunks -> HTML/DOCX/EPUB/PDF.★ 2.1k GitHub starsSkillMarketing copy localization skill that converts EnglishArabic Copy Localizer — Claude Skillgrowthack88/growth-marketing-os · by growthack88Marketing copy localization skill that converts English marketing copy (ads, landing pages, emails, CTAs) into native Egyptian Arabic عامية — or GCC dialect on request — with natural English code-switching for business terms. Use whenever marketing copy needs an Arabic version, an Arabic draft "sounds translated", or a bilingual campaign is being built. Rebuilds meaning per line instead of translating words; never outputs فصحى for performance marketing contexts.★ 117 GitHub starsPromptTranslate text from Chinese to EnglishChinese to english translation assistantf/prompts.chat · by BruceTranslate text from Chinese to English, ensuring accurate and contextually appropriate translations.New listingSkillTranslate, 翻译, 精翻, translate article, translate to ChineseTranslatorJimLiu/baoyu-skills · by JimLiuThis skill should be used when the user asks to "translate", "翻译", "精翻", "translate article", translate to Chinese", "translate to English", "改成中文", "改成英文", "convert to Chinese", localize", "本地化", "refined translation", "精细翻译", "proofread translation", "快速翻译", "快翻", 这篇文章翻译一下", or provides a URL/file with translation intent. Supports three modes (quick/normal/refined) with custom glossary support.★ 26.6k GitHub starsMCPYou need to translate a DESIGN.mdDesign bridgeVoltAgent/awesome-claude-code-subagents · by VoltAgentUse this agent when you need to translate a DESIGN.md from the VoltAgent/awesome-design-md repository into polished Claude Code instructions for building user interfaces that faithfully match the chosen brand. Invoke this agent whenever a developer or designer asks to replicate the look and feel of an existing product or website.★ 25.2k GitHub starsSkillAudit a directory of multilingual blog contentBlog Locale Audit, Multilingual Quality ControlAgriciDaniel/claude-blog · by AgriciDanielAudit a directory of multilingual blog content for completeness, consistency, hreflang correctness, meta-tag parity, and freshness. Builds a translation coverage matrix, flags stale translations, validates hreflang and schema, and emits a prioritized report with runnable fix commands. Use when user says "locale audit", "blog locale-audit", "check translations", multilingual audit", "translation check", "hreflang check", Uebersetzungen pruefen".★ 2.2k GitHub stars

More from AgriciDaniel

SkillThe Lighthouse Agentic Browsing fractionAgentic Browsing ReadinessAgriciDaniel/claude-seo · by AgriciDanielAudit and fix agent readiness: the Lighthouse Agentic Browsing fraction, accessibility tree for agents, robots.txt and Content-Signal for AI agents, WAF treatment of agent traffic, llms.txt, Markdown delivery, ai-catalog.json, /.well-known discovery files, and WebMCP tools. Exclude AI citability and brand signals (seo-geo) and commerce protocol depth (seo-ecommerce).★ 17.4k GitHub starsSkillOptimize content for AI Overviews , ChatGPT web searchAI Search / GEO Optimization (May 2026)AgriciDaniel/claude-seo · by AgriciDanielOptimize content for AI Overviews (formerly SGE), ChatGPT web search, Perplexity, and other AI-powered search experiences. Generative Engine Optimization (GEO) analysis including brand mention signals, AI crawler accessibility, llms.txt compliance, passage-level citability scoring, and platform-specific optimization. Use when user says "AI Overviews", "SGE", GEO", "AI search", "LLM optimization", "Perplexity", "AI citations", ChatGPT search", or "AI visibility".★ 17.4k GitHub starsSkillReferring domains, anchor text distributionBacklink Profile AnalysisAgriciDaniel/claude-seo · by AgriciDanielBacklink profile analysis: referring domains, anchor text distribution, toxic link detection, competitor gap analysis. Works with free APIs (Moz, Bing Webmaster, Common Crawl) and DataForSEO extension. Use when user says backlinks, link profile, referring domains, anchor text, toxic links, link gap, link building, disavow, or backlink audit.★ 17.4k GitHub starsSkillYou share your Amazon advertising numbers and goals; you getAmazon Ads AuditAgriciDaniel/claude-ads · by AgriciDanielYou share your Amazon advertising numbers and goals; you get back a plain-language review of what's draining your budget and what to change first.★ 9.5k GitHub starsSkillPaste what you're spending on Apple Search AdsApple Ads AuditAgriciDaniel/claude-ads · by AgriciDanielPaste what you're spending on Apple Search Ads and your recent numbers; get back a plain review of what's wasting money and what to fix first.★ 9.5k GitHub starsSkillPaste the sales and spend numbers each ad platform claimsAttribution AuditAgriciDaniel/claude-ads · by AgriciDanielPaste the sales and spend numbers each ad platform claims, and get back a plain explanation of why they disagree and which figure to trust.★ 9.5k GitHub stars