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-multilingualby Chris Mueller (Pro Hub Challenge, March 2026). Original: https://github.com/Chriss54/multilingual-int
Workflow
Phase 1: Discovery
- 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
langandtranslatedFromfields. hreflang-map.jsonif present.
- Subdirectory names (
- Normalize detected language codes with the shared multilingual locale rules
used by
blog-translate,blog-localize, andblog-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 ases,pt, andzhunless the content declares an explicit neutral mode. - Build a content matrix mapping which post exists in which languages. Use a
stable translation-group key before comparing slugs:
translationGroupId,sourceSlug, schematranslationOfWork.url, or the IDs and URLs inhreflang-map.json. Fall back to normalized source slug only when no stable key exists. - Detect the source language (most common
translatedFromtarget, or thesourceLanguagefield inhreflang-map.jsonif present).
Phase 2: Completeness Audit
Show which translations are missing:
Phase 3: Content Parity Audit
For every post that exists in multiple languages:
Flag every significant deviation as an issue.
Phase 4: SEO Parity Audit
For every language version verify:
Phase 5: Hreflang Audit
If hreflang-tags.html, hreflang-sitemap.xml, or hreflang-map.json
exists in the directory:
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:
When available, store and compare sourceHash, source dateModified,
translationHash, and Git mtime before relying only on translatedDate.
Emit actionable commands per stale file:
Phase 7: Report
Output as markdown by default. If the user passes --html, also write the
report to locale-audit-report.html only inside the audited project root.
Escape all dynamic filenames, titles, URLs, and issue text with
html.escape(value, quote=True) before rendering HTML, and reject symlinked
or outside-root report paths.
Error Handling
Cross-References
- Fill missing translations:
/blog translate <file> --to <missing-codes> - Deepen weak adaptations:
/blog localize <file> --locale <code> - Regenerate hreflang assets:
/blog multilingual <topic> --languages <codes>
