From 454e1d5d2ada33e5dbd1eecc6cd4f0ba1d50e118 Mon Sep 17 00:00:00 2001 From: Nick Kosarev Date: Tue, 16 Dec 2025 11:19:48 +0200 Subject: [PATCH 1/3] chore: schema on breadcrumbs --- apps/web-app/app/components/user/ProfileCard.vue | 7 ++++--- apps/web-app/app/pages/[pageSlug]/index.vue | 16 +++++++++++++++- apps/web-app/app/pages/[pageSlug]/points.vue | 16 +++++++++++++++- apps/web-app/app/pages/[pageSlug]/reviews.vue | 16 +++++++++++++++- 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/apps/web-app/app/components/user/ProfileCard.vue b/apps/web-app/app/components/user/ProfileCard.vue index ef8cdbd..b3c1544 100644 --- a/apps/web-app/app/components/user/ProfileCard.vue +++ b/apps/web-app/app/components/user/ProfileCard.vue @@ -35,9 +35,10 @@ const { app } = useAppConfig() useSchemaOrg([ definePerson({ - name: user.name, - image: user.avatarUrl, - url: `${app.url}/u/${user.username}`, + '@type': 'Person', + 'name': user.name, + 'image': user.avatarUrl, + 'url': `${app.url}/u/${user.username}`, }), ]) diff --git a/apps/web-app/app/pages/[pageSlug]/index.vue b/apps/web-app/app/pages/[pageSlug]/index.vue index e5e0c23..1732b9a 100644 --- a/apps/web-app/app/pages/[pageSlug]/index.vue +++ b/apps/web-app/app/pages/[pageSlug]/index.vue @@ -19,7 +19,7 @@ const { data: page } = await useFetch(`/api/page/slug/${params.pageSlug}`) const mainCategory = computed(() => page.value?.categories[0]?.category) -useBreadcrumb().setItems([ +const breadcrumbItems = computed(() => [ { label: 'Главная', icon: 'i-lucide-house', @@ -32,6 +32,20 @@ useBreadcrumb().setItems([ }, ]) +useBreadcrumb().setItems(breadcrumbItems.value) + +useSchemaOrg([ + defineBreadcrumb({ + '@type': 'BreadcrumbList', + 'itemListElement': breadcrumbItems.value.map((item, index) => ({ + '@type': 'ListItem', + 'position': index + 1, + 'name': item.label, + 'item': item.to ?? undefined, + })), + }), +]) + useHead({ title: `${mainCategory.value?.title ?? ''} «${page.value?.title}»`, }) diff --git a/apps/web-app/app/pages/[pageSlug]/points.vue b/apps/web-app/app/pages/[pageSlug]/points.vue index 97ce1d3..ad46a36 100644 --- a/apps/web-app/app/pages/[pageSlug]/points.vue +++ b/apps/web-app/app/pages/[pageSlug]/points.vue @@ -25,7 +25,7 @@ const { data: page } = await useFetch(`/api/page/slug/${params.pageSlug}`) const mainCategory = computed(() => page.value?.categories[0]?.category) -useBreadcrumb().setItems([ +const breadcrumbItems = computed(() => [ { label: 'Главная', icon: 'i-lucide-house', @@ -43,6 +43,20 @@ useBreadcrumb().setItems([ }, ]) +useBreadcrumb().setItems(breadcrumbItems.value) + +useSchemaOrg([ + defineBreadcrumb({ + '@type': 'BreadcrumbList', + 'itemListElement': breadcrumbItems.value.map((item, index) => ({ + '@type': 'ListItem', + 'position': index + 1, + 'name': item.label, + 'item': item.to ?? undefined, + })), + }), +]) + useHead({ title: `Адреса «${page.value?.title}»`, }) diff --git a/apps/web-app/app/pages/[pageSlug]/reviews.vue b/apps/web-app/app/pages/[pageSlug]/reviews.vue index 3986546..8007f17 100644 --- a/apps/web-app/app/pages/[pageSlug]/reviews.vue +++ b/apps/web-app/app/pages/[pageSlug]/reviews.vue @@ -53,7 +53,7 @@ function updateData() { const mainCategory = computed(() => page.value?.categories[0]?.category) -useBreadcrumb().setItems([ +const breadcrumbItems = computed(() => [ { label: 'Главная', icon: 'i-lucide-house', @@ -71,6 +71,20 @@ useBreadcrumb().setItems([ }, ]) +useBreadcrumb().setItems(breadcrumbItems.value) + +useSchemaOrg([ + defineBreadcrumb({ + '@type': 'BreadcrumbList', + 'itemListElement': breadcrumbItems.value.map((item, index) => ({ + '@type': 'ListItem', + 'position': index + 1, + 'name': item.label, + 'item': item.to ?? undefined, + })), + }), +]) + useHead({ title: `Отзывы «${page.value?.title}»`, }) From 44354f8a5b7cb9e31403aa4f39470de79bf16103 Mon Sep 17 00:00:00 2001 From: Nick Kosarev Date: Tue, 16 Dec 2025 11:32:05 +0200 Subject: [PATCH 2/3] chore: update --- apps/web-app/app/pages/[pageSlug].vue | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/web-app/app/pages/[pageSlug].vue b/apps/web-app/app/pages/[pageSlug].vue index fe56efd..1a5dcd6 100644 --- a/apps/web-app/app/pages/[pageSlug].vue +++ b/apps/web-app/app/pages/[pageSlug].vue @@ -82,15 +82,17 @@ const submenuItems = computed(() => [ useSchemaOrg([ defineLocalBusiness({ - url: `${app.url}/${params.pageSlug}`, name: page.value?.title, - }), - defineAggregateRating({ - '@type': 'AggregateRating', - 'ratingValue': page.value?.rating, - 'ratingCount': page.value?.reviewsCount, - 'bestRating': 5, - 'worstRating': 1, + url: `${app.url}/${params.pageSlug}`, + priceRange: '₽', + aggregateRating: { + '@type': 'AggregateRating', + 'ratingValue': page.value?.rating, + 'ratingCount': page.value?.reviewsCount, + 'reviewCount': page.value?.reviewsCount, + 'bestRating': 5, + 'worstRating': 1, + }, }), ]) From dd64b43802219c754174b6bfcd59ffd3595ca73a Mon Sep 17 00:00:00 2001 From: Nick Kosarev Date: Tue, 16 Dec 2025 11:42:27 +0200 Subject: [PATCH 3/3] chore: update --- apps/web-app/app/pages/[pageSlug].vue | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/web-app/app/pages/[pageSlug].vue b/apps/web-app/app/pages/[pageSlug].vue index 1a5dcd6..a50741b 100644 --- a/apps/web-app/app/pages/[pageSlug].vue +++ b/apps/web-app/app/pages/[pageSlug].vue @@ -81,11 +81,12 @@ const submenuItems = computed(() => [ ]) useSchemaOrg([ - defineLocalBusiness({ - name: page.value?.title, - url: `${app.url}/${params.pageSlug}`, - priceRange: '₽', - aggregateRating: { + defineOrganization({ + '@type': 'LocalBusiness', + 'name': page.value?.title, + 'url': `${app.url}/${page.value?.slug}`, + 'priceRange': '₽', + 'aggregateRating': { '@type': 'AggregateRating', 'ratingValue': page.value?.rating, 'ratingCount': page.value?.reviewsCount,