diff --git a/assets/images/thumbnail.jpg b/assets/images/thumbnail.jpg new file mode 100644 index 0000000..b5209cd Binary files /dev/null and b/assets/images/thumbnail.jpg differ diff --git a/nuxt.config.ts b/nuxt.config.ts index fe405a2..7abd133 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -67,6 +67,7 @@ export default defineNuxtConfig({ propsDestructure: true, }, + target: 'server', ssr: true, routeRules: { // Tất cả các route sẽ sử dụng SSR diff --git a/pages/[categories]/index.vue b/pages/[categories]/index.vue index 7c33498..f23264d 100644 --- a/pages/[categories]/index.vue +++ b/pages/[categories]/index.vue @@ -11,7 +11,12 @@ const store = reactive({ await useAsyncData('index', () => store.dynamicPage.fetchPageByCode(route.path.replace('/', ''))) useHead({ - title: () => currentPage.value.title || '' + title: () => currentPage.value.title || '', + description: () => 'Với công nghệ đột phá và giải pháp sáng tạo, Vpress sẽ là đối tác tin cậy của các tòa soạn báo, cùng nhau kiến tạo nên những giá trị bền vững trong kỷ nguyên chuyển đổi số báo chí.', + ogTitle: () => currentPage.value.title || '', + ogImage: () => '~/assets/images/thumbnail.jpg', + ogDescription: () => 'Với công nghệ đột phá và giải pháp sáng tạo, Vpress sẽ là đối tác tin cậy của các tòa soạn báo, cùng nhau kiến tạo nên những giá trị bền vững trong kỷ nguyên chuyển đổi số báo chí.', + twitterCard: () => 'summary_large_image', }) diff --git a/pages/bai-viet/[slug].vue b/pages/bai-viet/[slug].vue index 001d90a..156d6a0 100644 --- a/pages/bai-viet/[slug].vue +++ b/pages/bai-viet/[slug].vue @@ -58,11 +58,11 @@ const loadPage = async () => { await useAsyncData('detail-article', () => loadPage()); useSeoMeta({ - title: () => currentArticle.value?.title?.replace(/<[^>]+>/g, ''), - description: () => currentArticle.value?.intro, - ogTitle: () => currentArticle.value?.title, - ogImage: () => currentArticle.value?.thumbnail, - ogDescription: () => currentArticle.value?.intro, + title: () => currentArticle.value.title.replace(/<[^>]+>/g, ''), + description: () => currentArticle.value.intro.replace(/<[^>]+>/g, ''), + ogTitle: () => currentArticle.value.title.replace(/<[^>]+>/g, ''), + ogImage: () => currentArticle.value.thumbnail, + ogDescription: () => currentArticle.value.intro.replace(/<[^>]+>/g, ''), twitterCard: () => 'summary_large_image', }) diff --git a/pages/index.vue b/pages/index.vue index 756d3d5..a4b8ba7 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -1,4 +1,5 @@ diff --git a/stores/articles.ts b/stores/articles.ts index 852350a..18a4982 100644 --- a/stores/articles.ts +++ b/stores/articles.ts @@ -15,9 +15,9 @@ export const useArticleStore = defineStore("article", () => { const getArticleBySlug = async (slug: string) => { try { - const { data: article } = await useAsyncData('article', () => $fetch(`/api/articles/get-by-slug/${slug}`)) + const article = await $fetch(`/api/articles/get-by-slug/${slug}`) currentArticle.value = {} - currentArticle.value = article.value?.item + currentArticle.value = article?.item } catch (error: any) { } } diff --git a/stores/dynamic-page.ts b/stores/dynamic-page.ts index 0e70378..4b494e5 100644 --- a/stores/dynamic-page.ts +++ b/stores/dynamic-page.ts @@ -9,9 +9,9 @@ export const useDynamicPageStore = defineStore("dynamicPageStore", () => { async function fetchPageByCode(slug: any) { try { - const { data: { value } } = await useAsyncData('page', () => $fetch(`/api/dynamic-page/get-by-code/${slug}`)) + const page = await $fetch(`/api/dynamic-page/get-by-code/${slug}`) currentPage.value = {} - currentPage.value = value + currentPage.value = page setSectionPublished(); setComponentPublished();