i18n Launch Strategy
Planning the internationalization of your launch — which locales to support at launch, which to add post-launch, and how to structure URLs, hreflang, and content for each locale.
Why
Launching in 9 locales from day 1 multiplies your addressable audience by 5x (English covers ~25% of developers, but en+zh+ja+ko+es+fr+de+pt+ru covers ~85%). Each locale is a separate SEO asset: the /zh/launch pages rank on Baidu and Sogou, the /ja/launch pages rank on Google Japan, the /ru/launch pages rank on Yandex, bringing organic traffic that the /en-only launch never gets. The tradeoff is content cost (each locale needs translated content, not machine-translated), but the launch is the moment to establish the i18n foundation: the URL structure (/[locale]/launch/[slug]), the hreflang tags, and the locale-switcher UI. Adding locales later requires restructuring URLs and re-indexing, which loses the SEO momentum. Launching with i18n from day 1 is 10x cheaper than retrofitting it later.
When
Decide locales at product conception (it affects URL structure); implement the i18n framework during development; translate launch content 2 weeks before launch; verify hreflang and locale-switcher on T-1.
How
1. Choose launch locales based on your audience: for a dev tool, en (global), zh (China, 5M devs), ja (Japan, 1M devs), ko (Korea, 500K devs), es (Spain + LatAm, 2M devs), fr (France + Africa, 1M devs), de (Germany, 1M devs), pt (Brazil + Portugal, 1M devs), ru (Russia + CIS, 1M devs) — 9 locales covering ~85% of developers 2. Structure URLs as /[locale]/launch/[slug]: /launch/[slug] (default en), /zh/launch/[slug], /ja/launch/[slug], etc. — this is the subdirectory structure Google recommends for i18n 3. Set hreflang alternates on every page: <link rel="alternate" hreflang="en" href="/launch/item">, <link rel="alternate" hreflang="zh" href="/zh/launch/item">, etc. for all 9 locales, plus hreflang="x-default" pointing to the en version 4. Translate the launch content (blog post, PH listing, social posts) into each locale — use professional translators for zh/ja/ko (character-based, high quality bar), community translators for es/fr/de/pt/ru (closer to English, lower risk) 5. Build a locale switcher in the nav: a dropdown showing all 9 locales with their flags/names, switching changes the URL to /[locale]/current-path and sets a cookie for future visits 6. For locale-specific content (not just translated): the /zh/launch pages can reference Chinese dev communities (Juejin, V2EX), the /ja/launch pages can reference Qiita — this makes the content native, not just translated 7. Set the Content-Language HTTP header and the <html lang="locale"> attribute on each page — this helps Google serve the right locale to the right user 8. T-1: verify hreflang with Google's International Targeting report in Search Console; test the locale switcher on all 9 locales; confirm no locale returns a 404
Example
# i18n Launch Strategy — ez4code v2.0 ## Locales (9) en (default), zh, ja, ko, es, fr, de, pt, ru Coverage: ~85% of global developers ## URL structure /launch/how-to-launch-on-product-hunt (en, default) /zh/launch/how-to-launch-on-product-hunt (zh) /ja/launch/how-to-launch-on-product-hunt (ja) /ko/launch/how-to-launch-on-product-hunt (ko) ... (9 locales total) ## hreflang (on /launch/how-to-launch-on-product-hunt) <link rel="canonical" href="/launch/how-to-launch-on-product-hunt"> <link rel="alternate" hreflang="en" href="/launch/how-to-launch-on-product-hunt"> <link rel="alternate" hreflang="zh" href="/zh/launch/how-to-launch-on-product-hunt"> <link rel="alternate" hreflang="ja" href="/ja/launch/how-to-launch-on-product-hunt"> <link rel="alternate" hreflang="ko" href="/ko/launch/how-to-launch-on-product-hunt"> <link rel="alternate" hreflang="es" href="/es/launch/how-to-launch-on-product-hunt"> <link rel="alternate" hreflang="fr" href="/fr/launch/how-to-launch-on-product-hunt"> <link rel="alternate" hreflang="de" href="/de/launch/how-to-launch-on-product-hunt"> <link rel="alternate" hreflang="pt" href="/pt/launch/how-to-launch-on-product-hunt"> <link rel="alternate" hreflang="ru" href="/ru/launch/how-to-launch-on-product-hunt"> <link rel="alternate" hreflang="x-default" href="/launch/how-to-launch-on-product-hunt"> ## Locale-specific content /zh/launch: references 掘金, V2EX, WeChat dev groups /ja/launch: references Qiita, Zenn, X (Twitter Japan) /ru/launch: references Habr, VK dev communities ## Translation cost zh/ja/ko: professional ($0.10/word × 1,437 words × 3 = $431) es/fr/de/pt/ru: community ($0.05/word × 1,437 × 5 = $359) Total: $790 for 9-locale launch ## T+90 results en: 3,847 visits/mo zh: 1,200 ja: 680 ko: 340 es: 420 fr: 380 de: 520 pt: 290 ru: 410 Total: 8,087 visits/mo (2.1x en-only)
Common Problems
- ⚠Using machine translation for zh/ja/ko — Chinese, Japanese, and Korean have character-based writing and cultural nuances that machine translation gets wrong; a machine-translated /zh page reads as foreign to Chinese developers and they bounce; use professional translators for these 3 locales.
- ⚠Missing hreflang tags — without hreflang, Google may show the /en/launch page to a Chinese user (who reads English but prefers Chinese) or the /zh/launch page to an English user (who can't read Chinese); hreflang tells Google which version to show to which locale.
- ⚠Using ccTLDs (.cn, .jp) instead of subdirectories — ccTLDs require separate domains, separate DNS, separate SSL, and split your domain authority across 9 domains; subdirectories (/[locale]/) keep all authority on one domain and are Google's recommended approach.
- ⚠No locale-specific content (just translated text) — a /zh/launch page that references Product Hunt and Hacker News (which are blocked in China) is useless to Chinese developers; reference Juejin and V2EX instead; native content beats translated content 3x.
Best Practices
- ✓Use subdirectories (/[locale]/) not ccTLDs — subdirectories keep all domain authority on one domain, are easier to maintain (one codebase, one SSL), and are Google's recommended i18n structure; ccTLDs split authority and add operational complexity.
- ✓Invest in professional translation for zh/ja/ko and community translation for es/fr/de/pt/ru — the character-based languages have high quality bars and cultural nuances; the Latin-script languages are closer to English and lower risk; this optimizes quality per dollar.
- ✓Add locale-specific content, not just translation — reference local communities (Juejin for zh, Qiita for ja, Habr for ru), local examples, and local pricing; native content ranks higher and converts better than translated content.
- ✓Set hreflang on every page and verify with Google Search Console's International Targeting report — hreflang errors (missing return tags, incorrect locale codes) prevent Google from serving the right locale; verify on T-1 and monitor weekly.