$npx -y skills add AgriciDaniel/claude-blog --skill blog-locale-auditAudit 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 comm
| 1 | # Blog Locale Audit, Multilingual Quality Control |
| 2 | |
| 3 | Audits a directory of multilingual blog content to ensure every language |
| 4 | version is complete, consistent, correctly tagged, and SEO-optimized. |
| 5 | Catches international content issues before they hurt rankings. |
| 6 | |
| 7 | > Adapted from `claude-blog-multilingual` by Chris Mueller (Pro Hub Challenge, |
| 8 | > March 2026). Original: https://github.com/Chriss54/multilingual-int |
| 9 | |
| 10 | ## Workflow |
| 11 | |
| 12 | ### Phase 1: Discovery |
| 13 | |
| 14 | 1. Scan the target directory. Group blog posts by language using: |
| 15 | - Subdirectory names (`en/`, `de/`, `fr/`). |
| 16 | - Frontmatter `lang` and `translatedFrom` fields. |
| 17 | - `hreflang-map.json` if present. |
| 18 | 2. Build a content matrix mapping which post exists in which languages. |
| 19 | 3. Detect the source language (most common `translatedFrom` target, or the |
| 20 | `sourceLanguage` field in `hreflang-map.json` if present). |
| 21 | |
| 22 | ### Phase 2: Completeness Audit |
| 23 | |
| 24 | Show which translations are missing: |
| 25 | |
| 26 | ``` |
| 27 | ### Translation coverage matrix |
| 28 | |
| 29 | | Post (EN) | DE | FR | ES | JA | |
| 30 | |-----------|----|----|----|----| |
| 31 | | how-to-avoid-ai-slop | ok | ok | missing | missing | |
| 32 | | content-marketing-2026 | ok | missing | ok | missing | |
| 33 | |
| 34 | Coverage: 60% (6 of 10 expected translations present) |
| 35 | Missing: 4 translations needed |
| 36 | ``` |
| 37 | |
| 38 | ### Phase 3: Content Parity Audit |
| 39 | |
| 40 | For every post that exists in multiple languages: |
| 41 | |
| 42 | | Check | What | Severity | |
| 43 | |-------|------|----------| |
| 44 | | Section count | Same number of H2 and H3 sections | Critical | |
| 45 | | FAQ count | Same number of FAQ items | High | |
| 46 | | Image count | Same number of images | High | |
| 47 | | Chart count | Same number of charts (SVG figures) | High | |
| 48 | | Word count ratio | Within expected band for language pair (DE +20% to +30%, JA -20%, ES +10%) | Medium | |
| 49 | | Link count | Similar internal and external link counts | Medium | |
| 50 | | Citation capsule count | Same number per H2 across versions | Medium | |
| 51 | | Frontmatter parity | All required fields present per version | High | |
| 52 | |
| 53 | Flag every significant deviation as an issue. |
| 54 | |
| 55 | ### Phase 4: SEO Parity Audit |
| 56 | |
| 57 | For every language version verify: |
| 58 | |
| 59 | | Element | Check | Severity | |
| 60 | |---------|-------|----------| |
| 61 | | Title tag | Present, correct length for the language | Critical | |
| 62 | | Meta description | Present, correct length, contains a stat | Critical | |
| 63 | | `lang` attribute or frontmatter `lang` | Present, valid ISO 639-1 | Critical | |
| 64 | | Schema `inLanguage` | Matches `lang` | High | |
| 65 | | Schema `translationOfWork` | Points to the source URL | High | |
| 66 | | Alt text | Translated (no English alt in non-EN posts) | High | |
| 67 | | Slug | Localized (no English slug in non-EN posts) | Medium | |
| 68 | | Tags | Localized | Medium | |
| 69 | | Keywords | Localized | Medium | |
| 70 | |
| 71 | ### Phase 5: Hreflang Audit |
| 72 | |
| 73 | If `hreflang-tags.html`, `hreflang-sitemap.xml`, or `hreflang-map.json` |
| 74 | exists in the directory: |
| 75 | |
| 76 | | Check | What | Severity | |
| 77 | |-------|------|----------| |
| 78 | | Self-referencing | Each page references itself | Critical | |
| 79 | | Return tags | Every relationship is bidirectional | Critical | |
| 80 | | `x-default` | Present, points to source language | Critical | |
| 81 | | Language codes | Valid ISO 639-1 (with optional region) | High | |
| 82 | | URL consistency | Same protocol, same trailing-slash convention | Medium | |
| 83 | | Completeness | Every language version represented | High | |
| 84 | |
| 85 | If no hreflang files exist, report it as a critical gap and offer: |
| 86 | "Run `/blog multilingual <topic> --languages ...` to regenerate, or create |
| 87 | hreflang-tags.html manually." |
| 88 | |
| 89 | If `seo-hreflang` from claude-seo is installed, suggest running it for |
| 90 | deeper validation. |
| 91 | |
| 92 | ### Phase 6: Freshness Audit |
| 93 | |
| 94 | For posts with `translatedDate` in frontmatter: |
| 95 | |
| 96 | | Check | What | Severity | |
| 97 | |-------|------|----------| |
| 98 | | Source updated after translation | Source modified after `translatedDate` | Critical | |
| 99 | | Translation older than 90 days | May need refresh | Medium | |
| 100 | | `lastUpdated` mismatch across versions | Versions out of sync | Medium | |
| 101 | | File mtime newer than `translatedDate` | Content changed without frontmatter update | Warning | |
| 102 | |
| 103 | Emit actionable commands per stale file: |
| 104 | |
| 105 | ``` |
| 106 | 3 translations are stale: |
| 107 | - de/ki-trends-2026.md (source updated 2 days ago) |
| 108 | -> Run: /blog translate en/ai-trends-2026.md --to de |
| 109 | - fr/ki-trends-2026.md (source updated 2 days ago) |
| 110 | -> Run: /blog translate en/ai-trends-2026.md --to fr |
| 111 | - es/tendencias-ia-2026.m |