Hreflang for Chinese: zh-Hans, zh-Hant, and Regional Codes

How to set up hreflang tags for Chinese-language content. Covers zh-Hans, zh-Hant, zh-CN, zh-TW, zh-HK, and when to use script subtags vs. region codes.

Chinese hreflang is one of the more confusing cases in international SEO. Unlike most languages, Chinese has two distinct writing systems: Simplified and Traditional. These are not regional accents or minor spelling differences. They are fundamentally different character sets, and getting the codes wrong means Google will serve the wrong version of your content to millions of users. For a general overview of how hreflang works, see our complete hreflang guide.

This guide walks through the codes, when to use script subtags versus region codes, and how to implement hreflang for Chinese content correctly.

Simplified vs. Traditional Chinese

Before getting into the technical codes, it helps to understand what you are actually dealing with.

Simplified Chinese (simplified characters) is the standard writing system in mainland China, Singapore, and Malaysia. The Chinese government introduced simplified characters in the 1950s and 1960s to improve literacy rates. They use fewer strokes per character.

Traditional Chinese is used in Taiwan, Hong Kong, and Macau. These are the original, unreduced character forms that have been in use for thousands of years.

The two are not interchangeable. A reader of Traditional Chinese can often puzzle through Simplified text, and vice versa, but it is not a comfortable experience. For websites, you need to serve the correct version to the correct audience.

Beyond the writing system, there are also vocabulary and phrasing differences between regions. Taiwanese Mandarin, Hong Kong Cantonese-influenced Chinese, and mainland Mandarin all have distinct expressions, much like American English and British English differ in word choice.

The Code System for Chinese Hreflang

Chinese hreflang codes can use two different approaches: script subtags and region codes. This is where most confusion happens.

Script Subtags: zh-Hans and zh-Hant

The IETF BCP 47 language tag standard allows script subtags that identify the writing system:

| Code | Meaning | |---|---| | zh-Hans | Chinese, Simplified script | | zh-Hant | Chinese, Traditional script |

These codes specify the writing system without tying the content to a specific country. Use zh-Hans when your Simplified Chinese content is not tailored to any particular region. Use zh-Hant when your Traditional Chinese content is generic and not specific to Taiwan or Hong Kong.

Region Codes: zh-CN, zh-TW, zh-HK

You can also use region codes to target specific countries:

| Code | Meaning | |---|---| | zh-CN | Chinese for mainland China | | zh-TW | Chinese for Taiwan | | zh-HK | Chinese for Hong Kong | | zh-SG | Chinese for Singapore |

Region codes imply the script. zh-CN implies Simplified Chinese because that is what mainland China uses. zh-TW implies Traditional Chinese because that is what Taiwan uses. zh-HK implies Traditional Chinese because that is what Hong Kong uses.

Combined Codes: zh-Hans-CN, zh-Hant-TW

You can combine script subtags and region codes for maximum specificity:

| Code | Meaning | |---|---| | zh-Hans-CN | Simplified Chinese for mainland China | | zh-Hant-TW | Traditional Chinese for Taiwan | | zh-Hant-HK | Traditional Chinese for Hong Kong | | zh-Hans-SG | Simplified Chinese for Singapore |

In practice, the combined form is rarely necessary for hreflang. Google understands that zh-CN means Simplified and zh-TW means Traditional. The combined codes are valid but add complexity without much benefit.

Which Codes Should You Use?

The answer depends on how many Chinese versions of your content you maintain.

One Simplified + One Traditional version

This is the most common scenario. You have content in Simplified Chinese and content in Traditional Chinese, but you have not localized for specific regions within each script.

Use zh-Hans and zh-Hant:

<link rel="alternate" hreflang="en" href="https://example.com/en/page/" />
<link rel="alternate" hreflang="zh-Hans" href="https://example.com/zh-hans/page/" />
<link rel="alternate" hreflang="zh-Hant" href="https://example.com/zh-hant/page/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/page/" />

This tells Google: serve the Simplified version to users who prefer Simplified Chinese (regardless of country) and the Traditional version to users who prefer Traditional Chinese. This is clean, simple, and correct for most sites.

Region-specific versions

If your content differs by region beyond just the writing system (different products, pricing, legal terms, or localized vocabulary), use region codes:

<link rel="alternate" hreflang="en" href="https://example.com/en/page/" />
<link rel="alternate" hreflang="zh-CN" href="https://example.com/zh-cn/page/" />
<link rel="alternate" hreflang="zh-TW" href="https://example.com/zh-tw/page/" />
<link rel="alternate" hreflang="zh-HK" href="https://example.com/zh-hk/page/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/page/" />

With this setup, users in mainland China see the zh-CN version, users in Taiwan see zh-TW, and users in Hong Kong see zh-HK. Users in Singapore or Malaysia who prefer Chinese will not have an exact match. Google will use its best judgment to pick one.

Region-specific with a fallback

To cover all bases, include script subtags as fallbacks alongside region codes:

<link rel="alternate" hreflang="en" href="https://example.com/en/page/" />
<link rel="alternate" hreflang="zh-Hans" href="https://example.com/zh-hans/page/" />
<link rel="alternate" hreflang="zh-CN" href="https://example.com/zh-cn/page/" />
<link rel="alternate" hreflang="zh-Hant" href="https://example.com/zh-hant/page/" />
<link rel="alternate" hreflang="zh-TW" href="https://example.com/zh-tw/page/" />
<link rel="alternate" hreflang="zh-HK" href="https://example.com/zh-hk/page/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/page/" />

