# Blog Locale Audit

Audit a directory of multilingual blog content for completeness, consistency, hreflang...

- Repository: https://github.com/AgriciDaniel/claude-blog (2608 stars)
- Category: Writing
- License: MIT
- Last updated: 2026-10-30
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add AgriciDaniel/claude-blog --skill blog-locale-audit -g -a claude-code -y`
Codex: `npx skills add AgriciDaniel/claude-blog --skill blog-locale-audit -g -a codex -y`
Cursor: `npx skills add AgriciDaniel/claude-blog --skill blog-locale-audit -g -a cursor -y`
Gemini CLI: `npx skills add AgriciDaniel/claude-blog --skill blog-locale-audit -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add AgriciDaniel/claude-blog`

## 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".

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 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 |

The rest: https://github.com/AgriciDaniel/claude-blog/blob/HEAD/brain/.raw/sources/claude-blog-skill/skills/blog-locale-audit/SKILL.md
