How do I run a multi-language blog on VeloCMS?
Practical guide to a multi-language blog on VeloCMS — blog language, AI-generated post translations, hreflang tags, and translated post URLs.
VeloCMS handles a multi-language blog in two layers. Your blog language (Admin → Settings → Language & Locale) controls how dates, numbers, and text direction appear to your readers. Translated posts are separate translation records linked to the original post: each published translation is served at its own address, and VeloCMS adds the matching hreflang tags for search engines automatically. It's not one-click site translation — translations are generated with AI on request and are not visible to readers until you publish them — but the plumbing for correct multi-language SEO is built in.
How do I configure supported languages?
Go to Admin → Settings → Language & Locale (it is not a tab in the Settings strip, so open it by typing Locale in the admin search bar) and pick your Blog Language from the picker. This sets the language your published blog is written and formatted in for readers — dates, numbers, and text direction follow it. The admin panel's own language is separate: switch it from the top bar.
How do I publish a translated post?
A translation is a separate record linked to the original post, generated with AI (Gemini, using your own key if you have added one) into any of 13 languages: English, Spanish, French, German, Italian, Portuguese, Dutch, Japanese, Chinese, Korean, Russian, Arabic, and Turkish. It keeps its own title, slug, body, and SEO fields. Each post's translations live on their own page at /admin/posts/<post ID>/translations — there is no Translations panel inside the post editor. There you generate translations, open one to edit it, and publish or unpublish it. To translate many posts at once, use Admin → Tools → Bulk Translate, which translates all your published posts into one target language, skips posts that are already translated, and stops cleanly when your monthly quota is reached. On Pro the quota is 100 translations a month. Both tools only offer target languages that are enabled for your site: until a language besides the original is enabled, the translations page shows 'No translations' and Bulk Translate shows 'No target languages enabled'.
VeloCMS's AI writing assistant can draft translated versions if you provide the source text and target language in the prompt. It's not one-click translation, but it substantially speeds up the process compared to writing from scratch.
How does hreflang work in VeloCMS?
Once a post has at least one published translation, VeloCMS adds hreflang link tags in the HTML head of the original post and of every published translation. For a post written in English with German and French translations, each of the three pages lists all three versions, and x-default points to the original post. This tells Google which version to serve in which regional search. You don't configure this manually — it is generated from your published translations, and their URLs are included in your sitemap too. A post with no published translation gets no hreflang tags.
What do translated post URLs look like?
You don't choose a pattern. The original post stays at yourdomain.com/blog/post-slug, and each published translation is served at yourdomain.com/blog/post-slug/de — the original post's slug followed by the language code, whatever the translated slug is. That works the same on your VeloCMS subdomain and on a custom domain. There is no per-language subdomain or per-language domain option.
Frequently asked questions
- Does VeloCMS auto-translate posts? Only on request: translations are generated with AI when you use the translations page or Bulk Translate, and nothing is visible to readers until you publish it. The platform handles the translated URLs and hreflang; you review the text.
- Can I have different themes per language? No — the theme applies to the entire blog. You can customize CSS per locale using locale-scoped CSS classes if needed.
- What happens if a post doesn't have a translation in a requested language? The original post at /blog/post-slug is always served. A language address such as /blog/post-slug/de with no published German translation returns a 404 page, and hreflang lists only the languages that are published.
- Can I use right-to-left (RTL) languages? RTL support (Arabic, Hebrew, Persian) is in beta — the editor handles RTL text input, but theme RTL mirroring requires CSS customization.
- Does multi-language affect my member count limits? No — a French reader subscribing counts the same as an English reader toward your plan's member limit.