feat(seo, routing): add Bisaya learning and German for Bisaya courses
All checks were successful
Deploy to production / deploy (push) Successful in 2m0s

- Introduced new routes for Bisaya learning and German for Bisaya courses, enhancing the marketing section of the application.
- Updated sitemap.xml to include new course URLs for better SEO visibility.
- Added localization entries for both courses in English and German, improving content accessibility for users.
- Enhanced SEO metadata generation for the new courses, ensuring proper indexing and visibility in search engines.
- Updated VocabLandingView to feature links to the new courses, improving user navigation and engagement.
This commit is contained in:
Torsten Schulz (local)
2026-04-20 08:28:00 +02:00
parent e6c90c219b
commit 71f2ee7c97
8 changed files with 492 additions and 0 deletions

View File

@@ -15,6 +15,16 @@
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.8</priority> <priority>0.8</priority>
</url> </url>
<url>
<loc>https://www.your-part.de/bisaya-lernen</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.your-part.de/deutsch-fuer-bisaya</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url> <url>
<loc>https://www.your-part.de/falukant</loc> <loc>https://www.your-part.de/falukant</loc>
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>

View File

@@ -32,6 +32,20 @@
"jsonLdDescription": "Interaktiver Vokabeltrainer mit Kursen, Lektionen und Übungen zum Sprachenlernen.", "jsonLdDescription": "Interaktiver Vokabeltrainer mit Kursen, Lektionen und Übungen zum Sprachenlernen.",
"jsonLdName": "YourPart Vokabeltrainer" "jsonLdName": "YourPart Vokabeltrainer"
}, },
"bisayaLearning": {
"title": "Bisaya lernen online - Cebuano fuer Anfaenger | YourPart",
"description": "Bisaya online lernen fuer deutschsprachige Anfaenger: Vokabeln, Satzmuster und Alltagssaetze fuer Familie, Reisen, Gesundheit und Gespraeche direkt im Browser ueben.",
"keywords": "Bisaya lernen, Cebuano lernen, Visaya lernen, Bisaya Vokabeln, Cebuano Anfaenger, Philippinen Sprache lernen, Bisaya Deutsch, Vokabeltrainer",
"jsonLdDescription": "Online-Kurs fuer deutschsprachige Anfaenger, die Bisaya/Cebuano mit Alltagssaetzen und Vokabeltraining lernen wollen.",
"jsonLdName": "Bisaya lernen fuer deutschsprachige Anfaenger"
},
"germanForBisaya": {
"title": "Deutsch fuer Bisaya-Sprecher lernen - A1 Alltag online | YourPart",
"description": "Deutsch online ueben fuer Cebuano-/Bisaya-Sprecher: Grundwortschatz, A1-orientierte Alltagssaetze, Arzt, Arbeit, Schule, Termine und Formulare im Browser trainieren.",
"keywords": "Deutsch fuer Bisaya, Deutsch fuer Cebuano, Deutsch lernen A1, German for Bisaya speakers, Deutsch Vokabeltrainer, Deutsch online lernen",
"jsonLdDescription": "Online-Kurs fuer Cebuano-/Bisaya-Sprecher, die deutsche Alltagssaetze und Grundwortschatz ueben wollen.",
"jsonLdName": "Deutsch fuer Bisaya-Sprecher"
},
"blogList": { "blogList": {
"title": "Blogs auf YourPart - Community-Beiträge und Themen", "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.", "description": "Entdecke öffentliche Blogs auf YourPart mit Community-Beiträgen, Gedanken, Erfahrungen und Themen aus verschiedenen Bereichen.",

View File

@@ -32,6 +32,20 @@
"jsonLdDescription": "Interactive vocabulary trainer with courses, lessons and exercises for language learning.", "jsonLdDescription": "Interactive vocabulary trainer with courses, lessons and exercises for language learning.",
"jsonLdName": "YourPart vocabulary trainer" "jsonLdName": "YourPart vocabulary trainer"
}, },
"bisayaLearning": {
"title": "Learn Bisaya online - Cebuano for beginners | YourPart",
"description": "Learn Bisaya online for German-speaking beginners: vocabulary, sentence patterns and everyday phrases for family, travel, health and conversations in the browser.",
"keywords": "learn Bisaya, learn Cebuano, Visaya, Bisaya vocabulary, Cebuano beginner, Philippine language, Bisaya German, vocabulary trainer",
"jsonLdDescription": "Online course for German-speaking beginners who want to learn Bisaya/Cebuano with everyday phrases and vocabulary practice.",
"jsonLdName": "Learn Bisaya for German-speaking beginners"
},
"germanForBisaya": {
"title": "Learn German for Bisaya speakers - A1 everyday German | YourPart",
"description": "Practice German online for Cebuano/Bisaya speakers: basic vocabulary, A1-oriented everyday sentences, doctor, work, school, appointments and forms in the browser.",
"keywords": "German for Bisaya, German for Cebuano, learn German A1, German vocabulary trainer, learn German online",
"jsonLdDescription": "Online course for Cebuano/Bisaya speakers who want to practice German everyday sentences and basic vocabulary.",
"jsonLdName": "German for Bisaya speakers"
},
"blogList": { "blogList": {
"title": "Blogs on YourPart - community posts and topics", "title": "Blogs on YourPart - community posts and topics",
"description": "Explore public blogs on YourPart with community posts, ideas, experiences and topics from many areas.", "description": "Explore public blogs on YourPart with community posts, ideas, experiences and topics from many areas.",

View File

@@ -1,6 +1,8 @@
const FalukantLandingView = () => import('../views/public/FalukantLandingView.vue'); const FalukantLandingView = () => import('../views/public/FalukantLandingView.vue');
const MinigamesLandingView = () => import('../views/public/MinigamesLandingView.vue'); const MinigamesLandingView = () => import('../views/public/MinigamesLandingView.vue');
const VocabLandingView = () => import('../views/public/VocabLandingView.vue'); const VocabLandingView = () => import('../views/public/VocabLandingView.vue');
const BisayaLearningLandingView = () => import('../views/public/BisayaLearningLandingView.vue');
const GermanForBisayaLandingView = () => import('../views/public/GermanForBisayaLandingView.vue');
const marketingRoutes = [ const marketingRoutes = [
{ {
@@ -36,6 +38,28 @@ const marketingRoutes = [
}, },
}, },
}, },
{
path: '/bisaya-lernen',
name: 'BisayaLearningLanding',
component: BisayaLearningLandingView,
meta: {
seo: {
i18nKey: 'bisayaLearning',
canonicalPath: '/bisaya-lernen',
},
},
},
{
path: '/deutsch-fuer-bisaya',
name: 'GermanForBisayaLanding',
component: GermanForBisayaLandingView,
meta: {
seo: {
i18nKey: 'germanForBisaya',
canonicalPath: '/deutsch-fuer-bisaya',
},
},
},
]; ];
export default marketingRoutes; export default marketingRoutes;

