feat(07-01): wire global schema.org Person + WebSite and sitemap sources
- nuxt.config.ts: register 'nuxt-schema-org' module + sitemap.sources=['/api/__sitemap__/urls']
- app/utils/seo-person.ts: KILLIAN_PERSON_ID + killianPerson (derived from siteConfig, email excluded)
- app/app.vue: useSchemaOrg([definePerson(killianPerson), defineWebSite({name, inLanguage})]) appended (D-12)
- Verified SSR: /fr emits JSON-LD Person @id=#killian + WebSite (curl, pas d'hydratation)
This commit is contained in:
+10
@@ -1,4 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { killianPerson } from '~/utils/seo-person'
|
||||||
|
|
||||||
const { locale } = useI18n()
|
const { locale } = useI18n()
|
||||||
const head = useLocaleHead({ seo: true })
|
const head = useLocaleHead({ seo: true })
|
||||||
|
|
||||||
@@ -7,6 +9,14 @@ useHead({
|
|||||||
link: computed(() => head.value.link || []),
|
link: computed(() => head.value.link || []),
|
||||||
meta: computed(() => head.value.meta || []),
|
meta: computed(() => head.value.meta || []),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
useSchemaOrg([
|
||||||
|
definePerson(killianPerson),
|
||||||
|
defineWebSite({
|
||||||
|
name: "Killian' Dal-Cin — Hytale Plugin Developer",
|
||||||
|
inLanguage: ['fr-FR', 'en-US'],
|
||||||
|
}),
|
||||||
|
])
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* Global Person identity for schema.org (Killian Dal-Cin).
|
||||||
|
* Consumed by: app/app.vue (definePerson global) and app/pages/blog/[slug].vue (author/publisher @id ref).
|
||||||
|
* Derives URLs from siteConfig — single source of truth.
|
||||||
|
*/
|
||||||
|
import { siteConfig } from '~/data/site'
|
||||||
|
|
||||||
|
export const KILLIAN_PERSON_ID = '#killian'
|
||||||
|
|
||||||
|
export const killianPerson = {
|
||||||
|
'@id': KILLIAN_PERSON_ID,
|
||||||
|
name: "Killian' Dal-Cin",
|
||||||
|
url: siteConfig.url,
|
||||||
|
jobTitle: siteConfig.jobTitle,
|
||||||
|
sameAs: siteConfig.social
|
||||||
|
.filter((s) => s.name !== 'Email')
|
||||||
|
.map((s) => s.url),
|
||||||
|
} as const
|
||||||
@@ -9,6 +9,7 @@ export default defineNuxtConfig({
|
|||||||
'@nuxt/eslint',
|
'@nuxt/eslint',
|
||||||
'@nuxtjs/i18n',
|
'@nuxtjs/i18n',
|
||||||
'@nuxtjs/sitemap',
|
'@nuxtjs/sitemap',
|
||||||
|
'nuxt-schema-org',
|
||||||
'nuxt-gtag',
|
'nuxt-gtag',
|
||||||
],
|
],
|
||||||
components: [
|
components: [
|
||||||
@@ -31,6 +32,9 @@ export default defineNuxtConfig({
|
|||||||
url: 'https://killiandalcin.fr',
|
url: 'https://killiandalcin.fr',
|
||||||
name: "Killian' DAL-CIN - Developpeur Full Stack",
|
name: "Killian' DAL-CIN - Developpeur Full Stack",
|
||||||
},
|
},
|
||||||
|
sitemap: {
|
||||||
|
sources: ['/api/__sitemap__/urls'],
|
||||||
|
},
|
||||||
i18n: {
|
i18n: {
|
||||||
strategy: 'prefix',
|
strategy: 'prefix',
|
||||||
defaultLocale: 'fr',
|
defaultLocale: 'fr',
|
||||||
|
|||||||
Reference in New Issue
Block a user