/blog-locale-audit
Audit 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
$ npx -y skills add AgriciDaniel/claude-blog --skill blog-locale-audit --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/blog-locale-audit
Context preview
The summary Claude sees to decide when to auto-load this skill.
Audit 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
SKILL.md
blog-locale-audit.SKILL.mdname: blog-locale-audit
description: >
Audit 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".
user-invokable: true
argument-hint: "<directory>"
license: MIT
compatibility: Standalone within claude-blog. Optional richer hreflang validation via claude-seo seo-hreflang.
metadata:
author: AgriciDaniel
version: "2.1.1"
category: blog
Blog Locale Audit, Multilingual Quality Control
Audits a directory of multilingual blog content to ensure every language version is complete, consistent, correctly tagged, and SEO-optimized. Catches international content issues before they hurt rankings.
> Adapted from `claude-blog-multilingual` by Chris Mueller (Pro Hub Challenge, > March 2026). Original: https://github.com/Chriss54/multilingual-int
Workflow
Phase 1: Discovery
1. Resolve the target directory inside the project root/current working directory. Reject symlinked directories and traversal outside the root, then scan blog content and group posts by language using:
- Subdirectory names (`en/`, `de/`, `fr/`).
- Frontmatter `lang` and `translatedFrom` fields.
- `hreflang-map.json` if present.
2. Normalize detected language codes with the shared multilingual locale rules used by `blog-translate`, `blog-localize`, and `blog-multilingual`: ISO 639-1 language in lowercase, optional ISO 15924 script in title case, optional ISO 3166-1 Alpha-2 region in uppercase. Flag ambiguous language-only codes such as `es`, `pt`, and `zh` unless the content declares an explicit neutral mode. 3. Build a content matrix mapping which post exists in which languages. Use a stable translation-group key before comparing slugs: `translationGroupId`, `sourceSlug`, schema `translationOfWork.url`, or the IDs and URLs in `hreflang-map.json`. Fall back to normalized source slug only when no stable key exists. 4. Detect the source language (most common `translatedFrom` target, or the `sourceLanguage` field in `hreflang-map.json` if present).
Phase 2: Completeness Audit
Show which translations are missing:
### Translation coverage matrix
| Post (EN) | DE | FR | ES | JA |
|-----------|----|----|----|----|
| how-to-avoid-ai-slop | ok | ok | missing | missing |
| content-marketing-2026 | ok | missing | ok | missing |
Coverage: 60% (6 of 10 expected translations present)
Missing: 4 translations needed
Phase 3: Content Parity Audit
For every post that exists in multiple languages:
| Check | What | Severity | |-------|------|----------| | Section count | Same number of H2 and H3 sections | Critical | | FAQ count | Same number of FAQ items | High | | Image count | Same number of images | High | | Chart count | Same number of charts (SVG figures) | High | | Word count ratio | Within expected band for language pair (DE +20% to +30%, JA -20%, ES +10%) | Medium | | Link count | Similar internal and external link counts | Medium | | Evidence-backed claims | Same supported claims and citations across versions | Medium | | Frontmatter parity | All required fields present per version | High |
Flag every significant deviation as an issue.
Phase 4: SEO Parity Audit
For every language version verify:
| Element | Check | Severity | |---------|-------|----------| | Title tag | Present, localized, clear, and appropriate for the page | Critical | | Meta description | Present, localized, accurate, and consistent with visible content | Critical | | `lang` attribute or frontmatter `lang` | Present, valid Google-compatible hreflang or BCP 47 language tag | Critical | | Canonical URL | Points to the same-language page, not the source-language page or x-default | Critical | | Schema `inLanguage` | Matches `lang` | High | | Schema `translationOfWork` | Points to the source URL | High | | Alt text | Translated (no English alt in non-EN posts) | High | | Slug | Localized (no English slug in non-EN posts) | Medium | | Tags | Localized | Medium | | Keywords | Localized | Medium |
Phase 5: Hreflang Audit
If `hreflang-tags.html`, `hreflang-sitemap.xml`, or `hreflang-map.json` exists in the directory:
| Check | What | Severity | |-------|------|----------| | Self-referencing | Each page references itself | Critical | | Return tags | Every relationship is bidirectional | Critical | | Canonical consistency | Every hreflang page canonicalizes to its same-language URL | Critical | | `x-default` | Present, points to the unmatched-language fallback such as a language selector or default market page | Critical | | Language codes | Valid Google-compatible hreflang tags: ISO 639-1 language plus optional ISO 15924 script or ISO 3166-1 Alpha-2 region | High | | URL consistency | Same protocol, same trailing-slash convention | Medium | | Completeness | Every language version represented | High |
If no hreflang files exist, report it as a critical gap and offer: "Run `/blog multilingual <topic> --languages ...` to regenerate, or create hreflang-tags.html manually."
If `seo-hreflang` from claude-seo is installed, suggest running it for deeper validation.
Phase 6: Freshness Audit
For posts with `translatedDate` in frontmatter:
| Check | What | Severity | |-------|------|----------| | Source updated after translation | Source modified after `translatedDate` | Critical | | Source content drift | Stored source hash or source `dateModified` differs from current source | Critical | | Translation drift | Stored translation hash differs from current localized file | Medium | | Translation older than 90 days | May need refresh | Medium | | `lastUpdated` mismatch across vers
Read more
name: blog-locale-audit description: > Audit 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". user-invokable: true argument-hint: "<directory>" license: MIT compatibility: Standalone within claude-blog. Optional richer hreflang validation via claude-seo seo-hreflang. metadata: author: AgriciDaniel version: "2.1.1" category: blog
Blog Locale Audit, Multilingual Quality Control
Audits a directory of multilingual blog content to ensure every language version is complete, consistent, correctly tagged, and SEO-optimized. Catches international content issues before they hurt rankings.
> Adapted from `claude-blog-multilingual` by Chris Mueller (Pro Hub Challenge, > March 2026). Original: https://github.com/Chriss54/multilingual-int
Workflow
Phase 1: Discovery
1. Resolve the target directory inside the project root/current working directory. Reject symlinked directories and traversal outside the root, then scan blog content and group posts by language using:
- Subdirectory names (`en/`, `de/`, `fr/`).
- Frontmatter `lang` and `translatedFrom` fields.
- `hreflang-map.json` if present.
2. Normalize detected language codes with the shared multilingual locale rules used by `blog-translate`, `blog-localize`, and `blog-multilingual`: ISO 639-1 language in lowercase, optional ISO 15924 script in title case, optional ISO 3166-1 Alpha-2 region in uppercase. Flag ambiguous language-only codes such as `es`, `pt`, and `zh` unless the content declares an explicit neutral mode. 3. Build a content matrix mapping which post exists in which languages. Use a stable translation-group key before comparing slugs: `translationGroupId`, `sourceSlug`, schema `translationOfWork.url`, or the IDs and URLs in `hreflang-map.json`. Fall back to normalized source slug only when no stable key exists. 4. Detect the source language (most common `translatedFrom` target, or the `sourceLanguage` field in `hreflang-map.json` if present).
Phase 2: Completeness Audit
Show which translations are missing:
### Translation coverage matrix | Post (EN) | DE | FR | ES | JA | |-----------|----|----|----|----| | how-to-avoid-ai-slop | ok | ok | missing | missing | | content-marketing-2026 | ok | missing | ok | missing | Coverage: 60% (6 of 10 expected translations present) Missing: 4 translations needed
Phase 3: Content Parity Audit
For every post that exists in multiple languages:
| Check | What | Severity | |-------|------|----------| | Section count | Same number of H2 and H3 sections | Critical | | FAQ count | Same number of FAQ items | High | | Image count | Same number of images | High | | Chart count | Same number of charts (SVG figures) | High | | Word count ratio | Within expected band for language pair (DE +20% to +30%, JA -20%, ES +10%) | Medium | | Link count | Similar internal and external link counts | Medium | | Evidence-backed claims | Same supported claims and citations across versions | Medium | | Frontmatter parity | All required fields present per version | High |
Flag every significant deviation as an issue.
Phase 4: SEO Parity Audit
For every language version verify:
| Element | Check | Severity | |---------|-------|----------| | Title tag | Present, localized, clear, and appropriate for the page | Critical | | Meta description | Present, localized, accurate, and consistent with visible content | Critical | | `lang` attribute or frontmatter `lang` | Present, valid Google-compatible hreflang or BCP 47 language tag | Critical | | Canonical URL | Points to the same-language page, not the source-language page or x-default | Critical | | Schema `inLanguage` | Matches `lang` | High | | Schema `translationOfWork` | Points to the source URL | High | | Alt text | Translated (no English alt in non-EN posts) | High | | Slug | Localized (no English slug in non-EN posts) | Medium | | Tags | Localized | Medium | | Keywords | Localized | Medium |
Phase 5: Hreflang Audit
If `hreflang-tags.html`, `hreflang-sitemap.xml`, or `hreflang-map.json` exists in the directory:
| Check | What | Severity | |-------|------|----------| | Self-referencing | Each page references itself | Critical | | Return tags | Every relationship is bidirectional | Critical | | Canonical consistency | Every hreflang page canonicalizes to its same-language URL | Critical | | `x-default` | Present, points to the unmatched-language fallback such as a language selector or default market page | Critical | | Language codes | Valid Google-compatible hreflang tags: ISO 639-1 language plus optional ISO 15924 script or ISO 3166-1 Alpha-2 region | High | | URL consistency | Same protocol, same trailing-slash convention | Medium | | Completeness | Every language version represented | High |
If no hreflang files exist, report it as a critical gap and offer: "Run `/blog multilingual <topic> --languages ...` to regenerate, or create hreflang-tags.html manually."
If `seo-hreflang` from claude-seo is installed, suggest running it for deeper validation.
Phase 6: Freshness Audit
For posts with `translatedDate` in frontmatter:
| Check | What | Severity | |-------|------|----------| | Source updated after translation | Source modified after `translatedDate` | Critical | | Source content drift | Stored source hash or source `dateModified` differs from current source | Critical | | Translation drift | Stored translation hash differs from current localized file | Medium | | Translation older than 90 days | May need refresh | Medium | | `lastUpdated` mismatch across vers
claude-blog is a Claude Code skill suite that writes, optimizes, audits, localizes, and refreshes blog content at scale. Every article is evaluated for Google-aligned usefulness and internal AI citation readiness heuristics.
Repo: AgriciDaniel/claude-blog
Other skills on claude-blog.
- /blog-analyze
Audit and score blog posts on a 5-category 100-point scoring system covering content quality, SEO optimization, E-E-A-T signals, technical elements, and AI citation readiness. Includes advisory editorial style diagnostics (sentence-length variation, configured phrase lists,
Open skill - /blog-audio
Generate audio narration of blog posts using Google Gemini TTS. Supports summary narration, full article read-aloud, and two-speaker podcast/dialogue mode with 30 voice options. Outputs MP3 with HTML5 audio embed code. Works standalone via /blog audio or internally from
Open skill - /blog-audit
Full-site blog health assessment scanning all blog files for quality scores, orphan pages, topic cannibalization, stale content, and AI citation readiness. Runs canonical batch analysis before site-wide checks. Produces per-post scores and a prioritized action queue. Use when
Open skill - /blog-brand
Establish durable brand and voice context for cross-skill consumption. Generates BRAND.md (audience, positioning, do/don't editorial rules, taboo phrases, competitor differentiation) and VOICE.md (existing persona JSON re-expressed as readable prose), both written to the project
Open skill - /blog-brief
Generate detailed content briefs for blog posts with target keywords, content outlines, competitive analysis, recommended statistics, image and chart suggestions, word count targets, internal linking architecture, template recommendations (12 types), TL;DR drafts,
Open skill - /blog-calendar
Generate editorial calendars for blogs with topic clusters, publishing schedules, material-change reviews, update plans, seasonal opportunities, content mix formula, template integration, and distribution scheduling. Plans monthly or quarterly calendars around reader needs,
Open skill

