fix(seo): integrate nuxtApp context for SEO meta handling and ensure proper execution within server environment

This commit is contained in:
keven1024
2026-04-05 11:48:44 +08:00
parent c25b41e20e
commit 976011697c

View File

@@ -16,6 +16,7 @@ const useSeo = async (props: UseSeoProps = {}) => {
site_bg_url: string
}>()
if (import.meta.server) {
const nuxtApp = useNuxtApp()
await fetch(`${getApiBaseUrl()}/config`)
.then((res) => res.json())
.then(({ data }) => {
@@ -24,33 +25,35 @@ const useSeo = async (props: UseSeoProps = {}) => {
const { title } = head || {}
const siteTitle = computed(() => renderI18n(seoMeta?.value?.site_title || {}, 'en', locale))
const siteDesc = computed(() => renderI18n(seoMeta?.value?.site_desc || {}, 'en', locale))
useHead({
link: [
{ rel: 'icon', href: seoMeta.value?.site_icon || '/logo.png', sizes: 'any' },
// { rel: 'icon', href: '/favicon.svg', sizes: 'any', type: 'image/svg+xml' },
{ rel: 'apple-touch-icon', sizes: '180x180', href: seoMeta.value?.site_icon || '/logo.png' },
],
meta: [
// used on some mobile browsers
{ name: 'theme-color', content: '#395276' },
],
...head,
title: title ? `${title} - ${siteTitle.value}` : siteTitle.value,
})
useSeoMeta({
...seo,
title: siteTitle.value,
description: siteDesc.value,
ogTitle: siteTitle.value,
ogDescription: siteDesc.value,
ogImage: {
url: `${seoMeta?.value?.site_url}${seoMeta?.value?.site_icon || '/logo.png'}`,
width: 1024,
height: 1024,
alt: 'logo',
type: 'image/png',
},
twitterCard: 'summary',
await nuxtApp.runWithContext(() => {
useHead({
link: [
{ rel: 'icon', href: seoMeta.value?.site_icon || '/logo.png', sizes: 'any' },
// { rel: 'icon', href: '/favicon.svg', sizes: 'any', type: 'image/svg+xml' },
{ rel: 'apple-touch-icon', sizes: '180x180', href: seoMeta.value?.site_icon || '/logo.png' },
],
meta: [
// used on some mobile browsers
{ name: 'theme-color', content: '#395276' },
],
...head,
title: title ? `${title} - ${siteTitle.value}` : siteTitle.value,
})
useSeoMeta({
...seo,
title: siteTitle.value,
description: siteDesc.value,
ogTitle: siteTitle.value,
ogDescription: siteDesc.value,
ogImage: {
url: `${seoMeta?.value?.site_url}${seoMeta?.value?.site_icon || '/logo.png'}`,
width: 1024,
height: 1024,
alt: 'logo',
type: 'image/png',
},
twitterCard: 'summary',
})
})
}
return