FOLX TV – Volksmusik & Schlager Fernsehsender: Nachrichten, Videos und Live-Shows
diff --git a/client/src/pages/horoscope.tsx b/client/src/pages/horoscope.tsx
index b3063ec..edb2c21 100644
--- a/client/src/pages/horoscope.tsx
+++ b/client/src/pages/horoscope.tsx
@@ -369,7 +369,7 @@ function SignDetail({ signIndex, onNavigate, aiHoroscopes }: { signIndex: number
}
export default function HoroscopePage() {
- usePageMeta("Horoskop - Volksmusik & Schlager", "Tägliches Horoskop für Volksmusik- und Schlager-Fans bei FOLX TV.");
+ usePageMeta("Horoskop - Volksmusik & Schlager", "Tägliches Horoskop für alle Sternzeichen. Ihr persönliches Tageshoroskop bei FOLX TV – dem Volksmusik & Schlager Sender.");
const params = useParams<{ sign?: string }>();
const [selected, setSelected] = useState(null);
const detailRef = useRef(null);
diff --git a/client/src/pages/impressum.tsx b/client/src/pages/impressum.tsx
index cd6f26a..1979ea3 100644
--- a/client/src/pages/impressum.tsx
+++ b/client/src/pages/impressum.tsx
@@ -5,7 +5,7 @@ import { usePageMeta } from "@/hooks/use-page-meta";
import { PageSideAds } from "@/components/adsense";
export default function ImpressumPage() {
- usePageMeta("Impressum - FOLX TV", "Impressum und rechtliche Informationen zu FOLX TV – Volksmusik & Schlager Fernsehsender.");
+ usePageMeta("Impressum - FOLX TV Volksmusik Sender", "Impressum und rechtliche Informationen zu FOLX TV – Ihrem Volksmusik & Schlager Fernsehsender.");
return (
diff --git a/client/src/pages/kontakt.tsx b/client/src/pages/kontakt.tsx
index 3bbd404..5a475ef 100644
--- a/client/src/pages/kontakt.tsx
+++ b/client/src/pages/kontakt.tsx
@@ -8,7 +8,7 @@ import { PageSideAds } from "@/components/adsense";
import { apiRequest } from "@/lib/queryClient";
export default function KontaktPage() {
- usePageMeta("Kontakt - FOLX TV", "Kontaktieren Sie FOLX TV – Ihr Fernsehsender für Volksmusik und Schlager.");
+ usePageMeta("Kontakt - FOLX TV Volksmusik Sender", "Kontaktieren Sie FOLX TV – Ihren Fernsehsender Nr. 1 für Volksmusik und Schlager. Wir freuen uns auf Ihre Nachricht.");
const [formData, setFormData] = useState({ name: "", email: "", subject: "", message: "" });
const [status, setStatus] = useState<"idle" | "sending" | "success" | "error">("idle");
diff --git a/client/src/pages/recipes.tsx b/client/src/pages/recipes.tsx
index 0c461d6..6abdccd 100644
--- a/client/src/pages/recipes.tsx
+++ b/client/src/pages/recipes.tsx
@@ -296,7 +296,7 @@ function RecipeModal({ recipe, onClose }: { recipe: Recipe; onClose: () => void
}
export default function RecipesPage() {
- usePageMeta("Rezepte - Alpenküche & Schlager", "Traditionelle Rezepte aus der Alpenküche bei FOLX TV – kochen wie die Volksmusik-Stars.");
+ usePageMeta("Rezepte - Alpenküche & Volksmusik", "Traditionelle Rezepte aus der Alpenküche und österreichische Hausmannskost. Kochen wie die Volksmusik-Stars bei FOLX TV.");
const [selectedRecipe, setSelectedRecipe] = useState(null);
return (
diff --git a/client/src/pages/search.tsx b/client/src/pages/search.tsx
index f9236db..066f22a 100644
--- a/client/src/pages/search.tsx
+++ b/client/src/pages/search.tsx
@@ -27,7 +27,7 @@ interface SearchResult {
}
export default function SearchPage() {
- usePageMeta("Suche - Volksmusik & Schlager", "Durchsuchen Sie FOLX TV nach Volksmusik- und Schlager-Inhalten.");
+ usePageMeta("Suche - Volksmusik & Schlager", "Durchsuchen Sie FOLX TV nach Volksmusik- und Schlager-Nachrichten, Künstlern, Videos und mehr.");
const searchString = useSearch();
const initialQuery = new URLSearchParams(searchString).get("q") || "";
const [query, setQuery] = useState(initialQuery);
diff --git a/client/src/pages/videos.tsx b/client/src/pages/videos.tsx
index 69ce30b..faea7d3 100644
--- a/client/src/pages/videos.tsx
+++ b/client/src/pages/videos.tsx
@@ -72,7 +72,7 @@ function VideoCardSkeleton() {
}
export default function VideosPage() {
- usePageMeta("Volksmusik & Schlager Videos", "Musikvideos und Live-Auftritte aus der Volksmusik- und Schlagerszene bei FOLX TV.");
+ usePageMeta("Volksmusik & Schlager Videos", "Volksmusik und Schlager Musikvideos, Live-Auftritte und Konzertmitschnitte bei FOLX TV. Die besten volkstümlichen Hits und Schlager-Stars im Video.");
const searchString = useSearch();
const [, setLocation] = useLocation();
diff --git a/replit.md b/replit.md
index 877042a..feefcfe 100644
--- a/replit.md
+++ b/replit.md
@@ -3,6 +3,17 @@
## Overview
The official website for Folx Music Television (folx.tv). Dark-themed bento grid layout with content for folk music (Volksmusik/Schlager) fans. Features articles, videos, photo gallery, horoscope widget + subpage, recipe widget + subpage, Google News feed, and integrated AdSense ads. All content is hardcoded in seed for production deployments.
+## SEO
+- Primary keyword: "Volksmusik" — used across all page titles, meta descriptions, OG tags, and structured data
+- Dynamic canonical URLs via `usePageMeta` hook (updates `` per page)
+- SSR article pages: server-side meta tags (OG, Twitter, description, keywords, canonical) in both `server/vite.ts` (dev) and `server/static.ts` (prod)
+- `stripExistingMeta()` removes duplicate meta/canonical from base HTML before injecting article-specific ones
+- JSON-LD structured data: WebSite (home) with SearchAction, NewsArticle + BreadcrumbList (articles)
+- Sitemap at `/sitemap.xml` — includes all static pages, categories, horoscope signs, and articles
+- robots.txt disallows `/api/`, `/search`, `/admin/`
+- H1 tag on home page (sr-only): "FOLX TV – Volksmusik & Schlager Fernsehsender"
+- Logo alt text includes "Volksmusik & Schlager Fernsehsender"
+
## Architecture
- **Frontend**: React + Vite + TailwindCSS + shadcn/ui (dark mode)
- **Backend**: Express.js + Node.js
diff --git a/server/routes.ts b/server/routes.ts
index 01efb6b..b10b9b6 100644
--- a/server/routes.ts
+++ b/server/routes.ts
@@ -821,6 +821,7 @@ export async function registerRoutes(
{ loc: "/gallery", priority: "0.7", changefreq: "weekly" },
{ loc: "/horoskop", priority: "0.7", changefreq: "daily" },
{ loc: "/rezepte", priority: "0.6", changefreq: "monthly" },
+ { loc: "/kontakt", priority: "0.5", changefreq: "yearly" },
{ loc: "/empfang-folx-tv", priority: "0.5", changefreq: "monthly" },
{ loc: "/ueber-uns", priority: "0.4", changefreq: "yearly" },
{ loc: "/impressum", priority: "0.3", changefreq: "yearly" },
@@ -888,6 +889,7 @@ export async function registerRoutes(
Allow: /
Disallow: /api/
Disallow: /search
+Disallow: /admin/
Sitemap: https://folx.tv/sitemap.xml
`;
diff --git a/server/static.ts b/server/static.ts
index 91020dc..e604337 100644
--- a/server/static.ts
+++ b/server/static.ts
@@ -21,6 +21,7 @@ function stripExistingMeta(html: string): string {
html = html.replace(/]*>\s*/gi, "");
html = html.replace(/]*>\s*/gi, "");
html = html.replace(/]*>\s*/gi, "");
+ html = html.replace(/]*>\s*/gi, "");
return html;
}
@@ -80,7 +81,9 @@ export function serveStatic(app: Express) {
``,
``,
``,
- `${escapeHtml(article.title)} - Folx Music Television `,
+ ``,
+ ``,
+ `${escapeHtml(article.title)} - Volksmusik & Schlager | Folx Music Television `,
].join("\n ");
template = template.replace(/[^<]*<\/title>/, ogTags);
diff --git a/server/vite.ts b/server/vite.ts
index b5e6009..9725476 100644
--- a/server/vite.ts
+++ b/server/vite.ts
@@ -27,6 +27,7 @@ function stripExistingMeta(html: string): string {
html = html.replace(/]*>\s*/gi, "");
html = html.replace(/]*>\s*/gi, "");
html = html.replace(/]*>\s*/gi, "");
+ html = html.replace(/]*>\s*/gi, "");
return html;
}
@@ -101,7 +102,9 @@ export async function setupVite(server: Server, app: Express) {
``,
``,
``,
- `${escapeHtml(article.title)} - Folx Music Television `,
+ ``,
+ ``,
+ `${escapeHtml(article.title)} - Volksmusik & Schlager | Folx Music Television `,
].join("\n ");
template = template.replace(/[^<]*<\/title>/, ogTags);