diff --git a/nuxt.config.ts b/nuxt.config.ts
index 3833db3..6a786fa 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -156,6 +156,7 @@ export default defineNuxtConfig({
{ name: 'application-name', content: 'Pretendo Network' },
{ name: 'msapplication-TileColor', content: '#1b1f3b' },
{ name: 'theme-color', content: '#1b1f3b' },
+ { property: 'og:title', content: 'Pretendo Network' },
{
property: 'og:description',
content:
diff --git a/src/composables/customSeoMeta.ts b/src/composables/customSeoMeta.ts
new file mode 100644
index 0000000..fa4f897
--- /dev/null
+++ b/src/composables/customSeoMeta.ts
@@ -0,0 +1,36 @@
+import type { UseSeoMetaInput } from '@unhead/vue';
+
+export type CustomSeoMetaOptions = UseSeoMetaInput & {
+ subsection?: string;
+};
+
+export default function (args?: CustomSeoMetaOptions) {
+ let newTitleTemplate = '';
+
+ switch (args?.subsection) {
+ case ('account'): {
+ newTitleTemplate = 'Account | Pretendo Network';
+ break;
+ }
+ case ('terms'): {
+ newTitleTemplate = 'Terms | Pretendo Network';
+ break;
+ }
+ case ('blog'): {
+ newTitleTemplate = 'Blog | Pretendo Network';
+ break;
+ }
+ case ('docs'): {
+ newTitleTemplate = 'Docs | Pretendo Network';
+ break;
+ }
+ default: {
+ newTitleTemplate = 'Pretendo Network';
+ }
+ }
+
+ const newTitle = args?.title ? `${args?.title} | ${newTitleTemplate}` : newTitleTemplate;
+
+ useHead({ title: newTitle });
+ useSeoMeta({ ...args, title: newTitle, ogTitle: newTitle, twitterTitle: newTitle, ogDescription: args?.description, twitterDescription: args?.description, twitterImage: args?.ogImage });
+}
diff --git a/src/layouts/default.vue b/src/layouts/default.vue
index 5b751a0..890f81f 100644
--- a/src/layouts/default.vue
+++ b/src/layouts/default.vue
@@ -1,9 +1,4 @@
diff --git a/src/layouts/docs.vue b/src/layouts/docs.vue
index 45e36b9..7985900 100644
--- a/src/layouts/docs.vue
+++ b/src/layouts/docs.vue
@@ -3,14 +3,6 @@
const path = useRoute().fullPath;
const isSidebarOpen = ref(false);
-
-useHead({
- titleTemplate: (titleChunk) => {
- return titleChunk
- ? `${titleChunk} | Docs | Pretendo Network`
- : 'Docs | Pretendo Network';
- }
-});
diff --git a/src/pages/account/forgot-password.vue b/src/pages/account/forgot-password.vue
index 8524ab6..a8b9d9c 100644
--- a/src/pages/account/forgot-password.vue
+++ b/src/pages/account/forgot-password.vue
@@ -48,6 +48,8 @@ const { execute, isLoading } = useAsync({
});
}
});
+
+customSeoMeta({ subsection: 'account', title: 'Forgot password' });
diff --git a/src/pages/account/index.vue b/src/pages/account/index.vue
index 363a930..737689e 100644
--- a/src/pages/account/index.vue
+++ b/src/pages/account/index.vue
@@ -154,9 +154,7 @@ const { execute: executeUnlinkDiscord, isLoading: isLoadingUnlink } = useAsync({
}
});
-useHead({
- title: `Account`
-});
+customSeoMeta({ subsection: 'account' });
diff --git a/src/pages/account/login.vue b/src/pages/account/login.vue
index 4347c88..35cf179 100644
--- a/src/pages/account/login.vue
+++ b/src/pages/account/login.vue
@@ -47,6 +47,8 @@ const { execute, isLoading } = useAsync({
});
}
});
+
+customSeoMeta({ subsection: 'account', title: 'Login' });
diff --git a/src/pages/account/miieditor.client.vue b/src/pages/account/miieditor.client.vue
index 40d82f8..aa612b8 100644
--- a/src/pages/account/miieditor.client.vue
+++ b/src/pages/account/miieditor.client.vue
@@ -15,9 +15,7 @@ definePageMeta({
const { data: profile } = await useApiFetch('/api/auth/me');
-useHead({
- title: 'Mii Editor | Pretendo Network'
-});
+customSeoMeta({ subsection: 'account', title: 'Mii Editor' });
const beforeUnload = (e: BeforeUnloadEvent) => {
e?.preventDefault();
diff --git a/src/pages/account/register.vue b/src/pages/account/register.vue
index caa59a3..c8c292d 100644
--- a/src/pages/account/register.vue
+++ b/src/pages/account/register.vue
@@ -55,6 +55,8 @@ const { execute, isLoading } = useAsync({
});
}
});
+
+customSeoMeta({ subsection: 'account', title: 'Register' });
diff --git a/src/pages/account/reset-password.vue b/src/pages/account/reset-password.vue
index c0c856d..542b858 100644
--- a/src/pages/account/reset-password.vue
+++ b/src/pages/account/reset-password.vue
@@ -30,6 +30,8 @@ const { execute, isLoading } = useAsync({
});
}
});
+
+customSeoMeta({ subsection: 'account', title: 'Reset passoword' });
diff --git a/src/pages/account/upgrade.vue b/src/pages/account/upgrade.vue
index 0c1a415..518b64b 100644
--- a/src/pages/account/upgrade.vue
+++ b/src/pages/account/upgrade.vue
@@ -81,10 +81,7 @@ function hasSubscription(priceId: string) {
profile.value?.stripeTier && priceId === profile.value.stripeTier.priceId
);
}
-
-useHead({
- title: `Upgrade`
-});
+customSeoMeta({ subsection: 'account', title: 'Upgrade' });
diff --git a/src/pages/blog/[slug].vue b/src/pages/blog/[slug].vue
index 9e9826b..cabc17b 100644
--- a/src/pages/blog/[slug].vue
+++ b/src/pages/blog/[slug].vue
@@ -8,16 +8,11 @@ if (!post.value) {
throw createError({ statusCode: 404, statusMessage: 'Page Not Found' });
}
-useHead({
- title: `${post.value.title} | Blog`,
- meta: [
- { property: 'description', content: post.value.caption },
- { property: 'og:description', content: post.value.caption },
- { property: 'og:image', content: post.value.cover_image },
- { property: 'og:image:alt', content: '' },
- { name: 'twitter:description', content: post.value.caption },
- { name: 'twitter:image', content: post.value.cover_image }
- ]
+customSeoMeta({
+ subsection: 'blog',
+ title: post.value.title,
+ description: post.value.caption,
+ ogImage: post.value.cover_image
});
diff --git a/src/pages/blog/index.vue b/src/pages/blog/index.vue
index ffb5f71..a94d169 100644
--- a/src/pages/blog/index.vue
+++ b/src/pages/blog/index.vue
@@ -1,13 +1,12 @@
diff --git a/src/pages/docs/[...slug].vue b/src/pages/docs/[...slug].vue
index a2e2e79..c54de8e 100644
--- a/src/pages/docs/[...slug].vue
+++ b/src/pages/docs/[...slug].vue
@@ -7,15 +7,10 @@ const { data: doc } = await useAsyncData(`docs-${slug}`, () => {
if (!doc.value) {
throw createError({ statusCode: 404, statusMessage: 'Page Not Found' });
}
-
-useHead({
- title: `${doc.value.title}`,
- meta: [
- { property: 'description', content: doc.value.description },
- { property: 'og:description', content: doc.value.description },
- { property: 'og:image:alt', content: '' },
- { name: 'twitter:description', content: doc.value.description }
- ]
+customSeoMeta({
+ subsection: 'docs',
+ title: doc.value.title,
+ description: doc.value.description
});
definePageMeta({
diff --git a/src/pages/docs/error/[code].vue b/src/pages/docs/error/[code].vue
index 385a47c..f9a2512 100644
--- a/src/pages/docs/error/[code].vue
+++ b/src/pages/docs/error/[code].vue
@@ -8,14 +8,10 @@ if (!error.value) {
throw createError({ statusCode: 404, statusMessage: 'Page Not Found' });
}
-useHead({
- title: `${error.value.code} | Docs`,
- meta: [
- { property: 'description', content: error.value.message },
- { property: 'og:description', content: error.value.message },
- { property: 'og:image:alt', content: '' },
- { name: 'twitter:description', content: error.value.message }
- ]
+customSeoMeta({
+ subsection: 'docs',
+ title: error.value.code,
+ description: error.value.message
});
definePageMeta({
diff --git a/src/pages/docs/errors.vue b/src/pages/docs/errors.vue
index a70fdc1..2db4901 100644
--- a/src/pages/docs/errors.vue
+++ b/src/pages/docs/errors.vue
@@ -36,25 +36,10 @@ const { data: searchResults } = await useAsyncData(
);
const results = computed(() => searchResults.value ?? []);
-useHead({
+customSeoMeta({
+ subsection: 'docs',
title: 'Search',
- meta: [
- {
- name: 'description',
- content:
- 'Got an error code? Find solutions here.'
- },
- {
- name: 'og:description',
- content:
- 'Got an error code? Find solutions here.'
- },
- {
- name: 'twitter:description',
- content:
- 'Got an error code? Find solutions here.'
- }
- ]
+ description: 'Got an error code? Find solutions here.'
});
definePageMeta({
diff --git a/src/pages/docs/install.vue b/src/pages/docs/install.vue
index e8c768a..1d54f49 100644
--- a/src/pages/docs/install.vue
+++ b/src/pages/docs/install.vue
@@ -1,23 +1,9 @@
diff --git a/src/pages/nso-legacy-pack.vue b/src/pages/nso-legacy-pack.vue
index 03a06f9..190da78 100644
--- a/src/pages/nso-legacy-pack.vue
+++ b/src/pages/nso-legacy-pack.vue
@@ -4,6 +4,7 @@ useHead({
link: [{ rel: 'stylesheet', href: 'https://use.typekit.net/gok5tsu.css' }]
});
+customSeoMeta();
diff --git a/src/pages/progress.vue b/src/pages/progress.vue
index eae48a1..778e776 100644
--- a/src/pages/progress.vue
+++ b/src/pages/progress.vue
@@ -1,6 +1,11 @@