\n\n### Describe the bug\n\nWith the default settings and `experimental.typedPages: true` the generated types are not correctly picked up.\n\nIf I rename `RouteNamedMapI18n` to `RouteNamedMap` the types are available.\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell\n\n```",[3188],{"name":3175,"color":3176},3771,"useRoute needs suffix to work","2025-08-05T16:28:06Z","https://github.com/nuxt-modules/i18n/issues/3771",0.68668914,{"description":3195,"labels":3196,"number":3201,"owner":3178,"repository":3179,"state":3180,"title":3202,"updated_at":3203,"url":3204,"score":3205},"### Environment\n\nnpx nuxi info\nWorking directory: C:/Users/senem/MEM22 nuxi 01:42:27\nNuxt project info: (copied to clipboard) nuxi 01:42:27\n\n------------------------------\n- Operating System: Windows_NT\n- Node Version: v20.19.4\n- Nuxt Version: 3.17.7\n- CLI Version: 3.26.2\n- Nitro Version: 2.12.3\n- Package Manager: npm@10.8.2\n- Builder: -\n- User Config: compatibilityDate, devtools, ssr, app, pages, modules, css, postcss, supabase, vite, sourcemap, routeRules, nitro, site, sitemap, plugins, headers, i18n\n- Runtime Modules: @nuxtjs/i18n@10.0.3, @nuxt/eslint@1.6.0, @nuxt/icon@1.15.0, @nuxt/image@1.10.0, @nuxtjs/tailwindcss@6.14.0, @nuxtjs/supabase@1.5.3, @nuxtjs/sitemap@7.4.3\n- Build Modules: -\n------------------------------\n\n👉 Report an issue: https://github.com/nuxt/nuxt/issues/new?template=bug-report.yml\n👉 Suggest an improvement: https://github.com/nuxt/nuxt/discussions/new\n👉 Read documentation: https://nuxt.com\n\n### Reproduction\n\nhttps://github.com/EnsMsgLu/nuxt-i18n-issue\n\n### Describe the bug\n\nit doesnt working with subdomains \n\n\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell\n\n```",[3197,3198],{"name":3175,"color":3176},{"name":3199,"color":3200},"need reproduction","CD234A",3767,"Its not working Home page on Subdomain","2025-07-31T10:28:33Z","https://github.com/nuxt-modules/i18n/issues/3767",0.6994617,{"description":3207,"labels":3208,"number":3210,"owner":3178,"repository":3179,"state":3180,"title":3211,"updated_at":3212,"url":3213,"score":3214},"### Environment\n\n------------------------------\n- Operating System: Linux\n- Node Version: v20.19.1\n- Nuxt Version: 3.17.5\n- CLI Version: 3.25.1\n- Nitro Version: 2.11.12\n- Package Manager: npm@10.8.2\n- Builder: -\n- User Config: devtools, modules, i18n, compatibilityDate\n- Runtime Modules: @nuxtjs/i18n@9.5.5\n- Build Modules: -\n------------------------------\n\n### Reproduction\n\nhttps://stackblitz.com/edit/bobbiegoede-nuxt-i18n-starter-22qdkwcy?file=pages%2Findex.vue\n\n### Describe the bug\n\nWhen using anchor links like: `yourwebsite.xyz#section2` with the component: `SwitchLocalePathLink`.\nIs resulting in Hydration mismatch: \n\n```\nruntime-core.esm-bundler.js:51 [Vue warn]: Hydration attribute mismatch on \n - rendered on server: href=\"/\"\n - expected on client: href=\"/#anchor\"\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch. \n at \u003CRouterLink ref=fn to=\"/#anchor\" activeClass=undefined ... > \n at \u003CNuxtLink to=\"/#anchor\" > \n at \u003CSwitchLocalePathLink locale=\"en\" > \n at \u003CIndex onVnodeUnmounted=fn\u003ConVnodeUnmounted> ref=Ref\u003C undefined > > \n at \u003CRouteProvider key=\"/\" vnode= \nObject\n route= \nObject\n ... > \n at \u003CRouterView name=undefined route=undefined > \n at \u003CNuxtPage > \n at \u003CApp key=4 > \n at \u003CNuxtRoot>\n```\n\n### Additional context\n\n1. Go on the reproduction page: [https://stackblitz.com/edit/bobbiegoede-nuxt-i18n-starter-22qdkwcy?file=pages%2Findex.vue](https://stackblitz.com/edit/bobbiegoede-nuxt-i18n-starter-22qdkwcy?file=pages%2Findex.vue).\n\n2. Add `#anchor` at the end of the URL in the preview and hard reload the page.\n\n3. Open the console with F12\n\n\n### Logs\n\n```shell\nruntime-core.esm-bundler.js:51 [Vue warn]: Hydration attribute mismatch on \n \n - rendered on server: href=\"/\"\n - expected on client: href=\"/#anchor\"\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch. \n at \u003CRouterLink ref=fn to=\"/#anchor\" activeClass=undefined ... > \n at \u003CNuxtLink to=\"/#anchor\" > \n at \u003CSwitchLocalePathLink locale=\"en\" > \n at \u003CIndex onVnodeUnmounted=fn\u003ConVnodeUnmounted> ref=Ref\u003C undefined > > \n at \u003CRouteProvider key=\"/\" vnode= \nObject\n route= \nObject\n ... > \n at \u003CRouterView name=undefined route=undefined > \n at \u003CNuxtPage > \n at \u003CApp key=4 > \n at \u003CNuxtRoot>\n\nruntime-core.esm-bundler.js:51 [Vue warn]: Hydration attribute mismatch on \n \n - rendered on server: href=\"/nl\"\n - expected on client: href=\"/nl#anchor\"\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch. \n at \u003CRouterLink ref=fn to=\"/nl#anchor\" activeClass=undefined ... > \n at \u003CNuxtLink to=\"/nl#anchor\" > \n at \u003CSwitchLocalePathLink locale=\"nl\" > \n at \u003CIndex onVnodeUnmounted=fn\u003ConVnodeUnmounted> ref=Ref\u003C undefined > > \n at \u003CRouteProvider key=\"/\" vnode= \nObject\n route= \nObject\n ... > \n at \u003CRouterView name=undefined route=undefined > \n at \u003CNuxtPage > \n at \u003CApp key=4 > \n at \u003CNuxtRoot>\n\nruntime-core.esm-bundler.js:51 [Vue warn]: Hydration attribute mismatch on \n \n - rendered on server: href=\"/ja\"\n - expected on client: href=\"/ja#anchor\"\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch. \n at \u003CRouterLink ref=fn to=\"/ja#anchor\" activeClass=undefined ... > \n at \u003CNuxtLink to=\"/ja#anchor\" > \n at \u003CSwitchLocalePathLink locale=\"ja\" > \n at \u003CIndex onVnodeUnmounted=fn\u003ConVnodeUnmounted> ref=Ref\u003C undefined > > \n at \u003CRouteProvider key=\"/\" vnode= \nObject\n route= \nObject\n ... > \n at \u003CRouterView name=undefined route=undefined > \n at \u003CNuxtPage > \n at \u003CApp key=4 > \n at \u003CNuxtRoot>\n```",[3209],{"name":3175,"color":3176},3701,"SwitchLocalePathLink hydration mismatch when using anchor links","2025-06-23T15:33:18Z","https://github.com/nuxt-modules/i18n/issues/3701",0.7008395,{"description":3216,"labels":3217,"number":3219,"owner":3178,"repository":3179,"state":3180,"title":3220,"updated_at":3221,"url":3222,"score":3223},"### Environment\n\n------------------------------\n- Operating System: Windows_NT\n- Node Version: v19.9.0\n- Nuxt Version: 3.17.3\n- CLI Version: 3.25.1\n- Nitro Version: 2.11.12\n- Package Manager: npm@9.6.3\n- Builder: -\n- User Config: modules, i18n, tailwindcss, css, plugins, devtools, compatibilityDate, runtimeConfig, vite, nitro\n- Runtime Modules: @geeks.solutions/nuxt-sections@3.0.1, @nuxt/image@1.10.0, @nuxtjs/i18n@9.5.4, @nuxtjs/tailwindcss@6.14.0, nuxt-lazytube@0.2.2, nuxt3-leaflet@1.0.13, @pinia/nuxt@0.11.0\n- Build Modules: -\n------------------------------\n\n\n### Reproduction\n\n* nuxt.config.ts\n\n```ts\nexport default defineNuxtConfig({\n ...(process.env.NODE_ENV === 'development' && {\n devServer: {\n https: {},\n host: '0.0.0.0',\n port: 443,\n }\n }),\n modules: [\n \"@geeks.solutions/nuxt-sections\",\n \"@nuxt/image\",\n \"@nuxtjs/i18n\",\n \"@nuxtjs/tailwindcss\",\n \"nuxt-lazytube\",\n \"nuxt3-leaflet\",\n \"@pinia/nuxt\"\n ],\n i18n: {\n detectBrowserLanguage: false,\n defaultLocale: \"en\",\n locales: [\n {\n name: \"French\",\n code: \"fr\",\n iso: \"fr\",\n file: \"fr.js\"\n },\n {\n name: \"English\",\n code: \"en\",\n iso: \"en\",\n file: \"en.js\"\n }\n ],\n langDir: \"lang/\",\n experimental: {\n localeDetector: 'localeDetector.ts'\n }\n },\n tailwindcss: {\n\n },\n css: [\n '~/assets/css/default.css'\n ],\n plugins: [\n '~/plugins/vue-dragscroll.js'\n ],\n devtools: { enabled: true },\n compatibilityDate: '2025-05-13',\n vite: {\n optimizeDeps: {\n include: ['quill', '@devdcodes9/quill-emojijs', 'quill-table-ui'],\n }\n },\n nitro: {\n compressPublicAssets: {\n gzip: true,\n brotli: true\n }\n }\n})\n```\n\n* localeDetector.ts inside i18n directory\n\n```ts\nconsole.log(\"Detector file loaded\")\n\n// Detect based on query, cookie, header\nexport default defineI18nLocaleDetector((event, config) => {\n\n console.log(\"Event\", event)\n\n // try to get locale from query\n const query = tryQueryLocale(event, { lang: '' }) // disable locale default value with `lang` option\n if (query) {\n return query.toString()\n }\n\n // try to get locale from cookie\n const cookie = tryCookieLocale(event, { lang: '', name: 'i18n_redirected' }) // disable locale default value with `lang` option\n if (cookie) {\n return cookie.toString()\n }\n\n // try to get locale from header (`accept-header`)\n const header = tryHeaderLocale(event, { lang: '' }) // disable locale default value with `lang` option\n if (header) {\n return header.toString()\n }\n\n // If the locale cannot be resolved up to this point, it is resolved with the value `defaultLocale` of the locale config passed to the function\n return config.defaultLocale\n})\n```\n\n* nuxi prepare\n* nuxi dev\n\n### Describe the bug\n\nI am trying to use the experimental localeDetector feature.\nThe localeDetector file is loaded and confirmed by having `Detector file loaded` logged on the server console.\n\nThe problem I am facing is that defineI18nLocaleDetector is never called and no Event is logged.\nAm I missing something ?\n\n### Additional context\n\nIn the documentation I saw that the local detector function is called per request on the server, so why the code inside the defineI18nLocaleDetector is never reached\n\n### Logs\n\n```shell\nNo errors logged at all\n```",[3218],{"name":3175,"color":3176},3651,"Code inside defineI18nLocaleDetector is not reached","2025-05-29T06:34:13Z","https://github.com/nuxt-modules/i18n/issues/3651",0.7045531,{"description":3225,"labels":3226,"number":3236,"owner":3178,"repository":3179,"state":3237,"title":3238,"updated_at":3239,"url":3240,"score":3241},"### Environment\n\n```\n- Operating System: Darwin\n- Node Version: v22.11.0\n- Nuxt Version: 3.13.2\n- CLI Version: 3.16.0\n- Nitro Version: 2.10.4\n- Package Manager: npm@10.9.0\n- Builder: -\n- User Config: default\n- Runtime Modules: @nuxtjs/i18n@9.1.0, @pinia/nuxt@0.7.0\n- Build Modules: -\n```\n\n### Reproduction\n\nhttps://stackblitz.com/edit/bobbiegoede-nuxt-i18n-starter-l8bdri?file=pages%2Ftest.vue,pages%2Findex.vue but it won't work in stackblitz so it needs to be reproduced in local environment\n\n### Describe the bug\n\nWhen using `\u003CNuxtLinkLocale>` with `to=\"/some-url-in-your-application\"` with `target=\"_blank\"`, locale prefix is not inserted in the resulting URL.\n\n### Additional context\n\nIn my opinion prefix should be added (or omitted if it is a default locale) as I use `\u003CNuxtLinkLocale>` here with exact purpose to direct to my application. Otherwise I would have used just an ordinary `\u003Ca>` tag or even `\u003CNuxtLink>`\n\n### Logs\n\n```shell\n\n```",[3227,3230,3233],{"name":3228,"color":3229},"bug 🐛","ee0701",{"name":3231,"color":3232},"PR Welcome","40922A",{"name":3234,"color":3235},"nuxt-link-locale","B327C3",3252,"closed","NuxtLinkLocale with an attribute target=\"_blank\" does not respect the locale prefix","2025-05-22T15:26:02Z","https://github.com/nuxt-modules/i18n/issues/3252",0.65237176,{"description":3243,"labels":3244,"number":3250,"owner":3178,"repository":3179,"state":3237,"title":3251,"updated_at":3252,"url":3253,"score":3254},"### Environment\n\n------------------------------\n- Operating System: Darwin\n- Node Version: v20.18.0\n- Nuxt Version: 3.16.0\n- CLI Version: 3.22.5\n- Nitro Version: 2.11.6\n- Package Manager: pnpm@9.12.2\n- Builder: -\n- User Config: modules, devtools, app, css, runtimeConfig, future, compatibilityDate, vite, postcss, eslint, i18n, image, prismic\n- Runtime Modules: @nuxt/eslint@1.2.0, @nuxtjs/prismic@4.1.0, @nuxt/fonts@0.11.0, @nuxtjs/i18n@9.3.1, @nuxt/image@1.9.0, @vueuse/nuxt@13.0.0\n- Build Modules: -\n------------------------------\n\n### Reproduction\n\nhttps://stackblitz.com/edit/bobbiegoede-nuxt-i18n-starter-w8n5eqto?file=pages%2Findex.vue\n\n### Describe the bug\n\n\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell\n\n```",[3245,3248],{"name":3246,"color":3247},"🍰 p2-nice-to-have","0e8a16",{"name":3249,"color":3235},"scope: components",3402,"Double nested `NuxtLinkLocale`","2025-05-30T19:25:27Z","https://github.com/nuxt-modules/i18n/issues/3402",0.6628867,{"description":3256,"labels":3257,"number":3261,"owner":3178,"repository":3179,"state":3237,"title":3262,"updated_at":3263,"url":3264,"score":3265},"### Environment\n\n- Operating System: Darwin\r\n- Node Version: v18.16.0\r\n- Nuxt Version: 3.6.2\r\n- Nitro Version: 2.5.2\r\n- Package Manager: yarn@1.22.19\r\n- Builder: vite\r\n- User Config: build, css, devtools, modules, nitro, postcss, routeRules, runtimeConfig\r\n- Runtime Modules: @pinia/nuxt@0.4.11, @nuxt/image@1.0.0-rc.1, nuxt-api-party@0.13.0, @nuxtjs/i18n@8.0.0-beta.13\r\n- Build Modules: -\n\n### Reproduction\n\nhttps://github.com/joeykamsteeg/nuxt3-i18n-beforelocaleswitch-hook-not-working\n\n### Describe the bug\n\nThis hook should be triggered on app load (according to the documentation) and with initialSetup property we could hook our own logic how to handle URLs without locale in the URL. This is now not possible.\r\n\r\nIssue was reported earlier (#2248) but was closed without a resolution. \n\n### Additional context\n\n_No response_\n\n### Logs\n\n_No response_",[3258],{"name":3259,"color":3260},"hook","CF3B0A",2260,"Follow up: hook i18n:beforeLocaleSwitch does not use the locale that is return in the function","2025-05-22T19:39:58Z","https://github.com/nuxt-modules/i18n/issues/2260",0.66943073,{"description":3267,"labels":3268,"number":3270,"owner":3178,"repository":3179,"state":3237,"title":3271,"updated_at":3272,"url":3273,"score":3274},"### Environment\n\n- Operating System: Darwin\n- Node Version: v22.16.0\n- Nuxt Version: 3.17.7\n- CLI Version: 3.26.2\n- Nitro Version: 2.12.2\n- Package Manager: pnpm@10.13.1\n- Builder: -\n- User Config: compatibilityDate, future, devtools, telemetry, debug, runtimeConfig, app, css, postcss, tailwindcss, modules, cms, build, storefront, storefront-ui, svgo, fonts, image, experimental, i18n, opentelemetry, imports, vueuse, components, vue, devServer, ignore, routeRules, vite, hooks, nitro, optimization\n- Runtime Modules: @nuxtjs/i18n@10.0.0, @scayle/storefront-nuxt/module@8.33.2, @scayle/omnichannel-nuxt/module@4.3.2, @nuxtjs/tailwindcss@6.14.0, nuxt-svgo@4.2.4, @nuxt/fonts@0.11.4, @nuxt/image@1.10.0, @vueuse/nuxt@13.5.0, nuxt-swiper@1.2.2, @nuxt/test-utils/module@3.19.2, @nuxt/eslint@1.4.1, @scayle/eslint-auto-explicit-import@0.2.0, @scayle/nuxt-opentelemetry@0.13.10, @scayle/storefront-country-detection@2.0.0, @scayle/storefront-product-detail@1.5.0, @scayle/storefront-product-listing@2.0.1, @scayle/storefront-promotions@2.2.0, @scayle/storefront-search@0.3.0, @scayle/storefront-basket@0.3.0, @scayle/storefront-navigation@0.3.0, @scayle/nuxt-image-provider@0.3.1, @nuxtjs/storybook@8.4.1\n- Build Modules: -\n\n### Reproduction\n\nhttps://stackblitz.com/edit/bobbiegoede-nuxt-i18n-starter-a8x1bxda?file=i18n%2Fi18n.config.ts\n\n### Describe the bug\n\nI use a module that relies on the correct locale during SSR. When I set the strategy to `prefix` and open some site without prefix but with query params, the default locale is missing during SSR. \n\nIn my case, this cause the page to crash. \n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell\n\n```",[3269],{"name":3175,"color":3176},3733,"Redirects are not properly resolved when the URL contians query params","2025-07-19T09:16:15Z","https://github.com/nuxt-modules/i18n/issues/3733",0.6774859,{"description":3276,"labels":3277,"number":3280,"owner":3178,"repository":3179,"state":3237,"title":3281,"updated_at":3282,"url":3283,"score":3284},"### Environment\n\n``` \n- Operating System: Darwin\n- Node Version: v22.16.0\n- Nuxt Version: 4.0.3\n- CLI Version: 3.28.0\n- Nitro Version: 2.12.4\n- Package Manager: npm@10.9.2\n- Builder: -\n- User Config: compatibilityDate, devtools, modules, css, vite, routeRules, i18n, sanctum, runtimeConfig, uiPro\n- Runtime Modules: @nuxt/eslint@1.8.0, @nuxt/image@1.11.0, @nuxt/scripts@0.11.10, @nuxt/ui-pro@3.3.2, @nuxtjs/i18n@10.0.5, nuxt-auth-sanctum@1.1.2, dayjs-nuxt@2.1.11\n- Build Modules: -\n```\n\n### Reproduction\n\n1. Create translation files in the default location:\n```\ni18n/locales/es.ts\ni18n/locales/en.ts\n```\n\n2. Configure nuxt.config.ts:\n```ts\nrouteRules: {\n \"/\": { prerender: true },\n \"/en\": { prerender: true },\n...\n// We have prerender y routes, because are landings and astatic\n},\n i18n: {\n defaultLocale: \"es\",\n strategy: \"prefix_except_default\",\n baseUrl: process.env.NUXT_PUBLIC_FRONTEND_URL,\n locales: [\n { code: \"en\", name: \"English\", file: \"en.ts\", language: \"en\" },\n { code: \"es\", name: \"Español\", file: \"es.ts\", language: \"es\" },\n ],\n}\n```\n\n3. layouts/default.vue\n```vue\n\u003Cscript lang=\"ts\" setup>\nconst i18nHead = useLocaleHead({\n dir: true,\n seo: true,\n});\nconst { t } = useI18n();\nconst route = useRoute();\nconst config = useRuntimeConfig();\nconst { locale } = useI18n();\nconst title = computed(() =>\n t((route.meta.title as string) ?? \"layout.default.title\", {\n appName: config.public.appName,\n })\n);\ntype Meta = {\n property?: string;\n content: string;\n name?: string;\n};\nconst metaTags = computed\u003CMeta[]>(() => {\n const description = t(\n (route.meta.description as string) ?? \"layout.default.description\"\n );\n\n return [\n ...(i18nHead.value.meta || []),\n {\n name: \"description\",\n content: description,\n },\n {\n property: \"og:title\",\n content: title.value,\n },\n {\n property: \"og:description\",\n content: description,\n },\n {\n property: \"og:image\",\n content: `/media/common/${locale.value}/og.webp`,\n },\n {\n property: \"og:url\",\n content: `${config.public.frontendUrl}${route.fullPath}`,\n },\n {\n property: \"og:locale\",\n content: i18nHead.value.htmlAttrs.lang,\n },\n {\n property: \"og:site_name\",\n content: config.public.appName as string,\n },\n {\n property: \"og:type\",\n content: \"website\",\n },\n {\n name: \"twitter:card\",\n content: \"summary_large_image\",\n },\n {\n name: \"twitter:title\",\n content: title.value,\n },\n {\n name: \"twitter:description\",\n content: description,\n },\n {\n name: \"twitter:image\",\n content: `/media/common/${locale.value}/og.webp`,\n },\n {\n name: \"robots\",\n // Only if we are in production\n content:\n config.public.vercelEnv == \"production\"\n ? \"index, follow\"\n : \"noindex, nofollow\",\n },\n ] as Meta[];\n});\n\nconst links = computed(() => [\n ...(i18nHead.value.link || []),\n { rel: \"icon\", type: \"image/x-icon\", href: \"/favicon.ico\" },\n]);\n\u003C/script>\n\n\u003Ctemplate>\n \u003CHtml :lang=\"i18nHead.htmlAttrs.lang\" :dir=\"i18nHead.htmlAttrs.dir\">\n \u003CHead>\n \u003CTitle>{{ title }}\u003C/Title>\n \u003Ctemplate v-for=\"link in links\" :key=\"link.id\">\n \u003CLink\n :id=\"link.id\"\n :rel=\"link.rel\"\n :href=\"link.href\"\n :hreflang=\"link.hreflang\"\n />\n \u003C/template>\n \u003Ctemplate v-for=\"meta in metaTags\" :key=\"meta.id\">\n \u003CMeta\n :property=\"meta.property\"\n :content=\"meta.content\"\n :name=\"meta.name\"\n />\n \u003C/template>\n \u003C/Head>\n \u003CBody>\n \u003CAppHeader />\n \u003Cslot />\n \u003CAppFooter />\n \u003C/Body>\n \u003C/Html>\n\u003C/template>\n\n\u003Cstyle>\u003C/style>\n```\n\n4. Some page\n```vue\ndefinePageMeta({\n layout: \"default\",\n title: \"essay.meta.title\",\n description: \"essay.meta.description\",\n});\n```\n\n5. Example of translation file:\n```\nexport default {\n appHeader: {\n tools: \"Herramientas\",\n summary: {\n title: \"Resumidor\",\n description: \"Resume textos de forma automática.\",\n },\n....\n```\n\n\n\n### Describe the bug\n\nWhen using the current Nuxt i18n setup (translations inside i18n/locales/es.ts, i18n/locales/en.ts, etc.), translation keys appear in the \u003Chead> instead of resolved translations.\n\nFor example, Google is indexing essay.meta.title instead of the translated string because the SSR HTML is rendered before locale messages are available. The client later fetches /_i18n/es/messages.json, but if that request fails or is delayed, the \u003Ctitle> and \u003Cmeta> remain as raw keys. This is problematic for SEO since crawlers usually index the raw SSR HTML.\n\nWhen inspect with search console:\n\u003Cimg width=\"399\" height=\"76\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/9b9fcc11-0244-4eab-a624-1e60ac29d6e3\" />\n\u003Cimg width=\"400\" height=\"223\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/3f70c9a6-ec7e-4a20-9ec1-16dc62958297\" />\nIn google SERP\n\u003Cimg width=\"705\" height=\"151\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/ea3e3b89-9bcf-421d-96cc-5987aff8a64c\" />\n\n### Additional context\n\n#### Documentation issues\n\nIn older versions there was a lazy: true/false option. This no longer exists, but the migration path is unclear.\n\nIt’s not documented whether .ts files (with export default {}) behave the same as .json for SSR vs client-only loading.\n\nThe docs show how to use file/files, but don’t explain how to guarantee SSR has messages ready for SEO-critical content like \u003Chead>.\n\nRight now it’s unclear if the messages are truly lazy-loaded, or if something else prevents them from being available at SSR.\n\n### Logs\n\n```shell\n\n```",[3278,3279],{"name":3175,"color":3176},{"name":3199,"color":3200},3794,"SEO issue with SSR translations and unclear lazy-loading behavior","2025-10-07T14:52:13Z","https://github.com/nuxt-modules/i18n/issues/3794",0.68209743,["Reactive",3286],{},["Set"],["ShallowReactive",3289],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$feph2BNA2kFyrcfqet1gis099m8gMDL2AXRbu45YfZMo":-1},"/nuxt-modules/i18n/3631"]