Multi-language SEO: Ultimate Guide

A complete guide on multi-language SEO. Learn how to optimize your multi-language website for SEO. HTML lang, hreflang, sitemaps, and more tips!

I am writing about a few multi-language SEO techniques I learned while optimizing blogs in our blogging platform, Hyvor Blogs, for SEO. I hope this will help you help you optimize your multi-language website, and also understand what Hyvor Blogs does internally for you.

Search engine crawlers are computers that read HTML files to understand their content. So, our job is to make sure to use the correct HTML tags to help them understand. So, most of the optimizations are going to be technical.

Note that if you are using Hyvor Blogs, all of these technical optimizations are in-built. You have nothing to worry. See our language documentation on how to set up multiple langauges on your blog.

Choosing the best site structure for multi-language SEO

If you haven’t already created your multi-language site, there are 3 main structures that you can choose from:

  1. Domain:

  2. Subdomain:

  3. Sub-directory:

Using domains is expensive and hard to manage. In most cases, you can choose between subdomains or sub-directories. The best comparison I found is from Google’s SEO documentation:

Multi-language SEO site strucutre: Domain vs Subdomain vs Sub-directory in multi-language websites
Domain vs Subdomain vs Sub-directory (Source: Google)

At Hyvor Blogs, we use sub-directories for convenience as a SaaS platform. Using subdomains should also be fine in most cases, however, there are a couple of caveats when doing so:

  1. Naming is hard: Let’s say you add a few language-specific subdomains like, Then, if you need to add another different subdomain like there can be confusion in naming subdomains.

  2. SEO is hard: At HYVOR, we use a subdomain for each of our products. Our main domain ( has a strong domain authority which helps us rank our blog posts quite easily. However, when we add a new product to a subdomain (, we have to put a lot of effort to improve the rankings. This is because Google sees each subdomain as a separate site.

For those reasons, I reckon it is a good idea to use sub-directories for each language such as:



HTML lang attribute

You should only use one language per page. Then, let those bots know what language you are using by adding lang attribute to your the <html> element.

For English:

1<html lang="en"></html>

For French:

1<html lang="fr"></html>

You can also use regional variations like fr-BE. I suggest reading the MDN’s guide if you need to learn more about the lang attribute.

So, now the crawler knows the language of the current page.

Note that Google does not use lang attribute to determine the language. Instead, it uses content in the page to determine the language.

hreflang link tags

The next step in multi-language SEO is to let the crawler know about the “variations” of a page. For example, let’s say your blog has three languages: en, fr, and de. On, there should be two <link> tags linking to the other variants:

2<link rel="alternate" hreflang="fr" href="" />
3<link rel="alternate" hreflang="de" href="" />
  • Always use rel=”alternate”

  • hreflang should be set to the lang attribute in those variant pages

  • href is the absolute URL of the page

All <link rel=”alternate”> tags go inside <head> of the page. Also, you should add these tags to all variant pages! For example, the fr the page should have links to en and de pages.

Adding hreflang attribute will help search engines serve the correct page to the correct user.

Update Sitemap

If you are using XML sitemaps, you can update them to help search engine crawlers find translated versions easily. This step is similar to the last step of adding hreflang.

1<?xml version="1.0" encoding="UTF-8"?>
3 xmlns=""
4 xmlns:xhtml=""
8 <loc></loc>
10 <xhtml:link rel="alternate" hreflang="en" href="" />
11 <xhtml:link rel="alternate" hreflang="fr" href="" />
12 <xhtml:link rel="alternate" hreflang="de" href="" />
  • Add xmlns:xhtml="" to <urlset>. This defines the xhtml namespace.

  • Then, use <xhtml:link> tags to define the variants, including the main version!

  • Attributes in <xhtml:link> are the same as <link> in the previous step.

Translate the slug

Slug is the unique part of the URL that identifies the page. For example, the URL of this page is:


The slug is “multi-language-seo”. Using the correct slug is important. You should use the main keyword of your page as the slug. You can see I have done the same in this post. I want this to rank for the keyword “multi-language-seo” in search engines, so I used it as the keyword.

So, in your language variants, it is important to translate your slug as well! For example, the French version of this blog post has the slug “seo-multilingue”, which helps French-speaking people easily find this article on search engines.

From a technical point of view, it may not be possible to do this with many CMSs. If you are using Hyvor Blogs, each variant can be set to use a different slug in post settings.


I hope this article gave you some tips on how to optimize a website or a blog for multi-language SEO. As I mentioned earlier, most of the changes are technical. In addition, you have to obviously translate your content into multiple languages. If possible, try to translate all the texts, navigations, and meta descriptions as well.

Bonus: Use Hyvor Blogs

If you need a platform for multi-language blogging, check out Hyvor Blogs. If you need more details, read our multi-language blogging guide. All these mentioned features are in-built so you do not need to even care about them. In addition, Hyvor Blogs provides:

  • RTL (right-to-left) language support

  • Automatic AI-based translations. You can translate your posts into multiple languages even without a writer/translator by using AI

  • Everything (navigations, descriptions, theme texts) are easily translatable

  • All official themes support multi-languages

If you have any questions, feel free to comment below.