` and `og:property`. \r\n\r\n```html\r\n\u003Clink id=\"i18n-alt-it\" rel=\"alternate\" href=\"https://www.dummy.com/it/blog-1-it\" hreflang=\"it\">\r\n\u003Clink id=\"i18n-alt-de\" rel=\"alternate\" href=\"https://www.dummy.com/de/blog-1-de\" hreflang=\"de\">\r\n\u003Clink id=\"i18n-xd\" rel=\"alternate\" href=\"https://www.dummy.com/it/blog-1-it\" hreflang=\"x-default\">\r\n\u003Clink id=\"i18n-can\" rel=\"canonical\" href=\"https://www.dummy.com/it/blog-1-ita\">\r\n\u003Cmeta id=\"i18n-og-url\" property=\"og:url\" content=\"https://www.dummy.com/it/blog-1-ita\">\r\n\u003Cmeta id=\"i18n-og\" property=\"og:locale\" content=\"it\">\r\n\u003Cmeta id=\"i18n-og-alt-en\" property=\"og:locale:alternate\" content=\"en\">\r\n\u003Cmeta id=\"i18n-og-alt-de\" property=\"og:locale:alternate\" content=\"de\">\r\n```\n\n### Additional context\n\nWow, that's good, but why only whit `setI18nParams` and not in the othter pages? If i don't use `setI18nParams` i have to set all this code on `App.vue`\r\n```js\r\nconst localeHead = useLocaleHead({\r\n addSeoAttributes: true,\r\n addDirAttribute: true,\r\n})\r\n\r\nuseHead({\r\n htmlAttrs: () => localeHead.value.htmlAttrs ?? {},\r\n link: () => localeHead.value.link ?? [],\r\n meta: () => localeHead.value.meta ?? []\r\n})\r\n```\r\n\r\nSo either everything is handled automatically or everything is handled via the mix of `useLocaleHead` and `useHead`\n\n### Logs\n\n_No response_",[3061,3064],{"name":3062,"color":3063},"🍰 p2-nice-to-have","0e8a16",{"name":3065,"color":3066},"scope: seo","30CDE0",2780,"closed","`setI18nParams` automatically adds `\u003Clink rel=\"alternate\" />`","2025-05-25T10:23:03Z","https://github.com/nuxt-modules/i18n/issues/2780",0.6425828,{"description":3074,"labels":3075,"number":3081,"owner":3022,"repository":3023,"state":3068,"title":3082,"updated_at":3083,"url":3084,"score":3085},"### Describe the feature\n\n# Description\n\nCurrently, the `useLocaleHead` composable in the `nuxt3-i18n` module automatically generates various meta tags, including `og:url`, based on non-configurable logic. While this works for many use cases, it creates challenges when custom logic is required.\n\n## Use Case\n\nIn our project, we manually determine the `og:url` using project-specific logic. We set this custom `og:url` using the [useSeoMeta](https://nuxt.com/docs/api/composables/use-seo-meta) method. However, when using `useLocaleHead` with default properties, it adds a second `og:url` meta tag, which cannot be disabled or customized without affecting other tags.\n\nSetting `seo: false` in `useLocaleHead` disables all SEO-related meta tags, including `og:locale:alternate` tags and `og:locale` for the current page. This is problematic because we only want to disable the automatic generation of `og:url`, while retaining the other meta tags provided by `useLocaleHead`.\n\nThe relevant behavior can be seen in the following code snippet: \n\nhttps://github.com/nuxt-modules/i18n/blob/d239bdd3db8c9790e6d11dd3848213674c4590a3/src/runtime/routing/compatibles/head.ts#L63-L72\n\n## PR\n\nI’d be happy to contribute a pull request (PR) to implement this feature if the idea is welcomed.\n\n### Additional information\n\n- [x] Would you be willing to help implement this feature?\n- [ ] Could this feature be implemented as a module?\n\n### Final checks\n\n- [x] Read the [contribution guide](https://nuxt.com/docs/community/contribution) (The contribution guideline of nuxt-modules/i18n is compliant with Nuxt too).\n- [x] Check existing [discussions](https://github.com/nuxt-modules/i18n/discussions) and [issues](https://github.com/nuxt/nuxt/issues).",[3076,3077,3080],{"name":3019,"color":3020},{"name":3078,"color":3079},"need reproduction","CD234A",{"name":3065,"color":3066},3277,"Feature Request: Add fine-grained control for `og:url` and other Open Graph meta tags in `useLocaleHead`","2025-06-08T01:44:39Z","https://github.com/nuxt-modules/i18n/issues/3277",0.66632825,{"description":3087,"labels":3088,"number":3091,"owner":3022,"repository":3023,"state":3068,"title":3092,"updated_at":3093,"url":3094,"score":3095},"### Environment\r\n\r\n------------------------------\r\n- Operating System: Darwin\r\n- Node Version: v20.11.0\r\n- Nuxt Version: 3.10.1\r\n- CLI Version: 3.10.0\r\n- Nitro Version: 2.8.1\r\n- Package Manager: yarn@4.0.1\r\n- Builder: -\r\n- User Config: modules, i18n, devtools\r\n- Runtime Modules: @nuxtjs/i18n@8.1.0\r\n- Build Modules: -\r\n------------------------------\r\n\r\n\r\n### Reproduction\r\n\r\nhttps://stackblitz.com/edit/github-c7te5q-rzxba2\r\n\r\n### Describe the bug\r\n\r\n`useLocaleHead` doesn't work with `useSetI18nParams` because `\u003Clink rel=\"alternate\" />` aren't sync. \r\n\r\n### Additional context\r\n\r\nif i go from Homepage `/it` to the blog page `/it/blog-1-ita` using the **Go at Blog Page** button, the alternate links don't change; but i've set all the i18nParams\r\n```js\r\nsetI18nParams({\r\n it: { blog: 'blog-1-it' },\r\n de: { blog: 'blog-1-de' },\r\n en: false,\r\n})\r\n```\r\n\r\nIf i refresh the page when i'm in the blog page, the `\u003Clink rel=\"alternate\" />` are duplicated (and also `canonical`).\r\n```html\r\n\u003Clink rel=\"alternate\" href=\"https://www.dummy.com/en/blog-1-ita\" hreflang=\"en\" data-hid=\"7fcee50\">\r\n\u003Clink rel=\"alternate\" href=\"https://www.dummy.com/it/blog-1-ita\" hreflang=\"it\" data-hid=\"08fce45\">\r\n\u003Clink rel=\"alternate\" href=\"https://www.dummy.com/de/blog-1-ita\" hreflang=\"de\" data-hid=\"5d718b2\">\r\n\u003Clink rel=\"alternate\" href=\"https://www.dummy.com/it/blog-1-ita\" hreflang=\"x-default\" data-hid=\"6527e7a\">\r\n\u003Clink rel=\"canonical\" href=\"https://www.dummy.com/it/blog-1-ita\" data-hid=\"5cca6f5\">\r\n\r\n\u003Clink id=\"i18n-alt-it\" rel=\"alternate\" href=\"https://www.dummy.com/it/blog-1-it\" hreflang=\"it\">\r\n\u003Clink id=\"i18n-alt-de\" rel=\"alternate\" href=\"https://www.dummy.com/de/blog-1-de\" hreflang=\"de\">\r\n\u003Clink id=\"i18n-xd\" rel=\"alternate\" href=\"https://www.dummy.com/it/blog-1-it\" hreflang=\"x-default\">\r\n\u003Clink id=\"i18n-can\" rel=\"canonical\" href=\"https://www.dummy.com/it/blog-1-ita\">\r\n```\r\n\r\n### Logs\r\n\r\n_No response_",[3089,3090],{"name":3062,"color":3063},{"name":3065,"color":3066},2779,"`useSetI18nParams` and `useLocaleHead` `rel=\"alternate\"` aren't sync. ","2025-07-20T20:12:38Z","https://github.com/nuxt-modules/i18n/issues/2779",0.67075914,{"description":3097,"labels":3098,"number":3102,"owner":3022,"repository":3023,"state":3068,"title":3103,"updated_at":3104,"url":3105,"score":3106},"### 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_",[3099],{"name":3100,"color":3101},"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.68216485,{"description":3108,"labels":3109,"number":3113,"owner":3022,"repository":3023,"state":3068,"title":3114,"updated_at":3115,"url":3116,"score":3117},"### Environment\r\n\r\n------------------------------\r\n- Operating System: Windows_NT\r\n- Node Version: v20.11.0 \r\n- Nuxt Version: 3.12.4 \r\n- CLI Version: 3.12.0 \r\n- Nitro Version: 2.9.7 \r\n- Package Manager: pnpm@9.3.0\r\n- Builder: -\r\n- User Config: -\r\n- Runtime Modules: -\r\n- Build Modules: -\r\n------------------------------\r\n\r\n### Reproduction\r\n\r\nhttps://stackblitz.com/edit/bobbiegoede-nuxt-i18n-starter-ktvmyt?file=nuxt.config.ts,node_m%2Fmod.ts,node_m%2Fpages%2Ftest.vue,app.vue\r\n\r\n### Describe the bug\r\n\r\nHey :wave: \r\n\r\nTHe bug is that pages added through `pages:extend` hook in modules are not correctly localized by nuxt i18n with the prefix strategy. We only get the page localized for one lang + the name insn't localized either.\r\n\r\nYou can see theses info in the devtools\r\n\r\n### Additional context\r\n\r\n_No response_\r\n\r\n### Logs\r\n\r\n_No response_",[3110],{"name":3111,"color":3112},"upstream","fbca04",3086,"pages are not localized when using `pages:extends` with prefix strategy","2025-06-08T16:43:41Z","https://github.com/nuxt-modules/i18n/issues/3086",0.6868683,{"description":3119,"labels":3120,"number":3124,"owner":3022,"repository":3023,"state":3068,"title":3125,"updated_at":3126,"url":3127,"score":3128},"### Environment\n\n- Operating System: Linux\r\n- Node Version: v18.20.3\r\n- Nuxt Version: 3.12.4\r\n- CLI Version: 3.12.0\r\n- Nitro Version: -\r\n- Package Manager: pnpm@8.15.6\r\n- Builder: -\r\n- User Config: modules, runtimeConfig, i18n, compatibilityDate\r\n- Runtime Modules: @nuxtjs/i18n@8.3.1\r\n- Build Modules: -\n\n### Reproduction\n\nhttps://stackblitz.com/edit/nuxt-starter-i18n-timothe?file=app.vue,pages/%5B...slug%5D.vue,nuxt.config.ts\n\n### Describe the bug\n\nWhen using `prefix_except_default` strategy, and try to initialize locale with setLocale function but I18n fallback to default locale afterward. It's only work when I set detectBrowserLanguage to `{}` instead of `false`.\n\n### Additional context\n\nI let the CMS handle the routing for the wildcard.\n\n### Logs\n\n```shell\nisSSG false\r\nuseCookie on setup false\r\ndefaultLocale on setup fr\r\ngetLocaleCookie { useCookie: false, cookieKey: false, localeCodes: [ 'fr', 'en' ] }\r\ndetectLocale: initialLocale - fr\r\ndetectLocale: (ssg, callType, firstAccess) - normal setup true\r\ndetectLocale: detectBrowserLanguage (browserLocale, stat, reason, from) - false unknown unknown\r\ndetectLocale: finaleLocale first (finaleLocale, strategy) - prefix_except_default\r\ndetectLocale: finaleLocale second (finaleLocale, detectBrowserLanguage) - false\r\ndetectLocale: finalLocale last (finalLocale, defaultLocale) - fr\r\ndetectLocale: finalLocale - fr\r\nfirst detect initial locale fr\r\n../assets/fr.json is loading ...\r\nloadMessage: (locale) - fr\r\nloadMessage: load { welcome:\r\n { type: 0,\r\n start: 0,\r\n end: 9,\r\n loc: { start: [Object], end: [Object], source: 'Bienvenue' },\r\n body:\r\n { type: 2, start: 0, end: 9, loc: [Object], items: [Array], static: 'Bienvenue' } } }\r\nfinal initial locale: fr\r\nlocale-changing middleware { fullPath: '/',\r\n hash: '',\r\n query: {},\r\n name: 'slug',\r\n path: '/',\r\n params: { slug: '' },\r\n matched:\r\n [ { path: '/:slug(.*)*',\r\n redirect: undefined,\r\n name: 'slug',\r\n meta: {},\r\n aliasOf: undefined,\r\n beforeEnter: undefined,\r\n props: [Object],\r\n children: [],\r\n instances: {},\r\n leaveGuards: Set(0) {},\r\n updateGuards: Set(0) {},\r\n enterCallbacks: {},\r\n components: [Object] } ],\r\n meta: {},\r\n redirectedFrom: undefined,\r\n href: '/' } { fullPath: '/',\r\n path: '/',\r\n query: {},\r\n hash: '',\r\n name: undefined,\r\n params: { slug: '' },\r\n matched:\r\n [ { path: '/:slug(.*)*',\r\n redirect: undefined,\r\n name: 'slug',\r\n meta: {},\r\n aliasOf: undefined,\r\n beforeEnter: undefined,\r\n props: [Object],\r\n children: [],\r\n instances: {},\r\n leaveGuards: Set(0) {},\r\n updateGuards: Set(0) {},\r\n enterCallbacks: {},\r\n components: [Object] } ],\r\n meta: {},\r\n redirectedFrom: undefined,\r\n href: '/' }\r\ngetLocaleCookie { useCookie: false, cookieKey: false, localeCodes: [ 'fr', 'en' ] }\r\ndetectLocale: initialLocale - fr\r\ndetectLocale: (ssg, callType, firstAccess) - normal routing true\r\ndetectLocale: detectBrowserLanguage (browserLocale, stat, reason, from) - false unknown unknown\r\ndetectLocale: finaleLocale first (finaleLocale, strategy) - prefix_except_default\r\ndetectLocale: finaleLocale second (finaleLocale, detectBrowserLanguage) - false\r\ndetectLocale: finalLocale last (finalLocale, defaultLocale) - fr\r\ndetectLocale: finalLocale - fr\r\ndetect locale fr\r\nlocaleSetup false\r\nsetLocale: new -> fr old -> fr initial -> false\r\ndetectRedirect: targetLocale -> fr\r\ndetectRedirect: route -> { to:\r\n { fullPath: '/',\r\n hash: '',\r\n query: {},\r\n name: 'slug',\r\n path: '/',\r\n params: { slug: '' },\r\n matched: [ [Object] ],\r\n meta: {},\r\n redirectedFrom: undefined,\r\n href: '/' },\r\n from:\r\n { fullPath: '/',\r\n path: '/',\r\n query: {},\r\n hash: '',\r\n name: undefined,\r\n params: { slug: '' },\r\n matched: [ [Object] ],\r\n meta: {},\r\n redirectedFrom: undefined,\r\n href: '/' } }\r\ndetectRedirect: calledWithRouting -> true \r\ndetectRedirect: calculate routePath -> /\r\nredirectPath on locale-changing middleware \r\nnavigate options 302 false false false\r\nnavigate isSSG false\r\nsetLocale: new -> en old -> fr initial -> true\r\n../assets/en.json is loading ...\r\nloadMessage: (locale) - en\r\nloadMessage: load { welcome:\r\n { type: 0,\r\n start: 0,\r\n end: 7,\r\n loc: { start: [Object], end: [Object], source: 'Welcome' },\r\n body: { type: 2, start: 0, end: 7, loc: [Object], items: [Array], static: 'Welcome' } } }\r\ndetectRedirect: targetLocale -> en\r\ndetectRedirect: route -> { to: {} }\r\ndetectRedirect: calledWithRouting -> false \r\ndetectRedirect: calculate routePath -> /\r\nredirectPath on setLocale \r\nnavigate options 302 false false true\r\nnavigate isSSG false\n```\n",[3121],{"name":3122,"color":3123},"scope: language detection","1B89B8",3039,"DetectBrowserLanguage rollback to default locale when using `prefix_except_default`","2025-06-08T01:03:16Z","https://github.com/nuxt-modules/i18n/issues/3039",0.6880612,["Reactive",3130],{},["Set"],["ShallowReactive",3133],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$fBYbfyeQveKXT0a_tnZSIIjPd_qn9ywYdvT5NmJ4P_uE":-1},"/nuxt-modules/i18n/2782"]