--- import "../styles/global.css"; import "../styles/catalog.css"; import "../styles/source-status.css"; import "../styles/data-passport.css"; import "../styles/data-legend.css"; import "../styles/coordinate-radar.css"; import "../styles/activity-timeline.css"; import "../styles/fish-silhouette.css"; import "../styles/empty-states.css"; import "../styles/alpha-banner.css"; import "../styles/signal-pagination.css"; import "../styles/dashboard-polish.css"; import "../styles/loading-states.css"; import FishingIcon from "../components/FishingIcon.astro"; import AlphaBanner from "../components/AlphaBanner.astro"; const { title = "RF4 Spotter — свежие точки клёва Russian Fishing 4", description = "Свежие точки, уловы и честная оценка активности в Russian Fishing 4 с обязательным указанием источников.", noindex = false, image = "/og-rf4spotter.png", structuredData = null, errorPage = false, } = Astro.props; const path = Astro.url.pathname; const siteUrl = import.meta.env.PUBLIC_SITE_URL || "https://rf4spotter.ru"; const canonical = new URL(path, siteUrl).toString(); const socialImage = new URL(image, siteUrl).toString(); const preventIndexing = noindex || path.startsWith("/admin/"); const websiteJsonLd = { "@type": "WebSite", name: "RF4 Spotter", url: siteUrl, inLanguage: "ru" }; // A08: Skip structuredData on error pages (explicit errorPage prop) // Don't infer error from noindex alone — main page can have noindex on 422 const jsonLdGraph = (structuredData && !errorPage) ? [websiteJsonLd, structuredData] : [websiteJsonLd]; const jsonLd = JSON.stringify({ "@context": "https://schema.org", "@graph": jsonLdGraph, }).replaceAll("<", "\\u003c"); ---