minhnt-dev: SEO

This commit is contained in:
MoreStrive
2024-06-21 17:51:36 +07:00
parent a447a8a7aa
commit e151dda2ad
7 changed files with 23 additions and 11 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

+1
View File
@@ -67,6 +67,7 @@ export default defineNuxtConfig({
propsDestructure: true, propsDestructure: true,
}, },
target: 'server',
ssr: true, ssr: true,
routeRules: { routeRules: {
// Tất cả các route sẽ sử dụng SSR // Tất cả các route sẽ sử dụng SSR
+6 -1
View File
@@ -11,7 +11,12 @@ const store = reactive({
await useAsyncData('index', () => store.dynamicPage.fetchPageByCode(route.path.replace('/', ''))) await useAsyncData('index', () => store.dynamicPage.fetchPageByCode(route.path.replace('/', '')))
useHead({ 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',
}) })
</script> </script>
+5 -5
View File
@@ -58,11 +58,11 @@ const loadPage = async () => {
await useAsyncData('detail-article', () => loadPage()); await useAsyncData('detail-article', () => loadPage());
useSeoMeta({ useSeoMeta({
title: () => currentArticle.value?.title?.replace(/<[^>]+>/g, ''), title: () => currentArticle.value.title.replace(/<[^>]+>/g, ''),
description: () => currentArticle.value?.intro, description: () => currentArticle.value.intro.replace(/<[^>]+>/g, ''),
ogTitle: () => currentArticle.value?.title, ogTitle: () => currentArticle.value.title.replace(/<[^>]+>/g, ''),
ogImage: () => currentArticle.value?.thumbnail, ogImage: () => currentArticle.value.thumbnail,
ogDescription: () => currentArticle.value?.intro, ogDescription: () => currentArticle.value.intro.replace(/<[^>]+>/g, ''),
twitterCard: () => 'summary_large_image', twitterCard: () => 'summary_large_image',
}) })
</script> </script>
+7 -1
View File
@@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import ADSDefault from '@/assets/images/ads.jpg'
import DynamicTemplate from "~/components/dynamic-page/page/templates/index.vue"; import DynamicTemplate from "~/components/dynamic-page/page/templates/index.vue";
import DynamicSection from "~/components/dynamic-page/page-section/templates/index.vue"; import DynamicSection from "~/components/dynamic-page/page-section/templates/index.vue";
import { useDynamicPageStore } from '~/stores/dynamic-page'; import { useDynamicPageStore } from '~/stores/dynamic-page';
@@ -11,7 +12,12 @@ const store = reactive({
await useAsyncData('index', () => store.dynamicPage.fetchPageByCode(route.path === '/' ? 'trang-chu' : route.path.replace('/', ''))) await useAsyncData('index', () => store.dynamicPage.fetchPageByCode(route.path === '/' ? 'trang-chu' : route.path.replace('/', '')))
useHead({ useHead({
title: 'Trang chủ' title: () => 'Trang chủ',
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: () => 'Trang chủ',
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',
}) })
</script> </script>
+2 -2
View File
@@ -15,9 +15,9 @@ export const useArticleStore = defineStore("article", () => {
const getArticleBySlug = async (slug: string) => { const getArticleBySlug = async (slug: string) => {
try { 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 = {}
currentArticle.value = article.value?.item currentArticle.value = article?.item
} catch (error: any) { } } catch (error: any) { }
} }
+2 -2
View File
@@ -9,9 +9,9 @@ export const useDynamicPageStore = defineStore("dynamicPageStore", () => {
async function fetchPageByCode(slug: any) { async function fetchPageByCode(slug: any) {
try { 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 = {}
currentPage.value = value currentPage.value = page
setSectionPublished(); setSectionPublished();
setComponentPublished(); setComponentPublished();