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

@@ -2,9 +2,9 @@
<div class="landing-login"> <div class="landing-login">
<section class="landing-login-intro"> <section class="landing-login-intro">
<p class="landing-login-eyebrow">YpChat</p> <p class="landing-login-eyebrow">YpChat</p>
<h2>Direkt in den Chat</h2> <h2>Singles kennenlernen, privat chatten</h2>
<p class="landing-login-copy"> <p class="landing-login-copy">
Kompakt, schnell und ohne Umwege. Erstelle dein Profil und starte sofort eine Unterhaltung. Starte kostenlos mit einem Nicknamen. Alter, Geschlecht und Land genügen, damit du passende Kontakte finden und direkt schreiben kannst.
</p> </p>
<div class="landing-login-features"> <div class="landing-login-features">
<span>Weltweiter Chat</span> <span>Weltweiter Chat</span>
@@ -63,6 +63,30 @@
</div> </div>
</form> </form>
</section> </section>
<section class="landing-login-guide" aria-label="Informationen zu YpChat">
<h2>So funktioniert der Single Chat</h2>
<div class="landing-login-guide-grid">
<article>
<h3>Kurz Profil anlegen</h3>
<p>Wähle einen Nicknamen und gib die nötigen Basisangaben an. Eine lange Registrierung ist nicht nötig.</p>
</article>
<article>
<h3>Neue Kontakte finden</h3>
<p>Suche nach Singles und beginne private Gespräche. Bilder kannst du direkt im Chat austauschen.</p>
</article>
<article>
<h3>Sicher chatten</h3>
<p>Nutze einen Nicknamen, teile keine sensiblen Daten und blockiere oder melde Kontakte bei Bedarf.</p>
</article>
</div>
<p class="landing-login-guide-links">
<router-link to="/single-chat-ohne-anmeldung">Chat ohne Anmeldung</router-link>
<router-link to="/single-treff-chat">Singles kennenlernen</router-link>
<router-link to="/ratgeber/erste-nachricht">Tipps für die erste Nachricht</router-link>
<router-link to="/sicherheit">Sicher chatten</router-link>
</p>
</section>
</div> </div>
</template> </template>
@@ -182,6 +206,56 @@ function handleSubmit() {
</script> </script>
<style scoped> <style scoped>
.landing-login-guide {
grid-column: 1 / -1;
border: 1px solid #d7dfd9;
border-radius: 12px;
background: #ffffff;
padding: 18px;
}
.landing-login-guide h2,
.landing-login-guide h3 {
color: #18201b;
}
.landing-login-guide h2 {
margin: 0 0 12px;
}
.landing-login-guide h3 {
margin: 0 0 6px;
font-size: 17px;
}
.landing-login-guide p {
margin: 0;
}
.landing-login-guide-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 14px;
}
.landing-login-guide-grid article {
border: 1px solid #d7dfd9;
border-radius: 10px;
padding: 14px;
}
.landing-login-guide-links {
display: flex;
flex-wrap: wrap;
gap: 8px 16px;
margin-top: 16px !important;
}
.landing-login-guide-links a {
color: #245c3a;
font-weight: 700;
}
.landing-login { .landing-login {
width: 80%; width: 80%;
max-width: 1400px; max-width: 1400px;
@@ -366,5 +440,9 @@ function handleSubmit() {
.landing-login-intro h2 { .landing-login-intro h2 {
font-size: 24px; font-size: 24px;
} }
.landing-login-guide-grid {
grid-template-columns: 1fr;
}
} }
</style> </style>

View File

@@ -159,7 +159,7 @@
<span class="app-brand-mark">Y</span> <span class="app-brand-mark">Y</span>
<div class="app-brand-copy"> <div class="app-brand-copy">
<span class="app-brand-eyebrow">YpChat</span> <span class="app-brand-eyebrow">YpChat</span>
<h1>Chat</h1> <h1>Kostenloser Single Chat</h1>
</div> </div>
</div> </div>
<HeaderAdBanner /> <HeaderAdBanner />

View File

@@ -39,14 +39,12 @@
</section> </section>
<section class="support-section"> <section class="support-section">
<h3>Passende Themen im Single Chat</h3> <h3>Weitere Themen bei YPChat</h3>
<p> <p>
Viele Nutzer suchen nach einem kostenlosen Single Chat, einem Chat ohne lange Anmeldung oder einem Single Treff Entdecke weitere Bereiche rund um den Chat-Einstieg, neue Kontakte und sichere Gespräche.
fuer neue Kontakte. YpChat buendelt diese Einstiege auf einer Plattform: schnell starten, privat schreiben,
respektvoll bleiben.
</p> </p>
<ul> <ul>
<li><router-link to="/kostenloser-single-chat">Kostenloser Single Chat</router-link></li> <li><router-link to="/">Chat starten</router-link></li>
<li><router-link to="/single-chat-ohne-anmeldung">Single Chat ohne Anmeldung</router-link></li> <li><router-link to="/single-chat-ohne-anmeldung">Single Chat ohne Anmeldung</router-link></li>
<li><router-link to="/single-treff-chat">Single Treff Chat</router-link></li> <li><router-link to="/single-treff-chat">Single Treff Chat</router-link></li>
</ul> </ul>

View File

@@ -395,18 +395,10 @@ for (const locale of SEO_LOCALES) {
} }
function buildSitemapXml() { function buildSitemapXml() {
const currentDate = new Date().toISOString().split('T')[0]; const urls = Object.values(seoData)
const urls = Object.entries(seoData) .map((meta) => ` <url>
.map(([route, meta]) => {
const priority = route === '/' ? '1.0' : '0.8';
const changefreq = route === '/' ? 'daily' : 'weekly';
return ` <url>
<loc>${meta.ogUrl}</loc> <loc>${meta.ogUrl}</loc>
<lastmod>${currentDate}</lastmod> </url>`)
<changefreq>${changefreq}</changefreq>
<priority>${priority}</priority>
</url>`;
})
.join('\n'); .join('\n');
return `<?xml version="1.0" encoding="UTF-8"?> return `<?xml version="1.0" encoding="UTF-8"?>
@@ -461,6 +453,9 @@ function upsertJsonLd(html, schema) {
function upsertHreflangLinks(html, route) { function upsertHreflangLinks(html, route) {
const cleaned = html.replace(/<link\s+rel="alternate"\s+hreflang="[^"]+"\s+href="[^"]*"\s*>\n?/g, ''); 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( const links = SEO_LOCALES.map(
(locale) => ` <link rel="alternate" hreflang="${locale.code}" href="${SITE_URL}/${locale.code}">` (locale) => ` <link rel="alternate" hreflang="${locale.code}" href="${SITE_URL}/${locale.code}">`
); );
@@ -503,6 +498,21 @@ function buildLocalizedLandingContent(route, __dirname) {
</section>`; </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) { function buildSeoLandingContent(route) {
const page = landingPages.find((entry) => entry.route === route); const page = landingPages.find((entry) => entry.route === route);
if (!page) return ''; 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> <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> <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> <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>`; </section>`;
} }
@@ -557,10 +567,7 @@ function generateHTML(route, meta, __dirname) {
html = upsertHreflangLinks(html, route); html = upsertHreflangLinks(html, route);
if (route === '/') { if (route === '/') {
const deLanding = buildLocalizedLandingContent('/de', __dirname); html = html.replace('<div id="app"></div>', `<div id="app">${buildHomeSeoContent()}</div>`);
if (deLanding) {
html = html.replace('<div id="app"></div>', `<div id="app">${deLanding}</div>`);
}
} }
if (SEO_LOCALES.some((locale) => `/${locale.code}` === route)) { if (SEO_LOCALES.some((locale) => `/${locale.code}` === route)) {