This commit is contained in:
Torsten Schulz (notebook)
2026-05-12 10:32:14 +02:00
13 changed files with 890 additions and 62 deletions

1
client/public/ads.txt Normal file
View File

@@ -0,0 +1 @@
google.com, pub-1104166651501135, DIRECT, f08c47fec0942fa0

View File

@@ -3,11 +3,9 @@
<ins
ref="adElement"
class="adsbygoogle"
style="display:block"
style="display:inline-block;width:320px;height:50px"
:data-ad-client="adClient"
:data-ad-slot="adSlot"
data-ad-format="auto"
data-full-width-responsive="true"
></ins>
</div>
</template>
@@ -53,11 +51,16 @@ onMounted(async () => {
<style scoped>
.header-ad-banner {
flex: 1;
min-width: 280px;
max-width: 728px;
flex: 0 0 auto;
width: 320px;
min-width: 320px;
max-width: 320px;
height: 50px;
margin: 0 16px;
padding: 4px 0;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.header-ad-banner :deep(ins) {
@@ -66,9 +69,16 @@ onMounted(async () => {
@media (max-width: 960px) {
.header-ad-banner {
min-width: 220px;
max-width: 468px;
margin: 0 10px;
width: 300px;
min-width: 300px;
max-width: 300px;
height: 50px;
margin: 0 8px;
}
.header-ad-banner :deep(ins) {
width: 300px !important;
height: 50px !important;
}
}

View File

@@ -1,6 +1,7 @@
<template>
<div class="imprint-container">
<a href="/partners">Partner</a>
<a href="/ratgeber">Ratgeber</a>
<a href="/faq">FAQ</a>
<a href="/regeln">Regeln</a>
<a href="/sicherheit">Sicherheit</a>

View File

@@ -7,6 +7,11 @@ import FaqView from '../views/FaqView.vue';
import PrivacyView from '../views/PrivacyView.vue';
import RulesView from '../views/RulesView.vue';
import SafetyView from '../views/SafetyView.vue';
import GuideHubView from '../views/GuideHubView.vue';
import GuideFirstMessageView from '../views/GuideFirstMessageView.vue';
import GuideProfileView from '../views/GuideProfileView.vue';
import GuideSafetyView from '../views/GuideSafetyView.vue';
import GuideRedFlagsView from '../views/GuideRedFlagsView.vue';
const SITE_URL = 'https://www.ypchat.net';
const DEFAULT_IMAGE = `${SITE_URL}/static/favicon.png`;
@@ -152,6 +157,15 @@ const privacySchema = {
inLanguage: 'de-DE'
};
const guideHubSchema = {
'@context': 'https://schema.org',
'@type': 'CollectionPage',
name: 'Ratgeber - SingleChat',
url: `${SITE_URL}/ratgeber`,
description: 'Ratgeber mit Tipps zu erster Nachricht, Profilgestaltung, Datenschutz und sicheren Gespraechen im Single Chat.',
inLanguage: 'de-DE'
};
const routes = [
{
path: '/',
@@ -265,6 +279,86 @@ const routes = [
schema: privacySchema
}
},
{
path: '/ratgeber',
name: 'ratgeber',
component: GuideHubView,
meta: {
title: 'Ratgeber fuer privaten Single Chat - SingleChat',
description: 'Praxisnahe Ratgeberartikel zu Chat-Einstieg, Profiloptimierung, Sicherheit und Red Flags im Online-Chat.',
keywords: 'chat ratgeber, single chat tipps, profil tipps, sicher chatten, online chat red flags',
ogTitle: 'Ratgeber fuer privaten Single Chat - SingleChat',
ogDescription: 'Hilfreiche Leitfaeden fuer bessere Gespraeche und mehr Sicherheit im Chat.',
ogType: 'website',
image: DEFAULT_IMAGE,
robots: 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1',
schema: guideHubSchema
}
},
{
path: '/ratgeber/erste-nachricht',
name: 'ratgeber-erste-nachricht',
component: GuideFirstMessageView,
meta: {
title: 'Die erste Nachricht im Chat - Tipps & Beispiele',
description: 'So gelingt die erste Nachricht im Single Chat: konkrete Beispiele, typische Fehler und einfache Vorlagen.',
keywords: 'erste nachricht chat, anschreiben tipps, chat beispiele, single chat einstieg',
ogTitle: 'Die erste Nachricht im Chat - Tipps & Beispiele',
ogDescription: 'Konkrete Beispiele fuer einen natuerlichen und respektvollen Chat-Einstieg.',
ogType: 'article',
image: DEFAULT_IMAGE,
robots: 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1',
schema: null
}
},
{
path: '/ratgeber/profil-tipps',
name: 'ratgeber-profil-tipps',
component: GuideProfileView,
meta: {
title: 'Profil verbessern fuer bessere Chats - SingleChat',
description: 'Verbessere dein Chat-Profil mit klaren, ehrlichen Angaben und starte leichter passende Gespraeche.',
keywords: 'profil tipps chat, online profil verbessern, single chat profil',
ogTitle: 'Profil verbessern fuer bessere Chats - SingleChat',
ogDescription: 'Einfache Schritte fuer ein besseres Profil und passendere Unterhaltungen.',
ogType: 'article',
image: DEFAULT_IMAGE,
robots: 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1',
schema: null
}
},
{
path: '/ratgeber/sicher-chatten',
name: 'ratgeber-sicher-chatten',
component: GuideSafetyView,
meta: {
title: 'Sicher chatten und Daten schuetzen - SingleChat',
description: 'Datenschutz-Tipps fuer anonymes Chatten: Welche Informationen du teilen kannst und welche nicht.',
keywords: 'sicher chatten, datenschutz chat, anonym chat tipps',
ogTitle: 'Sicher chatten und Daten schuetzen - SingleChat',
ogDescription: 'Praktische Regeln fuer mehr Sicherheit und Privatsphaere im Online-Chat.',
ogType: 'article',
image: DEFAULT_IMAGE,
robots: 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1',
schema: null
}
},
{
path: '/ratgeber/red-flags',
name: 'ratgeber-red-flags',
component: GuideRedFlagsView,
meta: {
title: 'Red Flags im Online-Chat erkennen - SingleChat',
description: 'Warnzeichen bei Spam und Manipulation im Chat erkennen und richtig reagieren.',
keywords: 'red flags chat, online chat sicherheit, betrug chat erkennen',
ogTitle: 'Red Flags im Online-Chat erkennen - SingleChat',
ogDescription: 'Fruehe Warnsignale im Chat erkennen und sich wirksam schuetzen.',
ogType: 'article',
image: DEFAULT_IMAGE,
robots: 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1',
schema: null
}
},
{
path: '/mockup-redesign',
name: 'mockup-redesign',

View File

@@ -129,6 +129,7 @@
<h1>Chat</h1>
</div>
</div>
<HeaderAdBanner />
</header>
<div class="horizontal-box horizontal-box-login">
<div class="content login-content-shell">
@@ -154,6 +155,7 @@ import SearchView from '../components/SearchView.vue';
import InboxView from '../components/InboxView.vue';
import HistoryView from '../components/HistoryView.vue';
import ImprintContainer from '../components/ImprintContainer.vue';
import HeaderAdBanner from '../components/HeaderAdBanner.vue';
const chatStore = useChatStore();

View File

@@ -0,0 +1,120 @@
<template>
<div class="chat-container">
<header class="header">
<router-link to="/" class="app-brand app-brand-link">
<span class="app-brand-mark">S</span>
<div class="app-brand-copy">
<span class="app-brand-eyebrow">SingleChat</span>
<h1>Ratgeber</h1>
</div>
</router-link>
<HeaderAdBanner />
</header>
<main class="content-page">
<h2>Die erste Nachricht im Chat: einfach und wirksam</h2>
<p>
Der Einstieg entscheidet oft, ob aus einem Match wirklich ein Gespraech wird. Gute erste Nachrichten sind kurz,
freundlich und konkret. Vermeide austauschbare Einzeiler und beziehe dich auf ein Detail aus dem Profil.
</p>
<p>
Viele Nutzer scheitern nicht an fehlender Sympathie, sondern an unklarem Einstieg. Wer den ersten Kontakt als
kleine Einladung statt als Test versteht, bekommt haeufiger eine echte Antwort.
</p>
<h3>Ein guter Aufbau in drei Schritten</h3>
<ol>
<li>Begruessung mit Namen oder Nickname.</li>
<li>Eine konkrete Beobachtung oder Frage, die nicht kopiert wirkt.</li>
<li>Ein lockerer Abschluss, der eine Antwort leicht macht.</li>
</ol>
<h3>Wann eine Nachricht zu lang ist</h3>
<p>
Als Faustregel gilt: 1 bis 3 Saetze reichen am Anfang. Lange Monologe wirken schnell wie Copy-Paste. Besser ist
eine kurze Frage mit echtem Bezug und Raum fuer die Antwort.
</p>
<h3>Beispiele fuer bessere erste Nachrichten</h3>
<p>
Statt Hi, wie gehts? besser: Hi Lara, du schreibst, dass du gerne reist - was war dein schoenster Ort in den
letzten zwei Jahren?
</p>
<p>
Statt Na? besser: Hey Ben, dein Musikgeschmack klingt spannend. Eher ruhige Playlists oder energiegeladene
Tracks beim Arbeiten?
</p>
<p>
Statt Bist du echt? besser: Hi, ich bin neu hier und mag klare Gespraeche. Worueber schreibst du gerne zuerst:
Alltag, Freizeit oder Musik?
</p>
<h3>Typische Fehler vermeiden</h3>
<ul>
<li>Zu lange Texte direkt am Anfang.</li>
<li>Zu persoenliche Fragen in der ersten Nachricht.</li>
<li>Mehrfaches Nachfassen ohne Antwort.</li>
<li>Ironie ohne Kontext, die schnell falsch verstanden wird.</li>
</ul>
<h3>Wenn keine Antwort kommt</h3>
<p>
Nicht jede Nachricht fuehrt zu einem Gespraech. Das ist normal. Warte mit einem zweiten Kontakt mindestens etwas
Zeit und formuliere freundlich und kurz. Danach gilt: respektvoll weiterziehen statt Druck aufbauen.
</p>
<h3>Kurzcheck vor dem Absenden</h3>
<ul>
<li>Ist die Nachricht konkret statt austauschbar?</li>
<li>Ist sie freundlich und ohne Druck formuliert?</li>
<li>Enthaelt sie eine Frage, auf die man leicht antworten kann?</li>
</ul>
<p>
Mehr Tipps findest du auch in unserem
<router-link to="/ratgeber/profil-tipps">Profil-Ratgeber</router-link> und auf der Seite
<router-link to="/ratgeber/sicher-chatten">Sicher chatten</router-link>.
</p>
<p class="content-meta">
Redaktion: SingleChat Team · Zuletzt aktualisiert: 07.05.2026
</p>
</main>
<ImprintContainer />
</div>
</template>
<script setup>
import HeaderAdBanner from '../components/HeaderAdBanner.vue';
import ImprintContainer from '../components/ImprintContainer.vue';
</script>
<style scoped>
.content-page {
max-width: 980px;
margin: 0 auto;
padding: 20px 14px 36px;
line-height: 1.6;
color: #344038;
}
.content-page h2,
.content-page h3 {
color: #18201b;
}
.content-page a {
color: #245c3a;
}
.content-meta {
margin-top: 18px;
font-size: 12px;
color: #637067;
}
.app-brand-link {
text-decoration: none;
}
</style>

View File

@@ -0,0 +1,168 @@
<template>
<div class="chat-container">
<header class="header">
<router-link to="/" class="app-brand app-brand-link">
<span class="app-brand-mark">S</span>
<div class="app-brand-copy">
<span class="app-brand-eyebrow">SingleChat</span>
<h1>Ratgeber</h1>
</div>
</router-link>
<HeaderAdBanner />
</header>
<main class="content-page">
<h2>Ratgeber: Sicher und entspannt chatten</h2>
<p>
In unserem Ratgeber findest du praxisnahe Tipps rund um privaten Chat, Profilgestaltung und digitale Sicherheit.
Alle Inhalte sind speziell fuer SingleChat-Nutzer geschrieben und werden laufend erweitert.
</p>
<p>
Wenn du neu im Chat bist, starte am besten mit dem Leitfaden zur ersten Unterhaltung und arbeite dich dann zu
den Themen Datenschutz, Profilqualitaet und respektvolle Kommunikation vor.
</p>
<p>
Ziel dieser Artikel ist nicht, moeglichst viele Nachrichten zu erzeugen, sondern bessere Gespraeche mit
gegenseitigem Respekt. Deshalb kombinieren wir konkrete Formulierungsbeispiele mit Sicherheitsregeln und klaren
Handlungsempfehlungen fuer schwierige Situationen.
</p>
<section class="editor-note">
<h3>Wie dieser Ratgeber aufgebaut ist</h3>
<ul>
<li>Praxisnahe Schritt-fuer-Schritt-Anleitungen statt allgemeiner Floskeln.</li>
<li>Konkrete Beispiele fuer gute und schlechte Chat-Situationen.</li>
<li>Sicherheitsfokus: Datenschutz, Grenzsetzung und Verhalten bei Red Flags.</li>
<li>Regelmaessige Aktualisierung bei neuen Funktionen oder Moderationsregeln.</li>
</ul>
</section>
<section class="guide-grid">
<article class="guide-card">
<h3><router-link to="/ratgeber/erste-nachricht">Die erste Nachricht im Chat</router-link></h3>
<p>
Konkrete Formulierungen, typische Fehler und ein einfacher Aufbau, mit dem du natuerlich ins Gespraech
kommst.
</p>
</article>
<article class="guide-card">
<h3><router-link to="/ratgeber/profil-tipps">Profil verbessern in 10 Minuten</router-link></h3>
<p>
So waehlen Nutzer Nickname, Alter und Selbstbeschreibung so, dass sie passende Kontakte statt Zufallstreffer
erhalten.
</p>
</article>
<article class="guide-card">
<h3><router-link to="/ratgeber/sicher-chatten">Sicher chatten und Daten schuetzen</router-link></h3>
<p>
Datenschutz im Alltag: welche Informationen du teilen kannst und was du besser nie im Chat schreiben solltest.
</p>
</article>
<article class="guide-card">
<h3><router-link to="/ratgeber/red-flags">Red Flags im Online-Chat erkennen</router-link></h3>
<p>
Fruehe Warnzeichen bei Spam, Manipulation und Betrugsversuchen inklusive klarer Reaktionsempfehlungen.
</p>
</article>
</section>
<section class="next-steps">
<h3>Empfohlene Lesereihenfolge</h3>
<ol>
<li><router-link to="/ratgeber/erste-nachricht">Die erste Nachricht im Chat</router-link></li>
<li><router-link to="/ratgeber/profil-tipps">Profil verbessern in 10 Minuten</router-link></li>
<li><router-link to="/ratgeber/sicher-chatten">Sicher chatten und Daten schuetzen</router-link></li>
<li><router-link to="/ratgeber/red-flags">Red Flags im Online-Chat erkennen</router-link></li>
</ol>
</section>
<p class="content-meta">
Redaktion: SingleChat Team · Zuletzt aktualisiert: 07.05.2026
</p>
</main>
<ImprintContainer />
</div>
</template>
<script setup>
import HeaderAdBanner from '../components/HeaderAdBanner.vue';
import ImprintContainer from '../components/ImprintContainer.vue';
</script>
<style scoped>
.content-page {
max-width: 1020px;
margin: 0 auto;
padding: 20px 14px 36px;
line-height: 1.6;
color: #344038;
}
.content-page h2 {
margin: 0 0 10px;
color: #18201b;
}
.guide-grid {
margin-top: 16px;
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 14px;
}
.editor-note,
.next-steps {
margin-top: 18px;
border: 1px solid #d7dfd9;
border-radius: 12px;
background: #ffffff;
padding: 14px;
}
.editor-note h3,
.next-steps h3 {
margin: 0 0 8px;
color: #18201b;
}
.guide-card {
border: 1px solid #d7dfd9;
border-radius: 12px;
background: #ffffff;
padding: 14px;
}
.guide-card h3 {
margin: 0 0 6px;
}
.guide-card p {
margin: 0;
}
.guide-card a {
color: #1f6e43;
text-decoration: none;
}
.guide-card a:hover {
text-decoration: underline;
}
.content-meta {
margin-top: 18px;
font-size: 12px;
color: #637067;
}
.app-brand-link {
text-decoration: none;
}
@media (max-width: 760px) {
.guide-grid {
grid-template-columns: 1fr;
}
}
</style>

View File

@@ -0,0 +1,119 @@
<template>
<div class="chat-container">
<header class="header">
<router-link to="/" class="app-brand app-brand-link">
<span class="app-brand-mark">S</span>
<div class="app-brand-copy">
<span class="app-brand-eyebrow">SingleChat</span>
<h1>Ratgeber</h1>
</div>
</router-link>
<HeaderAdBanner />
</header>
<main class="content-page">
<h2>Profil verbessern in 10 Minuten</h2>
<p>
Ein gutes Profil muss nicht lang sein. Entscheidend ist, dass andere Nutzer schnell erkennen, wer du bist und
wie man mit dir ins Gespraech kommt. Schon kleine Anpassungen helfen, passendere Unterhaltungen zu starten.
</p>
<p>
Gute Profile reduzieren Missverstaendnisse: Erwartungen werden klarer, Gespraeche starten einfacher und der
Umgangston bleibt meist respektvoller.
</p>
<h3>1) Klarer, neutraler Nickname</h3>
<p>
Vermeide beleidigende Begriffe, reine Zahlencodes oder provozierende Namen. Ein klarer Nickname wirkt
vertrauenswuerdig und erleichtert den Einstieg.
</p>
<h3>2) Realistische Angaben zu Alter und Interessen</h3>
<p>
Ehrliche Angaben verbessern die Treffer in der Suche. Wer Alter, Interessen und Gespraechsthemen sauber angibt,
bekommt haeufiger Antworten mit echtem Bezug.
</p>
<ul>
<li>Nenne 2 bis 4 Interessen, die tatsaechlich zu deinem Alltag passen.</li>
<li>Vermeide ueberladene Listen ohne Prioritaeten.</li>
<li>Bleibe bei Angaben, die du im Chat auch glaubwuerdig erzaehlen kannst.</li>
</ul>
<h3>3) Einladende erste Formulierung</h3>
<p>
Eine kurze Profilzeile wie Mag Musik, Spaziergaenge und gute Gespraeche ueber Alltag und Reisen gibt direkt
einen Anknuepfungspunkt.
</p>
<p>
Schreibe lieber konkret als perfekt. Ein Satz mit persoenlicher Note funktioniert besser als allgemeine
Standardtexte.
</p>
<h3>4) Sicherheit immer mitdenken</h3>
<p>
Keine privaten Kontaktdaten im Profil und keine Hinweise auf Adresse, Arbeitgeber oder eindeutige Tagesroutinen.
Details zur Privatsphaere findest du unter
<router-link to="/ratgeber/sicher-chatten">Sicher chatten</router-link>.
</p>
<h3>5) Haeufige Profilfehler</h3>
<ul>
<li>Leeres Profil oder nur ein Emoji.</li>
<li>Widerspruechliche Angaben zwischen Profiltext und Suchfilter.</li>
<li>Abwertende Formulierungen gegen andere Nutzergruppen.</li>
</ul>
<h3>Mini-Checkliste in 60 Sekunden</h3>
<ol>
<li>Ist dein Nickname neutral und gut lesbar?</li>
<li>Sind Alter und Interessen aktuell?</li>
<li>Gibt es mindestens einen klaren Gespraechsanlass im Profiltext?</li>
</ol>
<p>
Fuer konkrete Einstiegsbeispiele lohnt sich unser Leitfaden
<router-link to="/ratgeber/erste-nachricht">Die erste Nachricht im Chat</router-link>.
</p>
<p class="content-meta">
Redaktion: SingleChat Team · Zuletzt aktualisiert: 07.05.2026
</p>
</main>
<ImprintContainer />
</div>
</template>
<script setup>
import HeaderAdBanner from '../components/HeaderAdBanner.vue';
import ImprintContainer from '../components/ImprintContainer.vue';
</script>
<style scoped>
.content-page {
max-width: 980px;
margin: 0 auto;
padding: 20px 14px 36px;
line-height: 1.6;
color: #344038;
}
.content-page h2,
.content-page h3 {
color: #18201b;
}
.content-page a {
color: #245c3a;
}
.content-meta {
margin-top: 18px;
font-size: 12px;
color: #637067;
}
.app-brand-link {
text-decoration: none;
}
</style>

View File

@@ -0,0 +1,106 @@
<template>
<div class="chat-container">
<header class="header">
<router-link to="/" class="app-brand app-brand-link">
<span class="app-brand-mark">S</span>
<div class="app-brand-copy">
<span class="app-brand-eyebrow">SingleChat</span>
<h1>Ratgeber</h1>
</div>
</router-link>
<HeaderAdBanner />
</header>
<main class="content-page">
<h2>Red Flags im Online-Chat erkennen</h2>
<p>
Nicht jede ungewoehnliche Nachricht ist automatisch ein Problem. Es gibt aber klare Warnsignale, die du ernst
nehmen solltest. Je frueher du sie erkennst, desto besser schuetzt du dich.
</p>
<p>
Red Flags sind besonders aussagekraeftig, wenn mehrere Punkte gleichzeitig auftreten. Achte deshalb weniger auf
eine einzelne Formulierung und mehr auf wiederkehrende Muster.
</p>
<h3>Hauefige Red Flags</h3>
<ul>
<li>Sehr schnelle emotionale Naehe ohne echten Austausch.</li>
<li>Widerspruechliche Angaben zu Alter, Wohnort oder Alltag.</li>
<li>Drang, den Chat sofort auf externe Messenger zu verlagern.</li>
<li>Anfragen zu Geld, Gutscheinen oder Zahlungsdiensten.</li>
<li>Druck durch Schuldgefuehle (Wenn du mich magst, dann ...).</li>
</ul>
<h3>Risikostufen einschaetzen</h3>
<ul>
<li>Niedrig: einzelne unklare Aussagen, aber kooperativer Ton.</li>
<li>Mittel: wiederholte Ausweichantworten und Druck zu externen Kanaelen.</li>
<li>Hoch: Geldforderungen, Drohungen oder klare Manipulationsversuche.</li>
</ul>
<h3>Was du konkret tun kannst</h3>
<p>
Stelle Rueckfragen zu unklaren Aussagen. Bleiben Antworten ausweichend oder aggressiv, beende das Gespraech.
Blockieren ist kein unfreundlicher Akt, sondern ein legitimer Selbstschutz.
</p>
<ol>
<li>Bleibe sachlich und vermeide Rechtfertigungsdiskussionen.</li>
<li>Teile keine persoenlichen Daten und keinen externen Kontakt.</li>
<li>Breche ab, sobald Grenzen nicht respektiert werden.</li>
</ol>
<h3>Bei Unsicherheit</h3>
<p>
Wenn du unsicher bist, teile keine persoenlichen Daten und warte mit weiterem Vertrauen. Nutze unsere Hinweise zu
<router-link to="/ratgeber/sicher-chatten">Sicher chatten</router-link> und melde auffaellige Profile ueber
<router-link to="/feedback">Feedback</router-link>.
</p>
<h3>Kurzformel fuer den Alltag</h3>
<p>
Zweifel + Zeitdruck + Datenwunsch = Abbruch. Diese einfache Regel hilft, spontane Fehlentscheidungen in
kritischen Situationen zu vermeiden.
</p>
<p class="content-meta">
Redaktion: SingleChat Team · Zuletzt aktualisiert: 07.05.2026
</p>
</main>
<ImprintContainer />
</div>
</template>
<script setup>
import HeaderAdBanner from '../components/HeaderAdBanner.vue';
import ImprintContainer from '../components/ImprintContainer.vue';
</script>
<style scoped>
.content-page {
max-width: 980px;
margin: 0 auto;
padding: 20px 14px 36px;
line-height: 1.6;
color: #344038;
}
.content-page h2,
.content-page h3 {
color: #18201b;
}
.content-page a {
color: #245c3a;
}
.content-meta {
margin-top: 18px;
font-size: 12px;
color: #637067;
}
.app-brand-link {
text-decoration: none;
}
</style>

View File

@@ -0,0 +1,106 @@
<template>
<div class="chat-container">
<header class="header">
<router-link to="/" class="app-brand app-brand-link">
<span class="app-brand-mark">S</span>
<div class="app-brand-copy">
<span class="app-brand-eyebrow">SingleChat</span>
<h1>Ratgeber</h1>
</div>
</router-link>
<HeaderAdBanner />
</header>
<main class="content-page">
<h2>Sicher chatten: Datenschutz im Alltag</h2>
<p>
Privater Chat funktioniert am besten, wenn du bewusst entscheidest, welche Informationen du teilst. Viele
Risiken lassen sich mit wenigen Regeln vermeiden, ohne dass der Chat unpersoenlich wird.
</p>
<p>
Sicherheit ist kein einmaliger Schritt, sondern ein Verhalten ueber den gesamten Kontakt hinweg. Je klarer deine
Grenzen von Beginn an sind, desto entspannter bleibt das Gespraech.
</p>
<h3>Was du nicht teilen solltest</h3>
<ul>
<li>Telefonnummer, private E-Mail und Social-Media-Handles beim ersten Kontakt.</li>
<li>Adresse, Arbeitgeber, Schule oder feste Tagesroutinen.</li>
<li>Dokumente, Ticket-Screenshots oder Fotos mit sichtbaren sensiblen Daten.</li>
</ul>
<h3>Was du stattdessen teilen kannst</h3>
<ul>
<li>Allgemeine Interessen und Hobbys ohne Ortsbezug.</li>
<li>Unkritische Alltagsthemen wie Musik, Serien oder Sport.</li>
<li>Persoenliche Meinungen, solange keine sensiblen Daten enthalten sind.</li>
</ul>
<h3>Warnzeichen bei Gespraechen</h3>
<p>
Sei vorsichtig, wenn dein Gegenueber schnell Druck aufbaut, Geldthemen anspricht oder versucht, dich auf externe
Plattformen zu ziehen. Das sind haeufige Muster bei Spam und Betrug.
</p>
<h3>Schrittfolge bei einem Vorfall</h3>
<ol>
<li>Keine weiteren Daten senden und den Verlauf ruhig halten.</li>
<li>Kontakt sofort blockieren, wenn Druck oder Manipulation entsteht.</li>
<li>Auffaellige Nachrichten per Screenshot sichern.</li>
<li>Vorfall ueber <router-link to="/feedback">Feedback</router-link> melden.</li>
</ol>
<h3>So reagierst du richtig</h3>
<ol>
<li>Gespraech beenden, wenn es sich unwohl anfuehlt.</li>
<li>Nutzer blockieren und problematische Inhalte nicht weiterverbreiten.</li>
<li>Vorfall kurz dokumentieren und ueber Feedback melden.</li>
</ol>
<p>
Ergaenzend empfehlen wir die Seite <router-link to="/sicherheit">Sicherheit</router-link> und den Artikel
<router-link to="/ratgeber/red-flags">Red Flags im Online-Chat</router-link>.
</p>
<p class="content-meta">
Redaktion: SingleChat Team · Zuletzt aktualisiert: 07.05.2026
</p>
</main>
<ImprintContainer />
</div>
</template>
<script setup>
import HeaderAdBanner from '../components/HeaderAdBanner.vue';
import ImprintContainer from '../components/ImprintContainer.vue';
</script>
<style scoped>
.content-page {
max-width: 980px;
margin: 0 auto;
padding: 20px 14px 36px;
line-height: 1.6;
color: #344038;
}
.content-page h2,
.content-page h3 {
color: #18201b;
}
.content-page a {
color: #245c3a;
}
.content-meta {
margin-top: 18px;
font-size: 12px;
color: #637067;
}
.app-brand-link {
text-decoration: none;
}
</style>

View File

@@ -419,8 +419,18 @@ export function setupBroadcast(io, __dirname) {
if (sub === 'today') {
const day = new Date().toISOString().slice(0, 10);
const dayRecords = records.filter((r) => r.day === day);
const uniqueUsersToday = Array.from(new Set(dayRecords.map((r) => r.userName)))
.sort((a, b) => a.localeCompare(b, 'de'));
const latestByUserToday = new Map();
dayRecords
.slice()
.sort((a, b) => b.date - a.date)
.forEach((record) => {
if (!latestByUserToday.has(record.userName)) {
latestByUserToday.set(record.userName, record);
}
});
const uniqueUsersToday = Array.from(latestByUserToday.values())
.sort((a, b) => a.userName.localeCompare(b.userName, 'de'))
.map((r) => `${r.userName} (${r.age})`);
sendCommandTable(socket, 'Statistik: Heute', ['Metrik', 'Wert'], [
['Tag', day],
['Logins', dayRecords.length],
@@ -473,12 +483,12 @@ export function setupBroadcast(io, __dirname) {
sendCommandTable(
socket,
`Statistik: Namen (gesamt verschieden: ${new Set(records.map((r) => r.userName)).size})`,
['Name', 'Anzahl', 'Letzter Login'],
['Name', 'Alter', 'Anzahl', 'Letzter Login'],
topNames.map(([name, count]) => {
const latestRecord = records
.filter((r) => r.userName === name)
.sort((a, b) => b.date - a.date)[0];
return [name, count, latestRecord ? latestRecord.timestamp : '-'];
return [name, latestRecord ? latestRecord.age : '-', count, latestRecord ? latestRecord.timestamp : '-'];
})
);
return;

View File

@@ -174,7 +174,21 @@ setupBroadcast(io, __dirname);
// SPA-Fallback muss nach allen anderen Routen stehen
if (IS_PRODUCTION) {
const distPath = join(__dirname, '../docroot/dist');
const KNOWN_SPA_ROUTES = new Set(['/', '/partners', '/feedback', '/faq', '/regeln', '/sicherheit', '/datenschutz', '/mockup-redesign']);
const KNOWN_SPA_ROUTES = new Set([
'/',
'/partners',
'/feedback',
'/faq',
'/regeln',
'/sicherheit',
'/datenschutz',
'/ratgeber',
'/ratgeber/erste-nachricht',
'/ratgeber/profil-tipps',
'/ratgeber/sicher-chatten',
'/ratgeber/red-flags',
'/mockup-redesign'
]);
app.use(express.static(distPath));
// Fallback für Vue Router (SPA) - muss am Ende stehen
app.get('*', (req, res) => {

View File

@@ -18,7 +18,7 @@ const SEO_LOCALES = [
const LOCALE_SEO_META = {
de: {
title: 'SingleChat: Kostenloser Single Chat, privat & anonym',
description: 'Kostenloser Single Chat für private und anonyme Gespräche. Lerne neue Kontakte kennen und teile Bilder sicher online.',
description: 'Kostenloser Single Chat für private und anonyme Gespräche. Lerne neue Kontakte kennen und teile Bilder sicher online.',
keywords: 'single chat, kostenloser chat, privat chatten, anonym chat, free chat, private chat, anonymous chat, online chat'
},
en: {
@@ -27,14 +27,14 @@ const LOCALE_SEO_META = {
keywords: 'single chat, free chat, private chat, anonymous chat, online chat, meet singles'
},
fr: {
title: 'SingleChat: Chat célibataire gratuit, privé et anonyme',
description: 'Chat célibataire gratuit pour des conversations privées et anonymes. Rencontrez de nouvelles personnes en toute sécurité.',
keywords: 'chat célibataire, chat gratuit, chat privé, chat anonyme, rencontre en ligne'
title: 'SingleChat: Chat célibataire gratuit, privé et anonyme',
description: 'Chat célibataire gratuit pour des conversations privées et anonymes. Rencontrez de nouvelles personnes en toute sécurité.',
keywords: 'chat célibataire, chat gratuit, chat privé, chat anonyme, rencontre en ligne'
},
es: {
title: 'SingleChat: Chat gratis, privado y anónimo',
description: 'Chat gratis para solteros con conversaciones privadas y anónimas. Conoce gente nueva y comparte imágenes de forma segura.',
keywords: 'chat gratis, chat privado, chat anónimo, chat para solteros, conocer gente'
title: 'SingleChat: Chat gratis, privado y anónimo',
description: 'Chat gratis para solteros con conversaciones privadas y anónimas. Conoce gente nueva y comparte imágenes de forma segura.',
keywords: 'chat gratis, chat privado, chat anónimo, chat para solteros, conocer gente'
},
it: {
title: 'SingleChat: Chat single gratis, privata e anonima',
@@ -42,19 +42,19 @@ const LOCALE_SEO_META = {
keywords: 'chat single, chat gratis, chat privata, chat anonima, incontri online'
},
ja: {
title: 'SingleChat: 無料・匿名・プライベートのシングルチャット',
description: '無料で使えるシングルチャット。匿名かつプライベートに会話でき、画像共有も安全です。',
keywords: 'シングルチャット, 無料チャット, 匿名チャット, プライベートチャット, オンラインチャット'
title: 'SingleChat: 無料・匿名・プライベートのシングルチャット',
description: '無料で使えるシングルチャット。匿名かつプライベートに会話でき、画像共有も安全です。',
keywords: 'シングルチャット, 無料チャット, 匿名チャット, プライベートチャット, オンラインチャット'
},
zh: {
title: 'SingleChat:免费、私密、匿名的单身聊天',
description: '免费单身聊天,支持私密和匿名交流,安全分享图片并结识新朋友。',
keywords: '单身聊天, 免费聊天, 私密聊天, 匿名聊天, 在线聊天'
title: 'SingleChat:免费、私密、匿名的单身聊天',
description: '免费单身聊天,支持私密和匿名交流,安全分享图片并结识新朋友。',
keywords: '单身聊天, 免费聊天, 私密聊天, 匿名聊天, 在线聊天'
},
th: {
title: 'SingleChat: แชตคนโสดฟรี แบบส่วนตัวและไม่ระบุตัวตน',
description: 'แชตคนโสดฟรี สำหรับการสนทนาแบบส่วนตัวและไม่ระบุตัวตน พบผู้คนใหม่ ๆ และแชร์รูปได้อย่างปลอดภัย',
keywords: 'แชตคนโสด, แชตฟรี, แชตส่วนตัว, แชตไม่ระบุตัวตน, แชตออนไลน์'
title: 'SingleChat: แชตคนโสดฟรี แบบส่วนตัวและไม่ระบุตัวตน',
description: 'แชตคนโสดฟรี สำหรับการสนทนาแบบส่วนตัวและไม่ระบุตัวตน พบผู้คนใหม่ ๆ และแชร์รูปได้อย่างปลอดภัย',
keywords: 'แชตคนโสด, แชตฟรี, แชตส่วนตัว, แชตไม่ระบุตัวตน, แชตออนไลน์'
},
tl: {
title: 'SingleChat: Libreng private at anonymous na single chat',
@@ -66,7 +66,7 @@ const LOCALE_SEO_META = {
const seoData = {
'/': {
title: 'SingleChat: Kostenloser Single Chat, privat & anonym',
description: 'Kostenloser Single Chat für private und anonyme Gespräche. Lerne neue Kontakte kennen und teile Bilder sicher online.',
description: 'Kostenloser Single Chat für private und anonyme Gespräche. Lerne neue Kontakte kennen und teile Bilder sicher online.',
keywords: 'single chat, kostenloser chat, privat chatten, anonym chat, free chat, private chat, anonymous chat, online chat',
ogTitle: 'SingleChat: Kostenloser Single Chat, privat & anonym',
ogDescription: 'Kostenlos chatten, privat bleiben und neue Kontakte kennenlernen - mit sicherem Bildaustausch.',
@@ -79,15 +79,15 @@ const seoData = {
'@type': 'WebSite',
name: 'SingleChat',
url: `${SITE_URL}/`,
description: 'Kostenloser Single Chat für private und anonyme Gespräche. Lerne neue Kontakte kennen und tausche Bilder sicher aus.',
description: 'Kostenloser Single Chat für private und anonyme Gespräche. Lerne neue Kontakte kennen und tausche Bilder sicher aus.',
inLanguage: 'de-DE'
}
},
'/partners': {
title: 'Partner für Single Chat & Community - SingleChat',
title: 'Partner für Single Chat & Community - SingleChat',
description: 'Partnerseiten rund um Single Chat, Community und Online-Kontakte. Entdecke weitere Angebote und hilfreiche Ressourcen.',
keywords: 'single chat partner, chat community, kontaktseiten, single-chat links, online dating chat',
ogTitle: 'Partner für Single Chat & Community - SingleChat',
ogTitle: 'Partner für Single Chat & Community - SingleChat',
ogDescription: 'Befreundete Seiten und Ressourcen rund um Chat, Kontakte und Community.',
ogType: 'website',
ogUrl: `${SITE_URL}/partners`,
@@ -109,10 +109,10 @@ const seoData = {
},
'/feedback': {
title: 'Feedback zur Chat-Plattform - SingleChat',
description: 'Öffentliches Feedback zu SingleChat: Meinungen, Vorschläge und Erfahrungsberichte für einen besseren privaten Chat.',
keywords: 'chat feedback, single chat erfahrungen, rückmeldung chat, verbesserungsvorschläge',
description: 'Öffentliches Feedback zu SingleChat: Meinungen, Vorschläge und Erfahrungsberichte für einen besseren privaten Chat.',
keywords: 'chat feedback, single chat erfahrungen, rückmeldung chat, verbesserungsvorschläge',
ogTitle: 'Feedback zur Chat-Plattform - SingleChat',
ogDescription: 'Teile deine Erfahrungen und Verbesserungsvorschläge für SingleChat.',
ogDescription: 'Teile deine Erfahrungen und Verbesserungsvorschläge für SingleChat.',
ogType: 'website',
ogUrl: `${SITE_URL}/feedback`,
ogImage: DEFAULT_IMAGE,
@@ -122,7 +122,7 @@ const seoData = {
'@type': 'CollectionPage',
name: 'Feedback - SingleChat',
url: `${SITE_URL}/feedback`,
description: 'Öffentliches Feedback zu SingleChat: Meinungen, Vorschläge und Erfahrungsberichte für einen besseren privaten Chat.',
description: 'Öffentliches Feedback zu SingleChat: Meinungen, Vorschläge und Erfahrungsberichte für einen besseren privaten Chat.',
isPartOf: {
'@type': 'WebSite',
name: 'SingleChat',
@@ -133,10 +133,10 @@ const seoData = {
},
'/faq': {
title: 'FAQ: Kostenlos, privat und anonym chatten - SingleChat',
description: 'FAQ zum kostenlosen Single Chat: anonym chatten, Privatsphäre schützen, Bilder sicher teilen und Nutzer blockieren.',
description: 'FAQ zum kostenlosen Single Chat: anonym chatten, Privatsphäre schützen, Bilder sicher teilen und Nutzer blockieren.',
keywords: 'single chat faq, kostenlos chatten, anonym chatten, privater chat, safe chat',
ogTitle: 'FAQ: Kostenlos, privat und anonym chatten - SingleChat',
ogDescription: 'Antworten auf Fragen zu Sicherheit, Privatsphäre und Funktionen im Single Chat.',
ogDescription: 'Antworten auf Fragen zu Sicherheit, Privatsphäre und Funktionen im Single Chat.',
ogType: 'website',
ogUrl: `${SITE_URL}/faq`,
ogImage: DEFAULT_IMAGE,
@@ -146,7 +146,7 @@ const seoData = {
'@type': 'FAQPage',
name: 'FAQ - SingleChat',
url: `${SITE_URL}/faq`,
description: 'FAQ zum kostenlosen Single Chat: anonym chatten, Privatsphäre schützen, Bilder sicher teilen und Nutzer blockieren.',
description: 'FAQ zum kostenlosen Single Chat: anonym chatten, Privatsphäre schützen, Bilder sicher teilen und Nutzer blockieren.',
isPartOf: {
'@type': 'WebSite',
name: 'SingleChat',
@@ -156,11 +156,11 @@ const seoData = {
}
},
'/regeln': {
title: 'Chat-Regeln für sicheren Single Chat - SingleChat',
description: 'Regeln für respektvollen, privaten und sicheren Single Chat. Hinweise zu Verhalten, Spam und verbotenen Inhalten.',
title: 'Chat-Regeln für sicheren Single Chat - SingleChat',
description: 'Regeln für respektvollen, privaten und sicheren Single Chat. Hinweise zu Verhalten, Spam und verbotenen Inhalten.',
keywords: 'chat regeln, single chat regeln, sicher chatten, spam vermeiden, community richtlinien',
ogTitle: 'Chat-Regeln für sicheren Single Chat - SingleChat',
ogDescription: 'Unsere Richtlinien für respektvolle und sichere Gespräche im Chat.',
ogTitle: 'Chat-Regeln für sicheren Single Chat - SingleChat',
ogDescription: 'Unsere Richtlinien für respektvolle und sichere Gespräche im Chat.',
ogType: 'website',
ogUrl: `${SITE_URL}/regeln`,
ogImage: DEFAULT_IMAGE,
@@ -170,7 +170,7 @@ const seoData = {
'@type': 'WebPage',
name: 'Regeln - SingleChat',
url: `${SITE_URL}/regeln`,
description: 'Regeln für respektvollen, privaten und sicheren Single Chat. Hinweise zu Verhalten, Spam und verbotenen Inhalten.',
description: 'Regeln für respektvollen, privaten und sicheren Single Chat. Hinweise zu Verhalten, Spam und verbotenen Inhalten.',
isPartOf: {
'@type': 'WebSite',
name: 'SingleChat',
@@ -180,11 +180,11 @@ const seoData = {
}
},
'/sicherheit': {
title: 'Sicherheit & Privatsphäre im privaten Chat - SingleChat',
description: 'Sicherheitsseite für privaten und anonymen Chat: Privatsphäre, Schutz vor Spam, Blockieren und Melden.',
keywords: 'privatsphäre chat, anonym chat sicherheit, blockieren melden, private chat safety',
ogTitle: 'Sicherheit & Privatsphäre im privaten Chat - SingleChat',
ogDescription: 'So schützt du deine Daten und chattest sicher und anonym.',
title: 'Sicherheit & Privatsphäre im privaten Chat - SingleChat',
description: 'Sicherheitsseite für privaten und anonymen Chat: Privatsphäre, Schutz vor Spam, Blockieren und Melden.',
keywords: 'privatsphäre chat, anonym chat sicherheit, blockieren melden, private chat safety',
ogTitle: 'Sicherheit & Privatsphäre im privaten Chat - SingleChat',
ogDescription: 'So schützt du deine Daten und chattest sicher und anonym.',
ogType: 'website',
ogUrl: `${SITE_URL}/sicherheit`,
ogImage: DEFAULT_IMAGE,
@@ -192,9 +192,9 @@ const seoData = {
schema: {
'@context': 'https://schema.org',
'@type': 'WebPage',
name: 'Sicherheit & Privatsphäre - SingleChat',
name: 'Sicherheit & Privatsphäre - SingleChat',
url: `${SITE_URL}/sicherheit`,
description: 'Sicherheitsseite für privaten und anonymen Chat: Privatsphäre, Schutz vor Spam, Blockieren und Melden.',
description: 'Sicherheitsseite für privaten und anonymen Chat: Privatsphäre, Schutz vor Spam, Blockieren und Melden.',
isPartOf: {
'@type': 'WebSite',
name: 'SingleChat',
@@ -204,10 +204,10 @@ const seoData = {
}
},
'/datenschutz': {
title: 'Datenschutzerklärung für Website und App - SingleChat',
description: 'Datenschutzerklärung für SingleChat und die Android-App mit Informationen zu Profilangaben, Nachrichten, Bildern und Sitzungsdaten.',
title: 'Datenschutzerklärung für Website und App - SingleChat',
description: 'Datenschutzerklärung für SingleChat und die Android-App mit Informationen zu Profilangaben, Nachrichten, Bildern und Sitzungsdaten.',
keywords: 'datenschutz singlechat, privacy policy chat app, chat datenschutz, android app datenschutz',
ogTitle: 'Datenschutzerklärung für Website und App - SingleChat',
ogTitle: 'Datenschutzerklärung für Website und App - SingleChat',
ogDescription: 'Informationen zur Datenverarbeitung bei SingleChat und in der Android-App.',
ogType: 'website',
ogUrl: `${SITE_URL}/datenschutz`,
@@ -218,7 +218,7 @@ const seoData = {
'@type': 'WebPage',
name: 'Datenschutz - SingleChat',
url: `${SITE_URL}/datenschutz`,
description: 'Datenschutzerklärung für SingleChat und die Android-App mit Informationen zu Profilangaben, Nachrichten, Bildern und Sitzungsdaten.',
description: 'Datenschutzerklärung für SingleChat und die Android-App mit Informationen zu Profilangaben, Nachrichten, Bildern und Sitzungsdaten.',
isPartOf: {
'@type': 'WebSite',
name: 'SingleChat',
@@ -226,6 +226,73 @@ const seoData = {
},
inLanguage: 'de-DE'
}
},
'/ratgeber': {
title: 'Ratgeber fuer privaten Single Chat - SingleChat',
description: 'Praxisnahe Ratgeberartikel zu Chat-Einstieg, Profiloptimierung, Sicherheit und Red Flags im Online-Chat.',
keywords: 'chat ratgeber, single chat tipps, profil tipps, sicher chatten, online chat red flags',
ogTitle: 'Ratgeber fuer privaten Single Chat - SingleChat',
ogDescription: 'Hilfreiche Leitfaeden fuer bessere Gespraeche und mehr Sicherheit im Chat.',
ogType: 'website',
ogUrl: `${SITE_URL}/ratgeber`,
ogImage: DEFAULT_IMAGE,
robots: 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1',
schema: {
'@context': 'https://schema.org',
'@type': 'CollectionPage',
name: 'Ratgeber - SingleChat',
url: `${SITE_URL}/ratgeber`,
description: 'Ratgeber mit Tipps zu erster Nachricht, Profilgestaltung, Datenschutz und sicheren Gespraechen im Single Chat.',
inLanguage: 'de-DE'
}
},
'/ratgeber/erste-nachricht': {
title: 'Die erste Nachricht im Chat - Tipps & Beispiele',
description: 'So gelingt die erste Nachricht im Single Chat: konkrete Beispiele, typische Fehler und einfache Vorlagen.',
keywords: 'erste nachricht chat, anschreiben tipps, chat beispiele, single chat einstieg',
ogTitle: 'Die erste Nachricht im Chat - Tipps & Beispiele',
ogDescription: 'Konkrete Beispiele fuer einen natuerlichen und respektvollen Chat-Einstieg.',
ogType: 'article',
ogUrl: `${SITE_URL}/ratgeber/erste-nachricht`,
ogImage: DEFAULT_IMAGE,
robots: 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1',
schema: null
},
'/ratgeber/profil-tipps': {
title: 'Profil verbessern fuer bessere Chats - SingleChat',
description: 'Verbessere dein Chat-Profil mit klaren, ehrlichen Angaben und starte leichter passende Gespraeche.',
keywords: 'profil tipps chat, online profil verbessern, single chat profil',
ogTitle: 'Profil verbessern fuer bessere Chats - SingleChat',
ogDescription: 'Einfache Schritte fuer ein besseres Profil und passendere Unterhaltungen.',
ogType: 'article',
ogUrl: `${SITE_URL}/ratgeber/profil-tipps`,
ogImage: DEFAULT_IMAGE,
robots: 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1',
schema: null
},
'/ratgeber/sicher-chatten': {
title: 'Sicher chatten und Daten schuetzen - SingleChat',
description: 'Datenschutz-Tipps fuer anonymes Chatten: Welche Informationen du teilen kannst und welche nicht.',
keywords: 'sicher chatten, datenschutz chat, anonym chat tipps',
ogTitle: 'Sicher chatten und Daten schuetzen - SingleChat',
ogDescription: 'Praktische Regeln fuer mehr Sicherheit und Privatsphaere im Online-Chat.',
ogType: 'article',
ogUrl: `${SITE_URL}/ratgeber/sicher-chatten`,
ogImage: DEFAULT_IMAGE,
robots: 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1',
schema: null
},
'/ratgeber/red-flags': {
title: 'Red Flags im Online-Chat erkennen - SingleChat',
description: 'Warnzeichen bei Spam und Manipulation im Chat erkennen und richtig reagieren.',
keywords: 'red flags chat, online chat sicherheit, betrug chat erkennen',
ogTitle: 'Red Flags im Online-Chat erkennen - SingleChat',
ogDescription: 'Fruehe Warnsignale im Chat erkennen und sich wirksam schuetzen.',
ogType: 'article',
ogUrl: `${SITE_URL}/ratgeber/red-flags`,
ogImage: DEFAULT_IMAGE,
robots: 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1',
schema: null
}
};
@@ -415,7 +482,7 @@ function generateHTML(route, meta, __dirname) {
const feedbackMarkup = feedbackItems.length > 0
? feedbackItems.map((item) => {
const metaLine = [item.country, item.age, item.gender].filter(Boolean).join(' · ');
const metaLine = [item.country, item.age, item.gender].filter(Boolean).join(' · ');
return `<article style="border:1px solid #d7dfd9;border-radius:12px;padding:14px 16px;margin-bottom:12px;background:#fff;">
<strong style="display:block;color:#18201b;">${escapeHtml(item.name || 'Anonym')}</strong>
${metaLine ? `<div style="font-size:12px;color:#637067;margin-top:4px;">${escapeHtml(metaLine)}</div>` : ''}
@@ -447,7 +514,7 @@ export function setupSEORoutes(app, __dirname) {
app.get(route, (req, res) => {
const html = generateHTML(route, meta, __dirname);
if (html) {
// Zusätzliches kanonisches Signal (neben link rel= im HTML) hilft Google bei der Zuordnung.
// Zusätzliches kanonisches Signal (neben link rel= im HTML) – hilft Google bei der Zuordnung.
res.set('Link', `<${meta.ogUrl}>; rel="canonical"`);
res.send(html);
return;
@@ -460,7 +527,7 @@ export function setupSEORoutes(app, __dirname) {
}
console.error('FEHLER: Gebaute index.html nicht gefunden:', distIndexPath);
res.status(500).send('Gebaute index.html nicht gefunden. Bitte führe "npm run build" aus.');
res.status(500).send('Gebaute index.html nicht gefunden. Bitte führe "npm run build" aus.');
});
});
}
@@ -473,7 +540,12 @@ Allow: /feedback
Allow: /faq
Allow: /regeln
Allow: /sicherheit
Allow: /datenschutz
<<Allow: /datenschutz
Allow: /ratgeber
Allow: /ratgeber/erste-nachricht
Allow: /ratgeber/profil-tipps
Allow: /ratgeber/sicher-chatten
Allow: /ratgeber/red-flags
Disallow: /api/
Disallow: /static/logs/
Disallow: /mockup-redesign
@@ -484,6 +556,11 @@ Sitemap: ${SITE_URL}/sitemap.xml
res.send(robotsTxt);
});
app.get('/ads.txt', (req, res) => {
res.type('text/plain');
res.send('google.com, pub-1104166651501135, DIRECT, f08c47fec0942fa0\n');
});
app.get('/sitemap.xml', (req, res) => {
try {
const sitemap = buildSitemapXml();