Bilingual SEO is where most Korean-American business websites go wrong — not in the visible content, but in the invisible metadata. A beautiful, professionally-written Korean page that uses the wrong hreflang value or conflicts with a canonical tag will fail to rank even if the content itself is excellent. This guide is the technical playbook we follow at ZOE LUMOS when building bilingual sites. If you are a developer, a technical founder, or working with one, this is the part of SEO that gets skipped in most guides.
What bilingual SEO actually means
Bilingual SEO is Google's ability to understand that your website has content in two languages, treat each language version as a separate-but-related page, serve the right version to the right searcher, and avoid penalizing you for duplicate content (which is what happens when you handle this wrong). The three technical pillars: URL structure, hreflang annotations, and canonical tags. Get all three right and bilingual SEO works invisibly. Get any one of them wrong and Google gets confused — usually in ways that crash your organic traffic.
URL structure — the foundational decision
The first decision in any bilingual site is URL structure. The three common patterns:
- Subdirectories: example.com/ko/... (recommended) — simplest to manage, inherits domain authority, easy hreflang setup
- Subdomains: ko.example.com — more complex, treated as somewhat separate domain, split authority
- Country TLDs: example.kr — only if you need Korea-specific targeting and have real infrastructure in Korea
For 99% of Korean-American businesses, subdirectories (/ko/) are the right choice. This is what ZOE LUMOS uses by default, and it is what Google itself recommends. It also simplifies Next.js app router implementation significantly.
hreflang annotations — the most misunderstood feature
hreflang is an HTML annotation that tells Google: "This page has an alternate version in language X at URL Y." Without hreflang, Google may serve the Korean version to an English searcher or vice versa. With wrong hreflang, Google may ignore both versions or treat them as duplicates. The correct implementation:
Every page should include hreflang tags for itself, every other language version, and an x-default fallback. For example, on /about in English, the headers should include: link rel="alternate" hreflang="en" href="/about" | link rel="alternate" hreflang="ko" href="/ko/about" | link rel="alternate" hreflang="x-default" href="/about". On /ko/about, the exact same three tags — they must be reciprocal.
The reciprocity rule — where most sites break
hreflang is reciprocal by design. If /about says "/ko/about is my Korean version" but /ko/about does not say "/about is my English version", Google will treat both as unreliable and may ignore the hreflang entirely. Every single page needs the same set of hreflang tags across all language versions. Tools to verify: screaming-frog, ahrefs site audit, or Google's built-in Search Console International Targeting report.
x-default — the fallback you probably got wrong
The x-default value tells Google "use this page for any searcher whose language does not match a specific version." For most bilingual Korean-English sites, x-default should point to the English version — but it is optional. What you should NOT do: set x-default to Korean, or skip it entirely, or set it to a language-selector landing page (Google specifically discourages this). Set x-default to English. This is what Google assumes when you have English as your primary market.
Canonical tags — how they interact with hreflang
A canonical tag tells Google: "This is the authoritative URL for this content." For bilingual sites, each language version should be its own canonical — NOT pointing to the other language. The Korean page is canonical to itself; the English page is canonical to itself. This is the single most common mistake we see. We fixed this exact bug on zoelumos.com in March 2026: a layout-level canonical was being emitted on every page that pointed to the root URL, overriding every page's own canonical. After fixing it, indexation problems across 20+ pages resolved within weeks.
The mental model: hreflang tells Google "this page has language variants at these URLs." Canonical tells Google "the authoritative URL for THIS content is X." The two coexist. Each language page canonicals to itself and hreflangs its language variants.
Next.js app router — the practical implementation
If you are building on Next.js 14+ with the app router, the cleanest implementation is to put alternates only in page-level generateMetadata, never in the layout. The layout gets inherited by every page inside it, so any layout-level canonical or hreflang will be applied to every page — and will conflict with page-level ones.
Per-page alternates object: { canonical: "/[locale]/page-slug", languages: { "x-default": "/page-slug", "en": "/page-slug", "ko": "/ko/page-slug" } }. The metadataBase in the root layout handles absolute URL conversion automatically.
💡 Tip
Pro Tip: Use Google Search Console's URL Inspection tool to manually verify the canonical Google sees for each important page. If it does not match what you expect, your hreflang or canonical setup is broken somewhere. Fix it before doing any other SEO work.
Language-specific content — not just translation
Even with perfect hreflang, Google will not rank Korean pages well if the Korean content is machine-translated from English. Google's quality signals detect translation artifacts, and Korean-language users bounce quickly from bad translations. Write Korean content for Korean searchers — different keywords, different cultural references, different structure. The Korean version of a restaurant's menu page is not a translation of the English version; it is a Korean-native menu description that happens to describe the same food.
Sitemap with alternates
Submit a sitemap to Google that includes hreflang annotations. Next.js can generate this with MetadataRoute.Sitemap. Each URL should include its alternates: { url: "/about", alternates: { languages: { en: "/about", ko: "/ko/about" } } }. This redundantly confirms language relationships for Google.
Testing your bilingual SEO
Use these tools to verify your setup: 1) Google Search Console → URL Inspection → verify canonical and indexed status for both language versions, 2) Aleyda Solis' hreflang tags testing tool (hreflangstags.com) for annotation validation, 3) Screaming Frog SEO Spider for full-site hreflang audit, 4) SEMrush or Ahrefs site audit for language-aware crawling. Run these quarterly at minimum.
ZOE LUMOS builds every bilingual website with technically correct hreflang, canonicals, and sitemap alternates baked in from day one. If your existing bilingual site is underperforming, we offer audits that uncover these technical errors — often the root cause of low traffic that stubbornly refuses to improve.
Get a Free Consultation →