International SEO
Content Localization and Locale QA with Claude Code
Learn content localization vs translation, then localize posts per market and audit every language version for gaps and stale copies with Claude Code.

Content localization is the work of adapting a translated page so it reads as if it were written for its market: local examples, local laws, the right level of formality, and calls to action that fit how people there buy. With Claude Code, you can localize a translated blog post for one locale in a single command, then audit a whole folder of language versions for missing translations, SEO gaps, and stale copies.
This guide explains the difference between translation and localization, what the ClaudeSEO /claudeblog localize and /claudeblog locale-audit commands do, how to run them, and how to fix what they find.
Key takeaways
- Translation changes the language. Localization changes the examples, laws, tone, formats, and calls to action so the page fits one market.
/claudeblog localize <file> --locale <code>audits a translated post for signs of foreign origin, adapts it, and scores its cultural fit out of 30./claudeblog locale-audit <directory>checks a folder of multilingual posts for coverage, content parity, SEO parity, hreflang, and freshness, with a health score out of 100.- Formal and informal address (Sie or du, vous or tu) must stay consistent across the whole post.
- Re-run the locale audit after every source update. A source edited after its translation is flagged as critical.
What is content localization and why does it matter?
Content localization means adapting content for a specific locale: a language plus a market, written as a code like de-DE (German for Germany) or pt-BR (Portuguese for Brazil). Translation answers "what does this say in German?" Localization answers "what would a German writer have written?"
A translated post about retail might still use Walmart as its example, cite the CCPA (California's privacy law) to German readers, end with a pushy "Buy now", and quote prices in US dollars. Every sentence is correct German, and the page still reads as imported.
That matters for SEO in three ways:
- Relevance is local. A page citing foreign laws and brands answers a different question than the one a local reader asked.
- Trust signals are local. Readers expect their own regulations, currency, and formats. A German page showing "1,000.00" instead of "1.000,00" looks foreign at a glance.
- Language versions drift. Once you publish in several languages, every version has to stay complete and current. Without checks, translations fall behind the source quietly.
Google's guidance on managing multi-regional and multilingual sites covers URLs and language signals. Localization is the content side: making the page behind each URL worth ranking in its market.
Translation vs localization: what's the difference?
Translation changes only the language. Localization keeps the argument and structure, then rewrites everything that belongs to another market. You need both, because localization can't rescue a weak translation.
Locale formats: dates, numbers, and currency
Formats are the most mechanical part of localization. These are the established conventions:
| Locale | Date | Number | Currency |
|---|---|---|---|
en-US | 03/05/2026 (month first) | 1,234.56 | $1,234.56 |
en-GB | 05/03/2026 (day first) | 1,234.56 | £1,234.56 |
de-DE | 05.03.2026 | 1.234,56 | 1.234,56 € |
fr-FR | 05/03/2026 | 1 234,56 | 1 234,56 € |
ja-JP | 2026年3月5日 | 1,234.56 | ¥1,234 |
Every row above is March 5, 2026. The string "03/05/2026" means March 5 in the US and 3 May in the UK, so spell months out in prose and use ISO 8601 (2026-03-05) in structured data. French uses a space as the thousands separator, ideally a non-breaking one so numbers don't wrap. German and French put the euro sign after the amount, and yen amounts normally have no decimals.
The localize command's audit flags prices left in US dollars without conversion or context. For a systematic check of number, date, currency, and phone formats across a live site, Claude SEO's hreflang command includes locale format validation, covered in our hreflang audit guide.
What the /claudeblog localize command does
The localize command is part of the Claude Blog skill suite. It works on a post that's already translated: it's the layer after translation, not a replacement for it. You give it a file and a locale code, and Claude Code works through a fixed sequence:
- Parse the locale. It accepts full codes such as
de-DE,fr-CA,es-MX,pt-BR, andzh-TW, or plain language codes such asdeandfr. If a code is ambiguous, such aspt, it asks whether you meanpt-BR(Brazil) orpt-PT(Portugal). - Load a cultural profile. Built-in profiles cover DACH (Germany, Austria, Switzerland), Francophone, Hispanic, and Japanese markets. For any other locale, it builds a minimal profile from a custom-locale template and carries on.
- Run a cultural audit. It scans the post for anything that signals foreign origin and lists every target as critical, recommended, or optional.
- Swap examples and sources. It uses web search to find local brands, case studies, and statistics, and replaces them inline without changing the argument.
- Adapt CTAs and tone. Calls to action and formality are rewritten to match the profile.
- Replace legal references. Foreign laws give way to local ones, with compliance notes where they help the reader.
- Verify quality. It confirms that critical targets are fixed, tone and address are consistent, SEO elements (keywords, meta, headings) are intact, and word count fits the expected ratio for the language pair.
- Save and score. By default it overwrites the translated file. If you want to keep the pre-localization version, it saves to
{slug}-localized.{ext}instead.
If the file isn't in the language you expect, the command warns you and offers to translate it first.
What the localize command changes
The cultural audit
| Element | What the audit looks for |
|---|---|
| Brand examples | US or UK brands with no local relevance |
| Statistics sources | US-only studies and surveys |
| Calls to action | Aggressive, American-style CTAs |
| Idioms | English expressions translated literally |
| Legal references | Foreign laws where local law applies |
| Cultural references | Foreign holidays, events, and customs |
| Currency and pricing | US dollars with no conversion or context |
| Tone and address | Wrong formality, or formal and informal mixed |
Examples and statistics
When a local equivalent exists, the brand or case study is swapped in place. The skill's quick map includes swaps such as Walmart to MediaMarkt for DACH, Carrefour for France, El Corte Inglés for Spain, and Aeon for Japan. If nothing local fits, it keeps the original and adds local context instead of forcing a weak substitute.
Statistics follow a stricter rule. If local data exists, the source and the figure are swapped together, with one named source per claim. If not, the original stays, labeled with where it applies ("In the US, ..."). Attribution is never removed.
Formality, CTAs, and legal references
Formality defaults come from the profile. DACH defaults to Sie for B2B and du for B2C lifestyle content, French defaults to vous, and Japanese shifts register sharply by audience. Whatever the choice, the same form of address has to hold for the whole post.
Calls to action are adjusted per market: DACH and Japanese readers prefer informational CTAs, while US copy tends toward the imperative. A literal "Buy now" might become "Jetzt entdecken" ("discover now"). Legal references are replaced too: the CCPA becomes the DSGVO in Germany, the RGPD in France, and the LGPD in Brazil. DSGVO and RGPD are the German and French names for the GDPR.
How to run localization and locale QA with Claude Code
Open your project in Claude Code with Claude Blog installed (our guide to installing skills in Claude Code covers setup). The natural order is translate, then localize, then audit:
/claudeblog translate content/en/[post].md --to de
/claudeblog localize content/de/[post].md --locale de-DE
/claudeblog locale-audit content/Use a full locale code whenever the market matters. You can also describe the job in plain English:
/claudeblog localize content/pt/[post].md --locale pt-BRLocalize content/fr/[post].md for readers in Canada and keep the pre-localization version.Add --html to the audit to also write the report to locale-audit-report.html:
/claudeblog locale-audit content/ --htmlThe audit groups posts by language using subdirectory names, the frontmatter lang and translatedFrom fields, and an hreflang-map.json file if one exists. A layout like this lets it match versions reliably:
content/
en/[post].md
de/[post].md
fr/[post].md
hreflang-map.json---
title: "[localized title]"
lang: "de"
translatedFrom: "en"
translatedDate: "YYYY-MM-DD"
lastUpdated: "YYYY-MM-DD"
---What the /claudeblog locale-audit command checks
The locale audit is the QA step for a whole folder. After grouping posts by language, it detects the source language, maps which post exists in which languages, and runs five sets of checks.
Translation coverage
A matrix with one row per source post and one column per language marks each version as present or missing, with an overall coverage figure and the number of translations still needed. If only one language is present, it reports coverage and suggests target languages.
Content parity
For posts in several languages, it compares structure: the same number of H2 and H3 sections (critical); the same number of FAQ items, images, and charts, plus complete frontmatter (high); and similar link counts and a word count within the expected band for the language pair (medium). German usually runs longer than English, so a raw word count comparison would mislead.
SEO parity
Every version needs its own title tag and meta description at the right length for its language, plus a valid ISO 639-1 lang value (all critical). Schema inLanguage must match lang, translationOfWork must point to the source URL, and alt text must be translated (high). Slugs, tags, and keywords should be localized too (medium), so an English slug on a German post gets flagged.
Hreflang
If the folder holds hreflang-tags.html, hreflang-sitemap.xml, or hreflang-map.json, the audit checks self-references and return tags (critical), an x-default pointing to the source language, valid language codes, consistent protocol and trailing slashes, and that every version is represented. No hreflang files at all is reported as a critical gap. If you also have Claude SEO installed, it suggests /claudeseo hreflang <url> for deeper validation.
Freshness
For posts with a translatedDate, it flags a source updated after its translation (critical), a translation older than 90 days (medium), mismatched lastUpdated values across versions (medium), and a file changed after its translatedDate without a frontmatter update (warning).
How to read the results
The localize command ends with a summary of what changed:
## Localization complete: [Title]
### Target locale: [locale-code] ([locale-name])
### Adaptations made
| Type | Count | Examples |
|------|-------|----------|
| Brand examples | [N] | [source brand] -> [local brand] |
| Statistics | [N] | [source study] -> [local study] |
| CTAs | [N] | [original CTA] -> [local CTA] |
| Tone adjustments | [N] | [before] -> [after] |
| Legal references | [N] | [foreign law] -> [local law] |
| Cultural references | [N] | [foreign event] -> [local event] |
### Cultural fit score
- Naturalness: [1-10]
- Market relevance: [1-10]
- Tone match: [1-10]
- Overall: [N]/30
### Remaining recommendations
- [Optional adaptations not applied]The three scores, each out of 10, add up to the cultural fit score out of 30. Review the swapped examples and statistics first, since they came from web search.
The locale audit report uses this structure, in markdown by default:
## Multilingual content audit report
### Summary
- Posts audited: [N] across [N] languages
- Overall health: [score] / 100
- Critical issues: [N]
- Warnings: [N]
### Translation coverage
### Issues found (critical, warnings, passed)
### Prioritized fixes
### Stale-translation alerts
### Quick fixesFix critical issues first: mismatched section counts, missing titles or meta descriptions, invalid lang values, missing self-references or return tags, missing hreflang files, and sources edited after translation. Quick fixes point to /claudeblog translate for missing versions, /claudeblog multilingual for regenerating hreflang assets, and /claudeblog localize for weak cultural adaptations.
How to fix common localization problems
Stale translations
For every stale file, the audit prints the refresh command:
- de/[post].md (source updated after translation)
-> Run: /claudeblog translate en/[post].md --to deA fresh translation hasn't been localized yet, so run /claudeblog localize on it again before you publish.
Missing language fields in schema
When the audit flags inLanguage or translationOfWork, add both to the post's JSON-LD. See schema.org's translationOfWork property and our schema markup guide for the rest:
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "[localized headline]",
"inLanguage": "de",
"datePublished": "YYYY-MM-DD",
"translationOfWork": {
"@type": "BlogPosting",
"url": "https://example.com/en/[post]/"
}
}Formats, address, and leftover English
Ask Claude Code to fix scattered format and address problems in one pass:
Read content/de/[post].md. List every date, number, price, and phone number and rewrite each in de-DE format (05.03.2026, 1.234,56, 1.234,56 €, +49). Then list any du forms in a post that should use Sie, plus any English left in alt text, the slug, or tags. Show me the diff before saving.Format problems that come from a template or date library belong in the code, not the content. For the technical side of a multilingual site, such as canonicals and hreflang, see the technical SEO audit feature.
Doing it without the skill
You can do a basic version with plain Claude Code prompts. For localization:
You are localizing content/de/[post].md for readers in Germany (de-DE). It is already translated. Find every element that signals foreign origin: US brand examples, US-only statistics, US laws or regulators, literal idioms, pushy CTAs, prices in US dollars, foreign holidays, and mixed Sie and du. List each with a severity, then rewrite them for the German market. Keep every statistic's source; if there's no local source, keep the original and say where it applies. Keep keywords, headings, and the meta description optimized.For locale QA:
Scan content/ and group posts by language using folder names and the lang frontmatter field. Show a table of which source posts exist in which languages. For each translation, compare H2 and H3 count, FAQ count, image count, and frontmatter fields with the source; check that the title, meta description, alt text, and slug are translated; and flag any translation whose translatedDate is older than the source file's last change.The skills add what's tedious to repeat: built-in market profiles, a severity-ranked cultural audit, a cultural fit score, hreflang and schema checks, freshness rules, a health score out of 100, and a runnable command for every stale file. Both fit into the wider editorial workflow in Claude Blog.
Localization mistakes to avoid
- Using a language code when you target a market.
ptcould mean Brazil or Portugal, and the content differs. Usept-BRorpt-PT. - Swapping a statistic without its source. A local figure needs a named local source; otherwise keep the original and say where it applies.
- Mixing formal and informal address. Pick Sie or du, vous or tu, and hold it for the whole post, CTAs included.
- Leaving English in hidden places. Alt text, slugs, tags, and schema are easy to miss, and the locale audit checks all of them.
- Editing the source and forgetting the translations. Re-run the locale audit after every source update.
Related guides
- Multilingual blog posts with Claude Code, which writes, translates, localizes, and adds hreflang in one command
- Hreflang audit with Claude Code for validating language tags on a live site
- The full skill list for every Claude SEO and Claude Blog command
FAQ
What is the difference between translation and localization?
Translation converts text into another language while keeping its meaning. Localization adapts the translated content for one market: local examples and brands, local laws, the expected level of formality, local calls to action, and local date, number, and currency formats. A localized page reads as if it were written in that market.
Does content localization help SEO?
Yes, in practical ways. Localized titles, meta descriptions, slugs, and alt text match how people in that market search, and local examples, laws, and formats make the page more useful once they arrive. Hreflang then makes sure each market is shown its own version.
Should I use de or de-DE for localized content?
Use a plain language code when one version serves every market that speaks the language. Use a full code like de-DE or de-AT when content differs by country, such as prices, laws, or spelling. The localize command accepts both and asks which market you mean when a code is ambiguous, such as pt.
How often should translations be updated?
Whenever the source changes. The locale audit treats a source updated after its translation as critical and flags translations older than 90 days for review, so run it after each content update.
Can Claude Code localize content automatically?
Yes, with review. The localize command audits a translated post, applies the adaptations, saves the file, and reports what changed with a cultural fit score. Check swapped examples and statistics before publishing, and have a native speaker read the result where you can.