Improve website content and fix navigation issues
Update website meta tags, SEO information, and fix a banner overlay bug to ensure all interactive elements are clickable. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 23852c00-4779-460a-9e0c-d09fee4b6c92 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 60ed045f-57e0-4c65-bc71-4205e0064bbb Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/f209e72a-0939-48fa-84fc-57854de71967/23852c00-4779-460a-9e0c-d09fee4b6c92/aNXfGlM Replit-Helium-Checkpoint-Created: true
This commit is contained in:
@@ -16,8 +16,8 @@ export default function Footer() {
|
||||
<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 Music Television. Aktuelle Nachrichten, Interviews und
|
||||
Hintergrundberichte aus der Welt der Volksmusik und des Schlagers.
|
||||
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.
|
||||
</p>
|
||||
<div className="flex gap-3">
|
||||
{SOCIAL_LINKS.map((s) => (
|
||||
|
||||
@@ -45,7 +45,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" className="h-32 w-auto object-contain py-1" />
|
||||
<img src={folxLogo} alt="FOLX TV – Volksmusik & Schlager Fernsehsender" className="h-32 w-auto object-contain py-1" />
|
||||
</div>
|
||||
</Link>
|
||||
|
||||
|
||||
@@ -49,8 +49,8 @@ export default function PushPromptBanner() {
|
||||
if (!visible) return null;
|
||||
|
||||
return (
|
||||
<div className="fixed bottom-4 left-4 right-4 md:left-auto md:right-6 md:max-w-sm z-50 animate-in slide-in-from-bottom-4 fade-in duration-500" data-testid="push-prompt-banner">
|
||||
<div className="bg-card border border-card-border rounded-xl shadow-2xl p-4">
|
||||
<div className="fixed bottom-4 right-4 md:right-6 max-w-sm z-50 animate-in slide-in-from-bottom-4 fade-in duration-500 pointer-events-none" data-testid="push-prompt-banner">
|
||||
<div className="bg-card border border-card-border rounded-xl shadow-2xl p-4 pointer-events-auto">
|
||||
<div className="flex items-start gap-3">
|
||||
<div className="flex-shrink-0 w-10 h-10 rounded-full bg-primary/10 flex items-center justify-center">
|
||||
<Bell className="w-5 h-5 text-primary" />
|
||||
|
||||
@@ -31,11 +31,24 @@ function removeMetaTag(selector: string) {
|
||||
if (el) el.remove();
|
||||
}
|
||||
|
||||
const DEFAULT_TITLE = "Volksmusik & Schlager | Folx Music Television";
|
||||
const DEFAULT_DESC = "FOLX TV – Ihr Fernsehsender für Volksmusik und Schlager. Musikvideos, Live-Shows, Interviews und aktuelle Nachrichten aus der Welt der volkstümlichen Musik. Jetzt einschalten!";
|
||||
const DEFAULT_OG_TITLE = "Volksmusik & Schlager | Folx Music Television";
|
||||
const DEFAULT_OG_DESC = "FOLX TV – Ihr Fernsehsender für Volksmusik und Schlager. Musikvideos, Live-Shows und aktuelle Nachrichten aus der volkstümlichen Musikszene.";
|
||||
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_OG_IMAGE = "https://folx.tv/og-image.jpg";
|
||||
const CANONICAL_BASE = "https://folx.tv";
|
||||
|
||||
function setCanonical(href: string) {
|
||||
let link = document.querySelector('link[rel="canonical"]') as HTMLLinkElement;
|
||||
if (link) {
|
||||
link.href = href;
|
||||
} else {
|
||||
link = document.createElement("link");
|
||||
link.rel = "canonical";
|
||||
link.href = href;
|
||||
document.head.appendChild(link);
|
||||
}
|
||||
}
|
||||
|
||||
export function usePageMeta(title: string, description?: string, og?: OgMeta) {
|
||||
useEffect(() => {
|
||||
@@ -44,6 +57,12 @@ export function usePageMeta(title: string, description?: string, og?: OgMeta) {
|
||||
if (description) {
|
||||
setMetaTag('meta[name="description"]', description);
|
||||
}
|
||||
|
||||
const canonicalPath = og?.ogUrl || `${CANONICAL_BASE}${window.location.pathname}`;
|
||||
const canonicalUrl = canonicalPath.startsWith("http") ? canonicalPath : `${CANONICAL_BASE}${canonicalPath}`;
|
||||
setCanonical(canonicalUrl);
|
||||
setMetaTag('meta[property="og:url"]', canonicalUrl);
|
||||
|
||||
if (og) {
|
||||
if (og.ogTitle) setMetaTag('meta[property="og:title"]', og.ogTitle);
|
||||
if (og.ogDescription) setMetaTag('meta[property="og:description"]', og.ogDescription);
|
||||
@@ -53,9 +72,6 @@ export function usePageMeta(title: string, description?: string, og?: OgMeta) {
|
||||
setMetaTag('meta[name="twitter:image"]', og.ogImage);
|
||||
}
|
||||
if (og.ogType) setMetaTag('meta[property="og:type"]', og.ogType);
|
||||
if (og.ogUrl) {
|
||||
setMetaTag('meta[property="og:url"]', og.ogUrl);
|
||||
}
|
||||
setMetaTag('meta[name="twitter:title"]', og.ogTitle || title + suffix);
|
||||
setMetaTag('meta[name="twitter:description"]', og.ogDescription || description || DEFAULT_OG_DESC);
|
||||
|
||||
@@ -82,6 +98,7 @@ export function usePageMeta(title: string, description?: string, og?: OgMeta) {
|
||||
setMetaTag('meta[name="twitter:image"]', DEFAULT_OG_IMAGE);
|
||||
setMetaTag('meta[property="og:type"]', "website");
|
||||
setMetaTag('meta[property="og:url"]', "https://folx.tv/");
|
||||
setCanonical("https://folx.tv/");
|
||||
removeMetaTag('meta[property="article:published_time"]');
|
||||
removeMetaTag('meta[property="article:modified_time"]');
|
||||
removeMetaTag('meta[property="article:author"]');
|
||||
|
||||
@@ -5,7 +5,7 @@ import { usePageMeta } from "@/hooks/use-page-meta";
|
||||
import { PageSideAds } from "@/components/adsense";
|
||||
|
||||
export default function AboutPage() {
|
||||
usePageMeta("Über FOLX TV - Volksmusik & Schlager Fernsehsender", "Alles über FOLX TV – Ihren Fernsehsender für Volksmusik und Schlager seit 2013.");
|
||||
usePageMeta("Über FOLX TV - Volksmusik & Schlager Fernsehsender", "Alles über FOLX TV – Ihren Volksmusik & Schlager Fernsehsender seit 2013. Programm, Geschichte und das Team hinter dem Volksmusik-Sender.");
|
||||
return (
|
||||
<div className="min-h-screen bg-background">
|
||||
<Header />
|
||||
|
||||
@@ -150,12 +150,22 @@ export default function ArticlePage() {
|
||||
"@id": articleUrl
|
||||
},
|
||||
"articleSection": article.category || "News",
|
||||
"inLanguage": "de"
|
||||
"inLanguage": "de",
|
||||
"keywords": `Volksmusik, Schlager, ${article.category || "News"}, ${article.title}`
|
||||
};
|
||||
const breadcrumbLd = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "BreadcrumbList",
|
||||
"itemListElement": [
|
||||
{ "@type": "ListItem", "position": 1, "name": "FOLX TV", "item": "https://folx.tv" },
|
||||
{ "@type": "ListItem", "position": 2, "name": article.category || "News", "item": `https://folx.tv/category/${encodeURIComponent(article.category || "News")}` },
|
||||
{ "@type": "ListItem", "position": 3, "name": article.title, "item": articleUrl }
|
||||
]
|
||||
};
|
||||
const script = document.createElement("script");
|
||||
script.type = "application/ld+json";
|
||||
script.id = "article-jsonld";
|
||||
script.textContent = JSON.stringify(jsonLd);
|
||||
script.textContent = JSON.stringify([jsonLd, breadcrumbLd]);
|
||||
const existing = document.getElementById("article-jsonld");
|
||||
if (existing) existing.remove();
|
||||
document.head.appendChild(script);
|
||||
|
||||
@@ -30,7 +30,7 @@ export default function CategoryPage() {
|
||||
|
||||
usePageMeta(
|
||||
`${category}${currentPage > 1 ? ` – Seite ${currentPage}` : ""} - Volksmusik & Schlager`,
|
||||
`Aktuelle ${category}-Beiträge aus der Volksmusik- und Schlagerszene bei FOLX TV.`
|
||||
`Aktuelle ${category}-Beiträge und Nachrichten aus der Volksmusik- und Schlagerszene. Neueste Volksmusik-Meldungen bei FOLX TV.`
|
||||
);
|
||||
|
||||
const { data, isLoading } = useQuery<PaginatedResponse>({
|
||||
|
||||
@@ -5,7 +5,7 @@ import { usePageMeta } from "@/hooks/use-page-meta";
|
||||
import { PageSideAds } from "@/components/adsense";
|
||||
|
||||
export default function DatenschutzPage() {
|
||||
usePageMeta("Datenschutz - FOLX TV", "Datenschutzerklärung von FOLX TV – Ihr Volksmusik & Schlager Fernsehsender.");
|
||||
usePageMeta("Datenschutz - FOLX TV Volksmusik Sender", "Datenschutzerklärung von FOLX TV – Ihrem Volksmusik & Schlager Fernsehsender.");
|
||||
return (
|
||||
<div className="min-h-screen bg-background">
|
||||
<Header />
|
||||
|
||||
@@ -34,7 +34,7 @@ const COUNTRIES = [
|
||||
];
|
||||
|
||||
export default function EmpfangPage() {
|
||||
usePageMeta("Empfang FOLX TV - Volksmusik & Schlager Sender empfangen", "So empfangen Sie FOLX TV – Ihren Volksmusik & Schlager Sender in Deutschland, Österreich und der Schweiz.");
|
||||
usePageMeta("Empfang FOLX TV - Volksmusik & Schlager Sender empfangen", "So empfangen Sie FOLX TV – den Volksmusik & Schlager Sender in Deutschland, Österreich und der Schweiz. Kabel, Satellit und Streaming-Optionen.");
|
||||
return (
|
||||
<div className="min-h-screen bg-background">
|
||||
<Header />
|
||||
|
||||
@@ -7,7 +7,7 @@ import { usePageMeta } from "@/hooks/use-page-meta";
|
||||
import { InArticleAd, PageSideAds } from "@/components/adsense";
|
||||
|
||||
export default function GalleryPageWrapper() {
|
||||
usePageMeta("Fotogalerie - Volksmusik & Schlager Bilder", "Fotos und Bilder von Volksmusik- und Schlager-Stars bei FOLX TV.");
|
||||
usePageMeta("Fotogalerie - Volksmusik & Schlager Bilder", "Exklusive Fotos und Bilder von Volksmusik- und Schlager-Stars, Konzerten und Events. Die Volksmusik-Fotogalerie von FOLX TV.");
|
||||
return (
|
||||
<div className="min-h-screen bg-background">
|
||||
<Header />
|
||||
|
||||
@@ -511,16 +511,16 @@ function BentoSkeleton() {
|
||||
}
|
||||
|
||||
export default function Home() {
|
||||
usePageMeta("Volksmusik & Schlager", "FOLX TV – Aktuelle Nachrichten, Musikvideos und Interviews aus der Welt der Volksmusik und des Schlagers.");
|
||||
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.");
|
||||
|
||||
useEffect(() => {
|
||||
const jsonLd = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
"name": "Folx Music Television",
|
||||
"alternateName": "FOLX TV",
|
||||
"alternateName": ["FOLX TV", "Volksmusik TV"],
|
||||
"url": "https://folx.tv",
|
||||
"description": "FOLX TV – Aktuelle Nachrichten, Musikvideos und Interviews aus der Welt der Volksmusik und des Schlagers.",
|
||||
"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",
|
||||
@@ -528,7 +528,18 @@ export default function Home() {
|
||||
"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"
|
||||
};
|
||||
@@ -692,6 +703,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>
|
||||
|
||||
<div className="grid grid-cols-1 lg:grid-cols-4 gap-4">
|
||||
<div className="lg:col-span-3 space-y-4">
|
||||
|
||||
@@ -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<number | null>(null);
|
||||
const detailRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
@@ -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 (
|
||||
<div className="min-h-screen bg-background">
|
||||
<Header />
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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<Recipe | null>(null);
|
||||
|
||||
return (
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user