
Hugo is the best tool for building websites in multiple languages. It comes with everything you need built in: support for multiple languages, automatic page URLs per language, right-to-left text, translation of buttons and labels, and the ability to run each language on its own domain. You do not need to install any extra packages or configure third-party tools to get any of this working. Hugo has supported multilingual sites since an early version of the framework and has been used in production for years across documentation sites, corporate platforms, and government websites. If your team needs to publish in more than one language, Hugo is the only framework where that multilingual (i18n) support is a first-class, out-of-the-box feature.
TL;DR: Hugo handles everything a multilingual website needs through a single settings file. No extra tools required.
Key Takeaways
- Hugo has built-in multilingual support with no plugins and no third-party tools needed
- Adding a new language is just adding a few lines to your settings file
- Hugo automatically generates the correct URL for each language version of a page
- Right-to-left languages like Arabic, Hebrew, and Farsi are supported through a single setting
- Hugo produces a fully static website that runs on any host, globally, with no server required
What is a multilingual (i18n) website?
Developers often use the shorthand i18n, which stands for "internationalization" (there are 18 letters between the i and the n). It refers to designing and building a website so it can be adapted for different languages and regions. A multilingual website puts that into practice by serving the same content in two or more languages, with each language getting its own set of pages and its own web address structure. For example, your English homepage might sit at yoursite.com/en/ while the French version sits at yoursite.com/fr/. Each version also needs its own translated navigation, page titles, and button labels, not just the main body text. Search engines like Google and Bing need specific signals to understand which language version of a page to show to which visitor. Getting all of this right manually is a lot of work. Hugo handles most of it automatically.
What makes multilingual websites hard to build?
Six things make multilingual websites genuinely difficult to manage:
- Keeping pages in sync: Every page needs a version in each language, and when you update one, the others need to stay consistent.
- Page addresses: Each language needs its own clean web address, generated automatically, without you having to set up each one by hand.
- Translated interface text: Buttons, menu items, page titles, and other labels need to be translated separately from your main content.
- Search engine signals: Google and Bing need a special tag on each page to know which language version to show in which country's search results.
- Right-to-left languages: Arabic, Hebrew, and Farsi read from right to left, which requires the whole page layout to flip direction. This affects design, code, and content all at once.
- Managing it at scale: Handling two languages across ten pages is manageable. Handling six languages across five hundred pages with regular updates is a serious operational challenge.
Hugo addresses all six of these out of the box. Most other frameworks require you to piece together a solution from separate tools.
How Hugo solves each of those challenges
Hugo has had multilingual support built in since an early version of the framework, and each of the six challenges above has a direct solution that requires no extra installation.
Challenge 1: Keeping pages in sync
Hugo automatically tracks which pages belong together across languages. You have two simple ways to organise your translated content:
Option A: Name your files by language
Keep all your content in one folder and add the language code to the filename:
content/
about.en.md (English version)
about.fr.md (French version)
about.ar.md (Arabic version)
Option B: Separate folders per language
Give each language its own folder:
content/
en/
about.md
fr/
about.md
ar/
about.md
Either way, Hugo automatically knows that these pages are translations of each other and keeps them linked. This is what allows features like a language switcher to work without any custom code.
Challenge 2: Managing scale
Adding a new language to a Hugo site is just adding a few lines to your settings file. You do not need to touch your code, reconfigure your server, or install anything. All language settings live in one place, which makes the setup easy to read, update, and hand off to another team member.
Here is a simplified view of what that looks like with three languages:
English: title = "My Site"
French: title = "Mon Site"
Arabic: title = "موقعي" + right-to-left enabled
Two languages or twenty, the process is the same.
Challenge 3: Translated interface text
Hugo has a built-in system for managing translated labels, buttons, and navigation items separately from your page content. You create a simple translation file for each language and Hugo handles the rest. No third-party package required.
Challenge 4: Page addresses per language
Hugo generates the correct web address for each language version of every page automatically. A French about page becomes /fr/about/. An Arabic about page becomes /ar/about/. You do not configure these individually. Hugo reads your language settings and generates all the URLs itself.
Challenge 5: Search engine signals
When a visitor searches in French, Google needs to know to show them the French version of your page, not the English one. Hugo gives you the built-in tools to generate the correct search engine signals across all your language versions. Most multilingual Hugo themes include this automatically. If you are building a custom theme, the tools are ready to use.
Challenge 6: Right-to-left languages
Supporting Arabic, Hebrew, Farsi, or Urdu is a single setting in Hugo. You mark the language as right-to-left in your settings file, and your page templates can read that setting to adjust the layout automatically. No separate build, no custom code required.
Beyond the basics: running each language on its own domain
For larger deployments, Hugo also lets you run each language on a completely separate web address. English on en.yoursite.com, French on fr.yoursite.com. This is configured in the same settings file and requires no server changes.
How do you add a new language to a Hugo site?
Adding a new language to an existing Hugo site takes five steps:
- Open your Hugo settings file
- Add a new language entry with a display name and a sort order, plus a right-to-left flag if needed
- Create a folder for the new language under your content directory, or start naming new files with the language code
- Create a translation file for the new language with your interface labels
- Start the Hugo server. Hugo generates all the new language page addresses automatically.
No package installation. No server changes. No build pipeline updates.
How does Hugo compare to Astro and Next.js?
Hugo vs Astro
Astro is a modern framework well suited for content-focused websites. It added stable multilingual routing in version 4.0 (December 2023), having first tested it as an experimental feature in version 3.5. It is a solid choice. However, translating interface text and generating the correct search engine signals still require custom setup in Astro, whereas Hugo handles both out of the box. Astro is now backed by Cloudflare, which acquired the Astro Technology Company on January 16, 2026. The framework remains open source and platform-agnostic.
Hugo vs Next.js
Next.js is a framework designed primarily for web applications rather than content sites. It is powerful for dynamic, application-like projects. However, the version of Next.js that most teams use today (the App Router, introduced in Next.js 13) removed its built-in multilingual routing. Teams need to install and configure a separate tool to get multilingual routing working again. For a site where multilingual support is a core requirement, that extra step is unnecessary overhead.
At a glance
| Feature | Hugo | Astro | Next.js (App Router) |
|---|---|---|---|
| Built-in multilingual (i18n) support | Yes, from early versions | Stable since v4.0 | Removed, needs extra tool |
| Translated labels and buttons | Built in | Needs custom setup | Needs extra tool |
| Automatic language page URLs | Yes | Yes (v4.0+) | Needs extra tool |
| Search engine language signals | Built-in tools | Needs custom setup | Needs extra tool |
| Right-to-left language support | One setting | Manual setup | Manual setup |
| Each language on its own domain | Supported | Not built in | Not built in |
| Server required | No | No (mostly) | Depends on setup |
| Interactive components | Limited | Strong | Full |
| Best for | Content and publishing sites | Interactive content sites | Web applications |
Bottom line for teams publishing in multiple languages: Hugo requires the least setup and has the most complete built-in support.
When is Hugo the right choice?
Hugo is a strong fit when:
- Your site is primarily about publishing content: a blog, documentation, a marketing site, a news site, a corporate site, or a government website
- You need to add or update languages without involving an engineer every time
- You want your multilingual setup to be simple enough that a non-technical person could read and understand the configuration
- You need right-to-left language support without writing custom layout code
- You want to host the site on a CDN or simple static hosting with no server to manage
Smashing Magazine, one of the web's largest design and development publications, migrated from WordPress to Hugo in 2017 and has run on it at full scale ever since.
When is Hugo not the right choice?
Hugo generates the same pages for every visitor. That is what makes it fast and simple. But it also means there are things Hugo cannot do:
- Personalised content: If your site needs to show different content to different logged-in users, Hugo cannot do that on its own.
- Real-time data: If pages need to show live information like current prices, stock levels, or live scores, Hugo is not the right fit. It builds pages once at deploy time, not on every visitor request.
- Complex interactive features: Hugo can use JavaScript, but it does not have a built-in component system like React or Vue. If your site needs rich interactive features, you will need to bring extra tooling.
- JavaScript or TypeScript teams: Hugo uses its own template language based on Go. If your whole team works in JavaScript or TypeScript, there will be a learning curve.
If any of these apply to your project, a different framework will serve you better. That is not a criticism of Hugo, it simply has a clear and intentional scope.
What are your alternatives?
Astro is worth considering if you want a content-first site but your team prefers working in JavaScript and React, Vue, or Svelte components, or if your site needs interactive elements alongside the content. Its multilingual routing is solid since v4.0. You will need to do more manual setup for translated labels and search engine signals compared to Hugo. Astro is open source and backed by Cloudflare since January 2026.
Next.js is worth considering if your project is more of a web application than a publishing site. If you need user accounts, personalised content, or data that updates on every page load, Next.js and the React ecosystem are well suited for that. Just be aware that multilingual routing requires installing a separate tool since the current version of Next.js removed that feature from its built-in setup.
Conclusion
Hugo is the most complete ready-to-use solution for multilingual websites available today. Every major challenge of publishing in multiple languages, from keeping pages in sync to right-to-left layout support, is handled through a single settings file without any extra tools or packages.
Astro is a strong alternative for teams that want modern JavaScript tooling alongside multilingual content, and has solid long-term backing from Cloudflare. Next.js is the right call when the project needs dynamic, per-user content rather than static publishing.
For teams whose goal is to publish content in multiple languages with the least friction possible, Hugo is the clear choice. The setup is simple, the build is fast, and the multilingual support has been production-tested for nearly a decade.
FAQ
Does Hugo support right-to-left languages like Arabic or Hebrew?
Yes. You add one setting to your language configuration to mark it as right-to-left. Your page templates can then read that setting to adjust the layout, text direction, and styling automatically. Arabic, Hebrew, Farsi, and Urdu are all supported this way.
Does Hugo automatically set up search engine language signals?
Almost. Hugo gives you all the tools needed to generate the correct search engine signals, but whether they appear on your site depends on your theme. Most multilingual Hugo themes include them by default. If you are building a custom theme, the tools are there and ready to use.
Can Hugo run each language on its own domain?
Yes. You can assign a separate web address to each language in your settings file. English on en.yoursite.com, French on fr.yoursite.com. No server configuration required.
What happens if a page has not been translated yet?
Hugo either shows the default language version of that page or simply does not include it in the untranslated language, depending on how you have configured it. It also supports fallback text for interface labels when a translation is missing.
Can Hugo handle a large site with hundreds of pages in multiple languages?
Yes. Hugo is known for its build speed. Even large sites with hundreds of pages across many languages build in seconds. This matters for teams that publish frequently or use automated deployment pipelines.
Do you need a server to host a Hugo multilingual site?
No. Hugo produces a fully static website, meaning plain HTML, CSS, and JavaScript files. There is no server required. You can host it on any static hosting provider or CDN, including Cloudflare Pages, Netlify, or AWS, typically for free or at very low cost.
Which of Hugo's two content organisation methods should you use?
If your site is smaller or you prefer keeping everything in one folder, use the filename method (for example about.en.md and about.fr.md). If your site is larger or you want each language to feel like its own organised section, use the folder method (for example en/about.md and fr/about.md). Both produce the same result.
Is Hugo hard to learn?
Hugo has its own template language, which takes some getting used to, especially if you are coming from a JavaScript-heavy background. The multilingual configuration itself is straightforward and well-documented. The official Hugo documentation at gohugo.io covers everything you need and is actively maintained.