Verbesserung der Benutzeroberfläche und Inhalte für den Single Chat
All checks were successful
Deploy SingleChat / deploy (push) Successful in 51s

This commit is contained in:
Torsten Schulz (local)
2026-08-20 15:49:39 +02:00
parent 86e90c351f
commit 83d4d0be38
4 changed files with 107 additions and 24 deletions

View File

@@ -395,18 +395,10 @@ for (const locale of SEO_LOCALES) {
}
function buildSitemapXml() {
const currentDate = new Date().toISOString().split('T')[0];
const urls = Object.entries(seoData)
.map(([route, meta]) => {
const priority = route === '/' ? '1.0' : '0.8';
const changefreq = route === '/' ? 'daily' : 'weekly';
return ` <url>
const urls = Object.values(seoData)
.map((meta) => ` <url>
<loc>${meta.ogUrl}</loc>
<lastmod>${currentDate}</lastmod>
<changefreq>${changefreq}</changefreq>
<priority>${priority}</priority>
</url>`;
})
</url>`)
.join('\n');
return `<?xml version="1.0" encoding="UTF-8"?>
@@ -461,6 +453,9 @@ function upsertJsonLd(html, schema) {
function upsertHreflangLinks(html, route) {
const cleaned = html.replace(/<link\s+rel="alternate"\s+hreflang="[^"]+"\s+href="[^"]*"\s*>\n?/g, '');
const isLocalizedHome = route === '/' || SEO_LOCALES.some((locale) => `/${locale.code}` === route);
if (!isLocalizedHome) return cleaned;
const links = SEO_LOCALES.map(
(locale) => ` <link rel="alternate" hreflang="${locale.code}" href="${SITE_URL}/${locale.code}">`
);
@@ -503,6 +498,21 @@ function buildLocalizedLandingContent(route, __dirname) {
</section>`;
}
function buildHomeSeoContent() {
return `<section lang="de" style="max-width:960px;margin:24px auto;padding:0 16px;font:400 16px/1.6 sans-serif;color:#344038;">
<p style="font:700 12px/1.2 sans-serif;color:#637067;text-transform:uppercase;margin:0 0 6px;">YPChat</p>
<h1 style="font:700 34px/1.15 sans-serif;color:#18201b;margin:0 0 12px;">Kostenloser Single Chat ohne Anmeldung</h1>
<p style="margin:0 0 18px;max-width:760px;">Bei YPChat kannst du kostenlos neue Singles kennenlernen, privat schreiben und direkt mit einem Nicknamen starten. Für den Einstieg wählst du Nickname, Alter, Geschlecht und Land eine lange Registrierung ist nicht nötig.</p>
<div style="display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;">
<article style="border:1px solid #d7dfd9;border-radius:12px;padding:14px;background:#fff;"><h2 style="font:600 20px/1.25 sans-serif;color:#18201b;margin:0 0 8px;">Singles kennenlernen</h2><p style="margin:0;">Suche nach passenden Kontakten und beginne Gespräche in deinem Tempo.</p></article>
<article style="border:1px solid #d7dfd9;border-radius:12px;padding:14px;background:#fff;"><h2 style="font:600 20px/1.25 sans-serif;color:#18201b;margin:0 0 8px;">Privat und respektvoll chatten</h2><p style="margin:0;">Private Unterhaltungen, Bilder im Chat sowie Blockier- und Meldefunktionen geben dir Kontrolle über deine Kontakte.</p></article>
<article style="border:1px solid #d7dfd9;border-radius:12px;padding:14px;background:#fff;"><h2 style="font:600 20px/1.25 sans-serif;color:#18201b;margin:0 0 8px;">Ohne lange Anmeldung starten</h2><p style="margin:0;">Lege ein kurzes Profil an und öffne den Chat direkt im Browser.</p></article>
</div>
<section style="margin-top:24px;"><h2 style="font:600 24px/1.25 sans-serif;color:#18201b;margin:0 0 8px;">Häufige Fragen zum kostenlosen Single Chat</h2><h3 style="font:600 18px/1.3 sans-serif;color:#18201b;margin:16px 0 4px;">Ist der Einstieg kostenlos?</h3><p style="margin:0;">Ja. Du kannst dein Profil starten und den Chat kostenlos nutzen.</p><h3 style="font:600 18px/1.3 sans-serif;color:#18201b;margin:16px 0 4px;">Was brauche ich für den Start?</h3><p style="margin:0;">Ein Nickname sowie Alter, Geschlecht und Land genügen für den Einstieg.</p></section>
<nav aria-label="Weitere Themen" style="margin-top:22px;"><strong style="color:#18201b;">Mehr zu YPChat:</strong> <a href="/single-chat-ohne-anmeldung">Chat ohne Anmeldung</a> · <a href="/single-treff-chat">Singles kennenlernen im Single Treff Chat</a> · <a href="/ratgeber/erste-nachricht">Tipps für die erste Nachricht</a> · <a href="/sicherheit">Sicher und anonym chatten</a></nav>
</section>`;
}
function buildSeoLandingContent(route) {
const page = landingPages.find((entry) => entry.route === route);
if (!page) return '';
@@ -519,7 +529,7 @@ function buildSeoLandingContent(route) {
<h1 style="font:700 34px/1.15 sans-serif;color:#18201b;margin:0 0 12px;">${escapeHtml(page.heading)}</h1>
<p style="font:400 16px/1.6 sans-serif;color:#344038;margin:0 0 18px;max-width:760px;">${escapeHtml(page.intro)}</p>
<div style="display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;">${sectionMarkup}</div>
<p style="font:400 15px/1.6 sans-serif;color:#344038;margin:18px 0 0;">Weitere Einstiege: <a href="/kostenloser-single-chat">kostenloser Single Chat</a>, <a href="/single-chat-ohne-anmeldung">Single Chat ohne Anmeldung</a>, <a href="/single-treff-chat">Single Treff Chat</a>.</p>
<p style="font:400 15px/1.6 sans-serif;color:#344038;margin:18px 0 0;">Entdecke weitere Bereiche von YPChat: <a href="/">Chat starten</a>, <a href="/single-chat-ohne-anmeldung">Chat ohne Anmeldung</a>, <a href="/single-treff-chat">Single Treff Chat</a> und <a href="/ratgeber">Ratgeber für bessere Gespräche</a>.</p>
</section>`;
}
@@ -557,10 +567,7 @@ function generateHTML(route, meta, __dirname) {
html = upsertHreflangLinks(html, route);
if (route === '/') {
const deLanding = buildLocalizedLandingContent('/de', __dirname);
if (deLanding) {
html = html.replace('<div id="app"></div>', `<div id="app">${deLanding}</div>`);
}
html = html.replace('<div id="app"></div>', `<div id="app">${buildHomeSeoContent()}</div>`);
}
if (SEO_LOCALES.some((locale) => `/${locale.code}` === route)) {