feat(seo): site meta composable + Open Graph image generation
Adds `useSiteMeta()` composable that wraps useSeoMeta with site defaults (title template, canonical URL, og/twitter image, og:site_name) and absolute-URL handling via runtimeConfig.public.appUrl. Adds /og/events/[slug].png route that renders per-event OG images via satori + @resvg/resvg-js, cached on disk by slug + updatedAt. Bundles Brygada 1918 + Commit Mono fonts as server assets, ships a fallback default.png, and patches @shuding/opentype.js via patch-package. Converts ~25 pages from useHead to useSiteMeta and adds noindex on private/auth/admin pages.
This commit is contained in:
parent
877ef1a220
commit
31144617d7
36 changed files with 1182 additions and 53 deletions
|
|
@ -117,9 +117,11 @@ const handlePurchaseSuccess = () => {
|
|||
refreshNuxtData()
|
||||
}
|
||||
|
||||
useHead(() => ({
|
||||
title: series.value ? `${series.value.title} - Event Series - Ghost Guild` : 'Event Series - Ghost Guild',
|
||||
meta: [{ name: 'description', content: series.value?.description || 'Multi-event series' }],
|
||||
useSiteMeta(() => ({
|
||||
title: series.value ? `${series.value.title} · Event Series` : 'Event Series',
|
||||
description:
|
||||
series.value?.description ||
|
||||
(series.value?.title ? `${series.value.title} — a Ghost Guild event series.` : undefined),
|
||||
}))
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -72,15 +72,10 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
useHead({
|
||||
title: "Event Series - Ghost Guild",
|
||||
meta: [
|
||||
{
|
||||
name: "description",
|
||||
content:
|
||||
"Multi-session events on cooperative topics for game developers.",
|
||||
},
|
||||
],
|
||||
useSiteMeta({
|
||||
title: "Event Series",
|
||||
description:
|
||||
"Multi-session event series on cooperative topics — from foundations courses to practitioner cohorts.",
|
||||
});
|
||||
|
||||
const { data: seriesData, pending } = await useFetch("/api/series", {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue