feat(seo): enhance multilingual support and SEO handling
All checks were successful
Deploy to production / deploy (push) Successful in 2m46s
All checks were successful
Deploy to production / deploy (push) Successful in 2m46s
- Added support for multiple languages in the frontend, including English, Spanish, and Cebuano, improving accessibility for a broader audience. - Implemented hreflang links for better SEO performance, ensuring search engines can correctly index language-specific content. - Updated SEO metadata handling to utilize internationalization keys, enhancing the clarity and relevance of page titles and descriptions. - Refactored SEO utility functions to streamline the management of OpenGraph and hreflang attributes, improving maintainability and performance.
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
const BlogListView = () => import('@/views/blog/BlogListView.vue');
|
||||
const BlogView = () => import('@/views/blog/BlogView.vue');
|
||||
const BlogEditorView = () => import('@/views/blog/BlogEditorView.vue');
|
||||
import { buildAbsoluteUrl } from '@/utils/seo.js';
|
||||
|
||||
export default [
|
||||
{ path: '/blogs/create', name: 'BlogCreate', component: BlogEditorView, meta: { requiresAuth: true } },
|
||||
@@ -14,8 +13,7 @@ export default [
|
||||
props: route => ({ slug: route.params.slug }),
|
||||
meta: {
|
||||
seo: {
|
||||
title: 'Blogs auf YourPart',
|
||||
description: 'Öffentliche Blogs, Beiträge und Community-Inhalte auf YourPart.',
|
||||
i18nKey: 'blogPage',
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -27,8 +25,7 @@ export default [
|
||||
props: true,
|
||||
meta: {
|
||||
seo: {
|
||||
title: 'Blogs auf YourPart',
|
||||
description: 'Öffentliche Blogs, Beiträge und Community-Inhalte auf YourPart.',
|
||||
i18nKey: 'blogPage',
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -38,20 +35,8 @@ export default [
|
||||
component: BlogListView,
|
||||
meta: {
|
||||
seo: {
|
||||
title: 'Blogs auf YourPart - Community-Beiträge und Themen',
|
||||
description: 'Entdecke öffentliche Blogs auf YourPart mit Community-Beiträgen, Gedanken, Erfahrungen und Themen aus verschiedenen Bereichen.',
|
||||
keywords: 'Blogs, Community Blog, Artikel, Beiträge, YourPart',
|
||||
i18nKey: 'blogList',
|
||||
canonicalPath: '/blogs',
|
||||
jsonLd: [
|
||||
{
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'CollectionPage',
|
||||
name: 'Blogs auf YourPart',
|
||||
url: buildAbsoluteUrl('/blogs'),
|
||||
description: 'Öffentliche Blogs und Community-Beiträge auf YourPart.',
|
||||
inLanguage: 'de',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -9,7 +9,7 @@ import blogRoutes from './blogRoutes';
|
||||
import minigamesRoutes from './minigamesRoutes';
|
||||
import personalRoutes from './personalRoutes';
|
||||
import marketingRoutes from './marketingRoutes';
|
||||
import { applyRouteSeo, buildAbsoluteUrl } from '../utils/seo';
|
||||
import { applyRouteSeo } from '../utils/seo';
|
||||
import apiClient from '../utils/axios';
|
||||
|
||||
const HomeView = () => import('../views/HomeView.vue');
|
||||
@@ -21,25 +21,8 @@ const routes = [
|
||||
component: HomeView,
|
||||
meta: {
|
||||
seo: {
|
||||
title: 'YourPart - Community, Chat, Forum, Blogs, Vokabeltrainer und Spiele',
|
||||
description: 'YourPart ist eine Community-Plattform mit Chat, Forum, Blogs, Vokabeltrainer, dem Browser-Aufbauspiel Falukant und Minispielen.',
|
||||
keywords: 'YourPart, Community, Chat, Forum, Blogs, Vokabeltrainer, Browsergame, Falukant, Minispiele',
|
||||
i18nKey: 'home',
|
||||
canonicalPath: '/',
|
||||
jsonLd: [
|
||||
{
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'WebSite',
|
||||
name: 'YourPart',
|
||||
url: buildAbsoluteUrl('/'),
|
||||
inLanguage: 'de',
|
||||
description: 'Community-Plattform mit Chat, Forum, Blogs, Vokabeltrainer, Falukant und Browser-Minispielen.',
|
||||
potentialAction: {
|
||||
'@type': 'SearchAction',
|
||||
target: `${buildAbsoluteUrl('/blogs')}?q={search_term_string}`,
|
||||
'query-input': 'required name=search_term_string',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
import { buildAbsoluteUrl } from '../utils/seo';
|
||||
|
||||
const FalukantLandingView = () => import('../views/public/FalukantLandingView.vue');
|
||||
const MinigamesLandingView = () => import('../views/public/MinigamesLandingView.vue');
|
||||
const VocabLandingView = () => import('../views/public/VocabLandingView.vue');
|
||||
@@ -11,26 +9,8 @@ const marketingRoutes = [
|
||||
component: FalukantLandingView,
|
||||
meta: {
|
||||
seo: {
|
||||
title: 'Falukant - Mittelalterliches Browser-Aufbauspiel auf YourPart',
|
||||
description: 'Falukant ist das mittelalterliche Browser-Aufbauspiel auf YourPart mit Handel, Politik, Familie, Bildung und Charakterentwicklung.',
|
||||
keywords: 'Falukant, Browsergame, Aufbauspiel, Mittelalterspiel, Wirtschaftsspiel, Politikspiel, YourPart',
|
||||
i18nKey: 'falukant',
|
||||
canonicalPath: '/falukant',
|
||||
jsonLd: [
|
||||
{
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'VideoGame',
|
||||
name: 'Falukant',
|
||||
url: buildAbsoluteUrl('/falukant'),
|
||||
description: 'Mittelalterliches Browser-Aufbauspiel mit Handel, Politik, Familie und Charakterentwicklung.',
|
||||
gamePlatform: 'Web Browser',
|
||||
applicationCategory: 'Game',
|
||||
inLanguage: 'de',
|
||||
publisher: {
|
||||
'@type': 'Organization',
|
||||
name: 'YourPart',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -40,20 +20,8 @@ const marketingRoutes = [
|
||||
component: MinigamesLandingView,
|
||||
meta: {
|
||||
seo: {
|
||||
title: 'Minispiele auf YourPart - Match 3 und Taxi im Browser',
|
||||
description: 'Entdecke die Browser-Minispiele auf YourPart: Match 3 und Taxi bieten schnelle Spielrunden direkt auf der Plattform.',
|
||||
keywords: 'Minispiele, Browsergames, Match 3, Taxi Spiel, Casual Games, YourPart',
|
||||
i18nKey: 'minigames',
|
||||
canonicalPath: '/minigames',
|
||||
jsonLd: [
|
||||
{
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'CollectionPage',
|
||||
name: 'YourPart Minispiele',
|
||||
url: buildAbsoluteUrl('/minigames'),
|
||||
description: 'Browser-Minispiele auf YourPart mit Match 3 und Taxi.',
|
||||
inLanguage: 'de',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -63,22 +31,8 @@ const marketingRoutes = [
|
||||
component: VocabLandingView,
|
||||
meta: {
|
||||
seo: {
|
||||
title: 'Vokabeltrainer auf YourPart - Sprachen online lernen',
|
||||
description: 'Der Vokabeltrainer auf YourPart unterstützt dich beim Sprachenlernen mit interaktiven Lektionen, Kursen und Übungen.',
|
||||
keywords: 'Vokabeltrainer, Sprachen lernen, Online lernen, Sprachkurse, Übungen, YourPart',
|
||||
i18nKey: 'vocab',
|
||||
canonicalPath: '/vokabeltrainer',
|
||||
jsonLd: [
|
||||
{
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'SoftwareApplication',
|
||||
name: 'YourPart Vokabeltrainer',
|
||||
url: buildAbsoluteUrl('/vokabeltrainer'),
|
||||
description: 'Interaktiver Vokabeltrainer mit Kursen, Lektionen und Übungen zum Sprachenlernen.',
|
||||
applicationCategory: 'EducationalApplication',
|
||||
operatingSystem: 'Web',
|
||||
inLanguage: 'de',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user