Start with URLs
Give every language version a stable route
Use a route structure such as /fr/pricing or /de/products/widget. The page should be reachable directly, render the matching language on the server, and remain valid when a crawler requests it without browser cookies or an Accept-Language preference.
- Keep one canonical URL per language version.
- Use stable slugs or a documented localized-slug strategy for dynamic pages.
- Return a real 200 response for every published language route.
app/
[locale]/
products/
[slug]/
page.js
opengraph-image.js
layout.js
sitemap.js
// /fr/products/widget
// /de/products/widget