Contao Multilingual Fallback: What Happens When a Translation Is Missing
Configure language roots and page languages in Contao 4.x/5.x, then verify frontend fallback when a translation is unpublished or missing.
11 Feb 2026, 22:41 UTC

A missing translation should not be a surprise
You publish a German product page and add a French translation, but the Spanish version stays unpublished. A visitor follows the Spanish link and lands on the German page instead of a 404 error. That result is Contao's language fallback: when a requested translation is missing or unpublished, Contao can serve the default-language page instead.
Fallback keeps links alive, but it can also mislead editors who expect a missing translation to remain missing, and it can create duplicate content if search engines index the same page under multiple language URLs.
Treat fallback as a routing safety net, not a translation tool. Configure one default language, create language root pages, assign a language to every page, and verify frontend behavior before launch.
Language roots and page language
Contao stores all pages in one site tree. A language root is a top-level page that marks the beginning of a language branch. Each page has a language property, and frontend modules and content elements inherit that language from the current page. Contao 4.x and 5.x build this on Symfony routing and the Contao page model, so the active language is part of the request context.
When a visitor requests a page, Contao looks for a published page matching the requested language. If no matching page exists, it follows the fallback chain to the default-language page. Fallback does not translate text; it simply serves the default-language content under the requested URL when configured to do so.
Configure languages in the Contao backend
- Log in to the Contao backend as an administrator.
- Open system settings and confirm the installed languages. Set one language as the default, for example German.
- In the site structure, create a top-level page for each language. Open its page properties and set the language field to match the branch—for example, a root page named "Français" with language French.
- Create child pages under each root and assign the same language unless the page intentionally belongs to another branch.
- Publish pages only when the translation and its content elements are ready. Unpublished pages are skipped during fallback.
Menu labels vary between Contao 4.4 LTS, 4.13, and 5.x. If you cannot find a setting, check your version's backend help or changelog before changing the default language on a live site.
Worked example: verify fallback for a missing translation
Assume German is the default language and a French root page exists. A French product page has been created but is currently unpublished.
- Open the frontend in a browser and request the French URL, for example
https://example.com/fr/produkt. - If the French page is published, it should load with French content.
- Unpublish the French page in the backend.
- Request the same URL again.
- Observe whether Contao serves the German fallback page or returns a 404. The result depends on your Contao version and configuration, so verify this on your installation rather than assuming behavior.
Diagnostic check: open the page properties for the French product page and confirm its language and published state. If you have database access, run this read-only query in your database client:
SELECT id, title, language, published
FROM tl_page
WHERE alias = 'produkt'
AND pid = :frRootId;
Run this where your Contao database is accessible, with read-only database permissions. Replace :frRootId with the ID of your French language root page. Expected result: one row showing language fr and published 0 after unpublishing. Risk: never run UPDATE or DELETE directly against tl_page without a backup; direct database changes bypass Contao's cache and validation.
Limitations and version differences
- Fallback does not translate content. Editors must create translated pages and content elements manually.
- SEO URLs, canonical tags, and hreflang for language variants require careful configuration to avoid duplicate content.
- Custom extensions that bypass the Contao page model may not respect language fallback.
- Behavior may differ between Contao 4.4 LTS, 4.13, and 5.x. Review the changelog for your installed version and re-test after updates.
Pre-launch checklist
- Confirm the default language in system settings.
- Make sure every language branch has a published root page.
- Assign a language to every page, not only to root pages.
- Request an unpublished translation URL in an incognito window and confirm whether it falls back or returns 404.
- Inspect the rendered HTML for canonical and hreflang tags on language variants.
- Note your Contao version and repeat the check after any core or extension update.
Fallback is useful, but it works best when editors know exactly when it will trigger. Test the missing-translation path before your visitors do.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.