$npx -y skills add AgriciDaniel/claude-blog --skill blog-translateTranslate existing blog posts into one or more target languages with SEO-optimized localization. Produces native-quality translations that preserve markdown structure, frontmatter, schema JSON-LD, image and chart embeds, and citation capsules. Localizes keywords, meta tags, numbe
| 1 | # Blog Translate, SEO-Optimized Blog Translation |
| 2 | |
| 3 | Translates an existing blog post into one or more target languages. Unlike |
| 4 | generic translation, this skill produces SEO-optimized, publication-ready |
| 5 | content with localized keywords, meta tags, and culturally correct |
| 6 | formatting. |
| 7 | |
| 8 | > Adapted from `claude-blog-multilingual` by Chris Mueller (Pro Hub Challenge, |
| 9 | > March 2026). Original: https://github.com/Chriss54/multilingual-int |
| 10 | |
| 11 | ## Key References |
| 12 | |
| 13 | Load on demand: |
| 14 | |
| 15 | - `references/translation-rules.md`, format preservation, number/date/currency |
| 16 | formats per locale, quote handling, quality criteria. |
| 17 | - `references/cultural-adaptation.md`, cultural profiles per locale (DACH, |
| 18 | Francophone, Hispanic, Japanese, custom). This file is shared with |
| 19 | `blog-localize` (do not duplicate). |
| 20 | |
| 21 | ## Workflow |
| 22 | |
| 23 | ### Phase 1: Input Parsing |
| 24 | |
| 25 | 1. Read the source file (markdown, MDX, or HTML). |
| 26 | 2. Auto-detect source language. Order of preference: |
| 27 | - Frontmatter `lang` field. |
| 28 | - HTML `lang` attribute. |
| 29 | - Content analysis (script, common stop words). |
| 30 | 3. Parse target languages from `--to` as comma-separated ISO 639-1 codes |
| 31 | (`de,fr,es,ja,pt-BR`). If `--to` is missing, ask the user once: "Which |
| 32 | languages should I translate to? Provide ISO 639-1 codes (e.g., de, fr, |
| 33 | es, ja, pt-BR)." |
| 34 | 4. Validate every code. Reject invalid ones with a suggestion (`jp` becomes |
| 35 | "Did you mean `ja` for Japanese?"). If a target equals the source |
| 36 | language, skip it with a notice. |
| 37 | |
| 38 | ### Phase 2: Content Analysis |
| 39 | |
| 40 | Extract the translatable surface: |
| 41 | |
| 42 | - Frontmatter: `title`, `description`, `tags`, `author` (only when |
| 43 | translatable, e.g. role labels, not personal names). |
| 44 | - All headings (H1, H2, H3). |
| 45 | - Body paragraphs. |
| 46 | - Image `alt` text and `<figcaption>` content. |
| 47 | - Chart `<text>` and `<tspan>` content; preserve every SVG attribute (`x`, |
| 48 | `y`, `font-size`, `fill`, `transform`). |
| 49 | - FAQ questions and answers. |
| 50 | - Citation capsule text. |
| 51 | - Key Takeaways or summary box. |
| 52 | - CTA text. |
| 53 | - Internal-link zone anchor text. |
| 54 | |
| 55 | Preserve unchanged: |
| 56 | |
| 57 | - Markdown and HTML structure, tags, attributes. |
| 58 | - Image URLs, link URLs, frontmatter keys. |
| 59 | - Code blocks (translate inline comments only when meaningful). |
| 60 | - Internal-link zone markers (`[INTERNAL-LINK: ...]`). |
| 61 | - Source organization names in citations (Gartner, McKinsey, etc.). |
| 62 | - Person names. |
| 63 | - Schema JSON-LD blocks (translate only the user-facing string values). |
| 64 | |
| 65 | Identify the primary and secondary keywords for Phase 3. |
| 66 | |
| 67 | ### Phase 3: Keyword Localization |
| 68 | |
| 69 | For each target language: |
| 70 | |
| 71 | 1. Decide whether the source keyword is the established term in the target |
| 72 | market. If yes (e.g., "Content Marketing" stays in German), keep it. |
| 73 | 2. If a local equivalent has real search behavior, swap to it. |
| 74 | 3. Apply the same logic to secondary keywords. |
| 75 | 4. Record the mapping. The translator agent uses it to update title, meta |
| 76 | description, and H2 headings consistently. |
| 77 | |
| 78 | ### Phase 4: Translation |
| 79 | |
| 80 | Spawn the `blog-translator` agent (via Task) for each target language with: |
| 81 | |
| 82 | - The source content. |
| 83 | - The keyword localization map from Phase 3. |
| 84 | - The target language code. |
| 85 | - Pointers to `references/translation-rules.md` and the cultural profile in |
| 86 | `references/cultural-adaptation.md` if one exists for the target locale. |
| 87 | |
| 88 | Run agents in parallel when translating into multiple languages. |
| 89 | |
| 90 | The agent returns the fully translated post in the same format as the input. |
| 91 | |
| 92 | ### Phase 5: Post-Processing |
| 93 | |
| 94 | For each translated version: |
| 95 | |
| 96 | 1. Add or update locale frontmatter: |
| 97 | ```yaml |
| 98 | lang: "de" |
| 99 | translatedFrom: "en" |
| 100 | translatedDate: "YYYY-MM-DD" |
| 101 | slug: "wie-man-ki-slop-vermeidet" |
| 102 | ``` |
| 103 | 2. Verify structural integrity: |
| 104 | - Same number of H2 and H3 sections as the original. |
| 105 | - All images present with translated alt text. |
| 106 | - All SVG charts present with translated text labels (length-adjusted: |
| 107 | DE +30%, FR +15%, JA -20%, others see `references/translation-rules.md`). |
| 108 | - FAQ count matches. |
| 109 | - Citation capsules present in each H2. |
| 110 | 3. Save translated files: |
| 111 | ``` |
| 112 | translations/ |
| 113 | {lang}/{localized-slug}.{ext} |
| 114 | ` |