Present FOLX as a music news publisher and unify site SEO
This commit is contained in:
@@ -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) => (
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user