View File

@@ -219,6 +219,42 @@ export function buildRouteJsonLd(route, t, uiLocale) {
]; ];
} }
if (name === 'BisayaLearningLanding') {
return [
{
'@context': 'https://schema.org',
'@type': 'Course',
name: t('seo.bisayaLearning.jsonLdName'),
url: buildAbsoluteUrl('/bisaya-lernen'),
description: t('seo.bisayaLearning.jsonLdDescription'),
inLanguage: lang,
provider: {
'@type': 'Organization',
name: DEFAULT_SITE_NAME,
sameAs: buildAbsoluteUrl('/'),
},
},
];
}
if (name === 'GermanForBisayaLanding') {
return [
{
'@context': 'https://schema.org',
'@type': 'Course',
name: t('seo.germanForBisaya.jsonLdName'),
url: buildAbsoluteUrl('/deutsch-fuer-bisaya'),
description: t('seo.germanForBisaya.jsonLdDescription'),
inLanguage: lang,
provider: {
'@type': 'Organization',
name: DEFAULT_SITE_NAME,
sameAs: buildAbsoluteUrl('/'),
},
},
];
}
if (name === 'BlogList') { if (name === 'BlogList') {
return [ return [
{ {

View File

@@ -0,0 +1,179 @@
<template>
<main class="seo-landing">
<section class="intro">
<div class="intro__copy">
<p class="eyebrow">Bisaya online lernen</p>
<h1>Bisaya lernen fuer Alltag, Familie und Reisen</h1>
<p class="lead">
Der YourPart-Vokabeltrainer fuehrt deutschsprachige Anfaenger durch kurze Bisaya-Lektionen mit Wortschatz,
Satzmustern und Uebungen fuer echte Alltagssituationen.
</p>
<div class="actions">
<router-link class="cta" to="/vokabeltrainer">Zum Vokabeltrainer</router-link>
<router-link class="text-link" to="/deutsch-fuer-bisaya">Deutsch fuer Bisaya-Sprecher</router-link>
</div>
</div>
<img class="intro__image" src="/images/mascot/mascot_female.png" alt="YourPart Sprachtrainer" />
</section>
<section class="content-band">
<div class="content-grid">
<article>
<h2>Was du uebst</h2>
<p>
Begruessung, Familie, Essen, Wege, Preise, Gesundheit, Besuch und einfache Gespraeche. Der Kurs setzt auf
haeufige Saetze wie <strong>Naa ko sa balay</strong>, kurze Fragen und wiederholbare Muster.
</p>
</article>
<article>
<h2>Fuer wen es passt</h2>
<p>
Fuer deutschsprachige Lernende, die Cebuano/Bisaya im Alltag verstehen und erste eigene Saetze bilden
wollen. Der Kurs ist bewusst fuer Anfaenger aufgebaut.
</p>
</article>
<article>
<h2>Ehrliche Einordnung</h2>
<p>
Der Trainer ersetzt keinen Unterricht mit Muttersprachlern. Er hilft beim Einstieg, beim Wiederholen und
beim Aufbau von sicherem Grundwortschatz bis in vertraute A1-/fruehe A2-Situationen.
</p>
</article>
</div>
</section>
<section class="keyword-section">
<h2>Bisaya oder Cebuano?</h2>
<p>
Viele suchen nach Cebuano lernen, Bisaya lernen oder Visaya lernen. Auf YourPart verwenden wir Bisaya fuer die
Alltagssprache, die viele Menschen auf den Philippinen sprechen. Die Lektionen bleiben praktisch: kurze Saetze,
klare Bedeutungen und Uebungen direkt im Browser.
</p>
</section>
</main>
</template>
<script>
export default {
name: 'BisayaLearningLandingView'
};
</script>
<style scoped>
.seo-landing {
max-width: 1120px;
margin: 0 auto;
padding: 36px 20px 72px;
color: #1f2f1d;
}
.intro {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(180px, 280px);
align-items: center;
gap: 28px;
}
.intro__copy {
min-width: 0;
}
.eyebrow {
margin: 0 0 10px;
font-size: 0.82rem;
font-weight: 700;
text-transform: uppercase;
}
h1 {
margin: 0;
font-size: 2.7rem;
line-height: 1.08;
}
.lead {
max-width: 760px;
margin: 18px 0 0;
font-size: 1.1rem;
line-height: 1.65;
}
.intro__image {
width: 100%;
max-height: 320px;
object-fit: contain;
}
.actions {
display: flex;
align-items: center;
gap: 14px;
flex-wrap: wrap;
margin-top: 24px;
}
.cta,
.text-link {
min-height: 42px;
display: inline-flex;
align-items: center;
border-radius: 8px;
font-weight: 700;
text-decoration: none;
}
.cta {
padding: 0 18px;
background: #244f2b;
color: #fff;
}
.text-link {
color: #244f2b;
}
.content-band,
.keyword-section {
margin-top: 34px;
}
.content-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 18px;
}
article {
padding: 20px;
border: 1px solid rgba(31, 47, 29, 0.14);
border-radius: 8px;
background: #f7fbf2;
}
h2 {
margin: 0 0 10px;
}
p {
line-height: 1.65;
}
.keyword-section {
max-width: 820px;
}
@media (max-width: 760px) {
.intro,
.content-grid {
grid-template-columns: 1fr;
}
h1 {
font-size: 2.1rem;
}
.intro__image {
max-height: 240px;
}
}
</style>

View File

@@ -0,0 +1,169 @@
<template>
<main class="seo-landing">
<section class="intro">
<div class="intro__copy">
<p class="eyebrow">Pagkat-on og German para sa Bisaya ug Cebuano</p>
<h1>Pagpraktis og German nga magamit sa adlaw-adlaw</h1>
<p class="lead">
Ang YourPart nga kurso motabang sa Cebuano-/Bisaya-speaker nga magsugod sa German: pangumusta,
doktor, eskwelahan, trabaho, appointment, porma ug simple nga panag-istorya.
</p>
<div class="actions">
<router-link class="cta" to="/vokabeltrainer">Ablihi ang Sprachtrainer</router-link>
<router-link class="text-link" to="/bisaya-lernen">Bisaya para sa German-speaker</router-link>
</div>
</div>
<img class="intro__image" src="/images/mascot/mascot_male.png" alt="YourPart Deutschkurs" />
</section>
<section class="content-grid">
<article>
<h2>Una ang adlaw-adlaw</h2>
<p>
Ang mga leksiyon nagpraktis og simple nga German sentences para sa mga sitwasyon nga dali nimo kinahanglanon:
pagpaila sa kaugalingon, pagpangayo og tabang, appointment ug pagsabot sa sayop nga pagsinabtanay.
</p>
</article>
<article>
<h2>Gihimo para sa Bisaya-speaker</h2>
<p>
Ang kurso para gyud sa mga learner nga Cebuano o Bisaya ang background. Klaro ang kahulugan,
mubo ang patterns, ug praktikal ang mga example.
</p>
</article>
<article>
<h2>Tinuod nga tumong</h2>
<p>
Kini usa ka pagsugod para sa basic vocabulary ug unang sentence patterns. Dili kini pasalig sa opisyal nga
exam level, pero makatabang sa regular nga A1-style nga pagbalik-balik.
</p>
</article>
</section>
<section class="keyword-section">
<h2>Pagkat-on og German online, walay app</h2>
<p>
Pwede ka magpraktis diretso sa browser. Sa YourPart naa ang vocabulary trainer, leksiyon, repetition ug
community sa usa ka lugar, aron ang German practice ug exchange magkaduol ra.
</p>
</section>
</main>
</template>
<script>
export default {
name: 'GermanForBisayaLandingView'
};
</script>
<style scoped>
.seo-landing {
max-width: 1120px;
margin: 0 auto;
padding: 36px 20px 72px;
color: #223044;
}
.intro {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(180px, 280px);
align-items: center;
gap: 28px;
}
.eyebrow {
margin: 0 0 10px;
font-size: 0.82rem;
font-weight: 700;
text-transform: uppercase;
}
h1 {
margin: 0;
font-size: 2.7rem;
line-height: 1.08;
}
.lead {
max-width: 760px;
margin: 18px 0 0;
font-size: 1.1rem;
line-height: 1.65;
}
.intro__image {
width: 100%;
max-height: 320px;
object-fit: contain;
}
.actions {
display: flex;
align-items: center;
gap: 14px;
flex-wrap: wrap;
margin-top: 24px;
}
.cta,
.text-link {
min-height: 42px;
display: inline-flex;
align-items: center;
border-radius: 8px;
font-weight: 700;
text-decoration: none;
}
.cta {
padding: 0 18px;
background: #254b70;
color: #fff;
}
.text-link {
color: #254b70;
}
.content-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 18px;
margin-top: 34px;
}
article {
padding: 20px;
border: 1px solid rgba(34, 48, 68, 0.14);
border-radius: 8px;
background: #f4f8fb;
}
h2 {
margin: 0 0 10px;
}
p {
line-height: 1.65;
}
.keyword-section {
max-width: 820px;
margin-top: 34px;
}
@media (max-width: 760px) {
.intro,
.content-grid {
grid-template-columns: 1fr;
}
h1 {
font-size: 2.1rem;
}
.intro__image {
max-height: 240px;
}
}
</style>

View File

@@ -23,6 +23,23 @@
<p>{{ $t('home.vocabLanding.feature3Text') }}</p> <p>{{ $t('home.vocabLanding.feature3Text') }}</p>
</article> </article>
</div> </div>
<div class="course-links" aria-label="Sprachkurs-Schwerpunkte">
<article>
<h2>Bisaya lernen</h2>
<p>
Kurs fuer deutschsprachige Anfaenger mit Cebuano/Bisaya-Wortschatz, Alltagssaetzen und kurzen Uebungen.
</p>
<router-link to="/bisaya-lernen">Bisaya-Kurs ansehen</router-link>
</article>
<article>
<h2>Deutsch fuer Bisaya-Sprecher</h2>
<p>
Einstieg in deutsche Alltagssaetze fuer Cebuano-/Bisaya-Sprecher: Termine, Arbeit, Arzt und Schule.
</p>
<router-link to="/deutsch-fuer-bisaya">Deutschkurs ansehen</router-link>
</article>
</div>
</section> </section>
</template> </template>
@@ -88,6 +105,13 @@ export default {
margin-top: 28px; margin-top: 28px;
} }
.course-links {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 18px;
margin-top: 28px;
}
.features article { .features article {
padding: 24px; padding: 24px;
border-radius: var(--radius-lg); border-radius: var(--radius-lg);
@@ -95,13 +119,35 @@ export default {
border: 1px solid rgba(31, 47, 29, 0.08); border: 1px solid rgba(31, 47, 29, 0.08);
} }
.course-links article {
padding: 24px;
border-radius: 8px;
background: #fff;
border: 1px solid rgba(31, 47, 29, 0.12);
}
.features h2 { .features h2 {
margin-top: 0; margin-top: 0;
margin-bottom: 10px; margin-bottom: 10px;
} }
.course-links h2 {
margin-top: 0;
margin-bottom: 10px;
}
.features p { .features p {
margin: 0; margin: 0;
line-height: 1.65; line-height: 1.65;
} }
.course-links p {
margin: 0 0 14px;
line-height: 1.65;
}
.course-links a {
color: #244f2b;
font-weight: 700;
}
</style> </style>