Here, zh-Hans catches Simplified Chinese users not in mainland China (Singapore, Malaysia), and zh-Hant catches Traditional Chinese users not in Taiwan or Hong Kong (Macau, overseas communities). This is the most thorough approach but requires maintaining separate fallback pages.

How Google Handles zh Codes

Google's documentation confirms that it supports BCP 47 language tags, which includes script subtags. In practice, Google is reasonably good at matching Chinese users with the correct version, but there are some things to know.

Google uses the user's language preference, not just their location. A user in the United States with their browser set to Traditional Chinese will match zh-Hant or zh-TW content. Location is a secondary signal.

zh alone is ambiguous. Using just zh without a script or region subtag does not tell Google which writing system your content uses. Google may try to determine this from the page content itself, but it is better to be explicit. Always include either a script subtag (zh-Hans, zh-Hant) or a region code (zh-CN, zh-TW).

Google treats zh-CN as implying Simplified and zh-TW as implying Traditional. You do not need to add the script subtag on top of the region code for Google to understand the writing system.

Hong Kong: Traditional Chinese with Local Differences

Hong Kong uses Traditional Chinese, but Hong Kong Chinese has distinct vocabulary influenced by Cantonese and English. Some examples:

| Mainland China (Simplified) | Taiwan (Traditional) | Hong Kong (Traditional) | English | |---|---|---|---| | 出租车 | 計程車 | 的士 | taxi | | 软件 | 軟體 | 軟件 | software | | 博客 | 部落格 | 博客 / 網誌 | blog |

If you serve a Hong Kong audience, these differences may matter for product pages, marketing copy, and customer-facing content. For informational content, the Taiwan Traditional Chinese version is usually close enough.

If you do create a separate Hong Kong version, use zh-HK as shown in the examples above.

Singapore and Malaysia

Singapore and Malaysia use Simplified Chinese, but with local vocabulary differences compared to mainland China. Most sites do not create separate versions for these markets. The zh-Hans fallback handles them well.

If you do need a Singapore-specific version, use zh-SG. For Malaysia, the ISO code is zh-MY, though this is very rarely used in practice.

Common Mistakes with Chinese Hreflang

Using just zh without a script or region subtag

This is the most frequent error. zh alone does not specify which writing system the content uses. Google has to guess, and it may guess wrong. Always use zh-Hans, zh-Hant, zh-CN, zh-TW, or another specific code.

Confusing zh-Hans with zh-CN

zh-Hans means "Chinese in Simplified script, no specific region." zh-CN means "Chinese for China." They are not the same. If your Simplified Chinese content is written for a global audience and not specifically for mainland China, zh-Hans is more appropriate. If it is specifically for China (with China-specific pricing, references to local services, etc.), use zh-CN.

Missing return links

Like all hreflang implementations, Chinese hreflang tags must be bidirectional. If your English page references your zh-Hans page, the zh-Hans page must reference the English page back. Missing return links are the most common hreflang error across all languages. See our troubleshooting guide for more on diagnosing this.

Serving the same content with different codes

If your zh-CN page and zh-Hans page are identical (same URL or same content), do not list both in hreflang. Google may see this as conflicting signals. Either maintain genuinely different pages for each code or pick one code and use that.

Forgetting self-referencing tags

Every page in a hreflang set must include a tag pointing to itself. The zh-Hant page must include hreflang="zh-Hant" with its own URL. This applies to all pages in the set, not just the alternates. For a full list of valid codes, see our hreflang language codes reference.

Implementation in XML Sitemaps

For large sites, implementing hreflang in XML sitemaps is often more practical than adding link tags to every page. Here is an example for a page with English, Simplified Chinese, and Traditional Chinese versions:

<url>
  <loc>https://example.com/en/page/</loc>
  <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/page/" />
  <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://example.com/zh-hans/page/" />
  <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://example.com/zh-hant/page/" />
  <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/page/" />
</url>

Each URL in the set needs its own <url> block with the full set of xhtml:link entries. For details on sitemap-based hreflang, see our guide on hreflang in XML sitemaps.

What does zh-Hant actually mean?

"zh" is the ISO 639-1 code for Chinese. "Hant" is the ISO 15924 script code for Traditional Chinese characters (from "Han Traditional"). "Hans" stands for "Han Simplified." These are not country codes. They identify the writing system itself, which is why they are useful when your content is not region-specific.

Testing Your Chinese Hreflang Setup

After implementation, validate your tags to catch errors before Google does.

  1. Check that every page in the set includes all hreflang tags, including a self-referencing one
  2. Verify that all URLs in the tags are absolute (not relative)
  3. Confirm that return links are present on every page
  4. Test that each URL returns a 200 status code (not a redirect)
  5. Validate that the language code matches the actual content on the page

Google Search Console will report hreflang errors in the International Targeting section, but it can take weeks to surface issues. Manual validation catches problems faster. For a thorough review process, see our hreflang troubleshooting guide.

Summary

For most sites, Chinese hreflang comes down to a simple choice: use zh-Hans and zh-Hant if your content is not region-specific, or use zh-CN, zh-TW, and zh-HK if you have country-specific versions. Do not use zh alone. Make sure every page has self-referencing tags and return links. And always verify that the writing system on the page matches the code in the tag.

Generate hreflang tags for your Chinese content

Enter your URLs, select your language variants, and get copy-paste-ready hreflang tags.

Try Hreflang Generator