Present FOLX as a music news publisher and unify site SEO

This commit is contained in:
Codex
2026-10-07 13:42:48 +02:00
parent c5c3fe290e
commit cc306921d7
14 changed files with 173 additions and 115 deletions
+2 -2
View File
@@ -23,8 +23,8 @@ export default function Footer({ narrow }: { narrow?: boolean }) {
<div>
<h3 className="font-bold text-card-foreground text-lg mb-3">Folx Music Television</h3>
<p className="text-muted-foreground text-sm leading-relaxed mb-4">
FOLX TV – Ihr Fernsehsender Nr. 1 für Volksmusik und Schlager. Aktuelle Nachrichten,
Musikvideos, Künstlerporträts, Live-Shows und Interviews aus der Welt der volkstümlichen Musik.
FOLX TV – Aktuelle Schlager- und Volksmusik-News, Künstlerporträts und Interviews.
Entdecken Sie Nachrichten, Artikel und Videos aus der Musikszene sowie Informationen zu unserem TV-Angebot.
</p>
<div className="flex gap-3">
{SOCIAL_LINKS.map((s) => (
+1 -1
View File
@@ -43,7 +43,7 @@ export default function Header() {
<div className="flex items-center justify-between gap-4 h-16">
<Link href="/">
<div className="flex items-center gap-2 cursor-pointer" data-testid="link-logo">
<img src={folxLogo} alt="FOLX TV – Volksmusik & Schlager Fernsehsender" className="h-32 w-auto object-contain py-1" />
<img src={folxLogo} alt="FOLX TV – Schlager & Volksmusik News" className="h-32 w-auto object-contain py-1" />
</div>
</Link>
+25 -6
View File
@@ -1,3 +1,4 @@
import { HOME_TITLE, HOME_DESCRIPTION, INFO_SEO, publisherSchema } from "@shared/seo";
import { useEffect } from "react";
interface OgMeta {
@@ -8,6 +9,7 @@ interface OgMeta {
ogType?: string;
ogUrl?: string;
articlePublishedTime?: string;
articleModifiedTime?: string;
articleAuthor?: string;
articleSection?: string;
}
@@ -32,10 +34,10 @@ function removeMetaTag(selector: string) {
if (el) el.remove();
}
const DEFAULT_TITLE = "Volksmusik & Schlager TV | FOLX Music Television – Nachrichten, Videos & mehr";
const DEFAULT_DESC = "FOLX TV – Ihr Fernsehsender Nr. 1 für Volksmusik und Schlager. Aktuelle Nachrichten, Musikvideos, Künstlerporträts, Live-Shows und Interviews aus der Welt der volkstümlichen Musik. Jetzt einschalten!";
const DEFAULT_OG_TITLE = "Volksmusik & Schlager TV | FOLX Music Television";
const DEFAULT_OG_DESC = "FOLX TV – Ihr Fernsehsender Nr. 1 für Volksmusik und Schlager. Aktuelle Nachrichten, Musikvideos, Künstlerporträts und Live-Shows.";
const DEFAULT_TITLE = `${HOME_TITLE} | FOLX TV`;
const DEFAULT_DESC = HOME_DESCRIPTION;
const DEFAULT_OG_TITLE = `${HOME_TITLE} | FOLX TV`;
const DEFAULT_OG_DESC = HOME_DESCRIPTION;
const DEFAULT_OG_IMAGE = "https://folx.tv/og-image.jpg";
const CANONICAL_BASE = "https://folx.tv";
@@ -62,8 +64,24 @@ export function usePageMeta(title: string, description?: string, og?: OgMeta) {
const canonicalPath = og?.ogUrl || `${CANONICAL_BASE}${window.location.pathname}`;
const canonicalUrl = canonicalPath.startsWith("http") ? canonicalPath : `${CANONICAL_BASE}${canonicalPath}`;
setCanonical(canonicalUrl);
const info = INFO_SEO[window.location.pathname.replace(/\/+$/, "")];
document.getElementById("info-jsonld")?.remove();
if (info) {
const script = document.createElement("script");
script.id = "info-jsonld";
script.type = "application/ld+json";
script.textContent = JSON.stringify({ "@context": "https://schema.org", "@type": info.type,
"@id": `${canonicalUrl}#webpage`, url: canonicalUrl, name: title + suffix,
description: info.description, inLanguage: "de-DE", publisher: publisherSchema() });
document.head.appendChild(script);
}
setMetaTag('meta[property="og:url"]', canonicalUrl);
setMetaTag('meta[property="og:title"]', og?.ogTitle || title + suffix);
setMetaTag('meta[property="og:description"]', og?.ogDescription || description || DEFAULT_DESC);
setMetaTag('meta[property="og:type"]', og?.ogType || "website");
setMetaTag('meta[name="twitter:title"]', og?.ogTitle || title + suffix);
setMetaTag('meta[name="twitter:description"]', og?.ogDescription || description || DEFAULT_DESC);
if (og) {
if (og.ogTitle) setMetaTag('meta[property="og:title"]', og.ogTitle);
if (og.ogDescription) setMetaTag('meta[property="og:description"]', og.ogDescription);
@@ -78,7 +96,7 @@ export function usePageMeta(title: string, description?: string, og?: OgMeta) {
if (og.articlePublishedTime) {
setMetaTag('meta[property="article:published_time"]', og.articlePublishedTime);
setMetaTag('meta[property="article:modified_time"]', og.articlePublishedTime);
setMetaTag('meta[property="article:modified_time"]', og.articleModifiedTime || og.articlePublishedTime);
}
if (og.articleAuthor) {
setMetaTag('meta[property="article:author"]', og.articleAuthor);
@@ -88,6 +106,7 @@ export function usePageMeta(title: string, description?: string, og?: OgMeta) {
}
}
return () => {
document.getElementById("info-jsonld")?.remove();
document.title = DEFAULT_TITLE;
setMetaTag('meta[name="description"]', DEFAULT_DESC);
setMetaTag('meta[property="og:title"]', DEFAULT_OG_TITLE);
@@ -105,5 +124,5 @@ export function usePageMeta(title: string, description?: string, og?: OgMeta) {
removeMetaTag('meta[property="article:author"]');
removeMetaTag('meta[property="article:section"]');
};
}, [title, description, og?.siteName, og?.ogTitle, og?.ogDescription, og?.ogImage, og?.ogType, og?.ogUrl, og?.articlePublishedTime, og?.articleAuthor, og?.articleSection]);
}, [title, description, og?.siteName, og?.ogTitle, og?.ogDescription, og?.ogImage, og?.ogType, og?.ogUrl, og?.articlePublishedTime, og?.articleModifiedTime, og?.articleAuthor, og?.articleSection]);
}
+2 -4
View File
@@ -1,3 +1,4 @@
import { INFO_SEO } from "@shared/seo";
import { Tv, Youtube, Facebook, Instagram, PlayCircle, Radio } from "lucide-react";
import Header from "@/components/header";
import Footer from "@/components/footer";
@@ -43,10 +44,7 @@ const KANAELE = [
];
export default function AboutPage() {
usePageMeta(
"Über FOLX TV - Volksmusik & Schlager Fernsehsender",
"Alles über FOLX TV – Ihren Volksmusik & Schlager Fernsehsender seit 2013. Die Künstler, der FOLX Stadl und alle Kanäle: Livestream, FOLX Plus, YouTube, Facebook und Instagram.",
);
usePageMeta(INFO_SEO["/ueber-uns"].title, INFO_SEO["/ueber-uns"].description, { siteName: "FOLX TV" });
return (
<div className="min-h-screen bg-background">
<Header />
+10 -14
View File
@@ -1,3 +1,4 @@
import { publisherSchema, articleModifiedTime, articleGenre } from "@shared/seo";
import { useQuery } from "@tanstack/react-query";
import { useParams, Link, useLocation } from "wouter";
import { type Article } from "@shared/schema";
@@ -160,17 +161,19 @@ export default function ArticlePage() {
: "";
usePageMeta(
article ? `${article.title} - Volksmusik & Schlager` : "Volksmusik & Schlager Artikel",
article ? article.title : "Nachrichten",
article?.excerpt || "Aktuelle Nachrichten aus der Volksmusik- und Schlagerszene bei FOLX TV.",
article ? {
siteName: "FOLX TV",
ogTitle: article.title,
ogDescription: article.excerpt,
ogImage: articleImage || undefined,
ogType: "article",
ogUrl: articleUrl,
articlePublishedTime: new Date(article.publishedAt).toISOString(),
articleModifiedTime: articleModifiedTime(article.content || "", new Date(article.publishedAt).toISOString()),
articleAuthor: article.author || "Folx Music Television",
articleSection: article.category || "News",
articleSection: articleGenre(article.content || "").section,
} : undefined
);
@@ -179,32 +182,25 @@ export default function ArticlePage() {
const jsonLd = {
"@context": "https://schema.org",
"@type": "NewsArticle",
"@id": `${articleUrl}#article`,
"headline": article.title,
"description": article.excerpt,
"image": articleImage ? [articleImage] : [],
"datePublished": new Date(article.publishedAt).toISOString(),
"dateModified": new Date(article.publishedAt).toISOString(),
"dateModified": articleModifiedTime(article.content || "", new Date(article.publishedAt).toISOString()),
"author": {
"@type": "Organization",
"name": article.author || "Folx Music Television",
"url": "https://folx.tv"
},
"publisher": {
"@type": "Organization",
"name": "Folx Music Television",
"url": "https://folx.tv",
"logo": {
"@type": "ImageObject",
"url": `${window.location.origin}/favicon.png`
}
},
"publisher": publisherSchema(),
"mainEntityOfPage": {
"@type": "WebPage",
"@id": articleUrl
},
"articleSection": article.category || "News",
"articleSection": articleGenre(article.content || "").section,
"inLanguage": "de",
"keywords": `Volksmusik, Schlager, ${article.category || "News"}, ${article.title}`
"keywords": articleGenre(article.content || "").words.join(", ")
};
const breadcrumbLd = {
"@context": "https://schema.org",
+2 -1
View File
@@ -1,3 +1,4 @@
import { INFO_SEO } from "@shared/seo";
import { Shield } from "lucide-react";
import Header from "@/components/header";
import Footer from "@/components/footer";
@@ -5,7 +6,7 @@ import { usePageMeta } from "@/hooks/use-page-meta";
import { PageSideAds } from "@/components/adsense";
export default function DatenschutzPage() {
usePageMeta("Datenschutz - FOLX TV Volksmusik Sender", "Datenschutzerklärung von FOLX TV – Ihrem Volksmusik & Schlager Fernsehsender.");
usePageMeta(INFO_SEO["/datenschutz"].title, INFO_SEO["/datenschutz"].description, { siteName: "FOLX TV" });
return (
<div className="min-h-screen bg-background">
<Header />
+2 -4
View File
@@ -1,3 +1,4 @@
import { INFO_SEO } from "@shared/seo";
import { Tv, MapPin, PlayCircle, Youtube, Smartphone, Radio, ExternalLink } from "lucide-react";
import Header from "@/components/header";
import Footer from "@/components/footer";
@@ -107,10 +108,7 @@ const APPS = [
];
export default function EmpfangPage() {
usePageMeta(
"Empfang FOLX TV - Volksmusik & Schlager Sender empfangen",
"So empfangen Sie FOLX TV – den Volksmusik & Schlager Sender: kostenloser Livestream auf folx.live, die FOLX TV App für Apple, Android, Samsung und Fire TV sowie Kabel und IPTV in Deutschland, Österreich und der Schweiz.",
);
usePageMeta(INFO_SEO["/empfang-folx-tv"].title, INFO_SEO["/empfang-folx-tv"].description, { siteName: "FOLX TV" });
return (
<div className="min-h-screen bg-background">
<Header />
+4 -31
View File
@@ -1,3 +1,4 @@
import { HOME_TITLE, HOME_DESCRIPTION, homeSchema } from "@shared/seo";
import { useQuery } from "@tanstack/react-query";
import { artistGroup } from "@/lib/artists";
import { objectPositionFor } from "@/lib/focal";
@@ -756,38 +757,10 @@ function BentoSkeleton() {
}
export default function Home() {
usePageMeta("Volksmusik & Schlager TV", "FOLX TV – Ihr Fernsehsender Nr. 1 für Volksmusik und Schlager. Aktuelle Nachrichten, Musikvideos, Künstlerporträts, Live-Shows und Interviews aus der Welt der volkstümlichen Musik.");
usePageMeta(HOME_TITLE, HOME_DESCRIPTION, { siteName: "FOLX TV" });
useEffect(() => {
const jsonLd = {
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Folx Music Television",
"alternateName": ["FOLX TV", "Volksmusik TV"],
"url": "https://folx.tv",
"description": "FOLX TV – Ihr Fernsehsender Nr. 1 für Volksmusik und Schlager. Aktuelle Nachrichten, Musikvideos, Künstlerporträts, Live-Shows und Interviews aus der Welt der volkstümlichen Musik.",
"publisher": {
"@type": "Organization",
"name": "Folx Music Television",
"url": "https://folx.tv",
"logo": {
"@type": "ImageObject",
"url": `${window.location.origin}/favicon.png`
},
"sameAs": [
"https://www.facebook.com/folxtvmusic",
"https://www.instagram.com/folxtv",
"https://www.youtube.com/@FolxTV",
"https://www.tiktok.com/@folx.tv"
]
},
"potentialAction": {
"@type": "SearchAction",
"target": "https://folx.tv/search?q={search_term_string}",
"query-input": "required name=search_term_string"
},
"inLanguage": "de"
};
const jsonLd = homeSchema();
const script = document.createElement("script");
script.type = "application/ld+json";
script.id = "home-jsonld";
@@ -1033,7 +1006,7 @@ export default function Home() {
<Header />
<PageSideAds />
<main className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4 space-y-4">
<h1 className="sr-only">FOLX TV – Volksmusik & Schlager Fernsehsender: Nachrichten, Videos und Live-Shows</h1>
<h1 className="sr-only">FOLX TV – Schlager & Volksmusik News</h1>
{/* Prej lastna kopija pasu s trdo visino 90 px in responsive=false:
Google je vanjo postavil 320x50 in okrog je ostal siv rob.
+2 -1
View File
@@ -1,3 +1,4 @@
import { INFO_SEO } from "@shared/seo";
import { Scale } from "lucide-react";
import Header from "@/components/header";
import Footer from "@/components/footer";
@@ -5,7 +6,7 @@ import { usePageMeta } from "@/hooks/use-page-meta";
import { PageSideAds } from "@/components/adsense";
export default function ImpressumPage() {
usePageMeta("Impressum - FOLX TV Volksmusik Sender", "Impressum und rechtliche Informationen zu FOLX TV – Ihrem Volksmusik & Schlager Fernsehsender.");
usePageMeta(INFO_SEO["/impressum"].title, INFO_SEO["/impressum"].description, { siteName: "FOLX TV" });
return (
<div className="min-h-screen bg-background">
<Header />
+2 -1
View File
@@ -1,3 +1,4 @@
import { INFO_SEO } from "@shared/seo";
import { useState } from "react";
import { Mail, Phone, Send, CheckCircle, AlertCircle, Smartphone, Printer } from "lucide-react";
import { SiFacebook, SiInstagram, SiYoutube, SiTiktok } from "react-icons/si";
@@ -8,7 +9,7 @@ import { PageSideAds, TopBannerAd } from "@/components/adsense";
import { apiRequest } from "@/lib/queryClient";
export default function KontaktPage() {
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.");
usePageMeta(INFO_SEO["/kontakt"].title, INFO_SEO["/kontakt"].description, { siteName: "FOLX TV" });
const [formData, setFormData] = useState({ name: "", email: "", subject: "", message: "" });
const [status, setStatus] = useState<"idle" | "sending" | "success" | "error">("idle");