SEO 全链路:OG/Twitter 标签 + robots.txt + sitemap.xml + JSON-LD 结构化数据
- layout metadata: Open Graph + Twitter Card + canonical + robots 指令 - app/robots.ts: 允许首页/auth,禁止 /terminal/account/ops/api - app/sitemap.ts: 首页 1.0 + /auth/login 0.6 - 首页 JSON-LD: WebApplication schema,含 $10/mo 定价
This commit is contained in:
+39
-2
@@ -18,10 +18,47 @@ const jetbrainsMono = JetBrains_Mono({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "PolyWeather | Weather Intelligence",
|
title: {
|
||||||
|
default: "PolyWeather | Institutional Weather Signal Intelligence",
|
||||||
|
template: "%s | PolyWeather",
|
||||||
|
},
|
||||||
description:
|
description:
|
||||||
"PolyWeather paid professional terminal for weather-signal intelligence, city decision cards, and subscription-only analytics.",
|
"PolyWeather is a paid professional weather-signal intelligence terminal with METAR evidence, DEB forecast blending, and AI decision cards. Real-time observations for 51 global cities.",
|
||||||
manifest: "/site.webmanifest",
|
manifest: "/site.webmanifest",
|
||||||
|
metadataBase: new URL("https://polyweather.top"),
|
||||||
|
alternates: {
|
||||||
|
canonical: "/",
|
||||||
|
},
|
||||||
|
openGraph: {
|
||||||
|
type: "website",
|
||||||
|
siteName: "PolyWeather",
|
||||||
|
title: "PolyWeather | Institutional Weather Signal Intelligence",
|
||||||
|
description:
|
||||||
|
"Paid professional weather-signal intelligence terminal. METAR evidence, DEB forecast blending, AI decision cards. 51 cities, real-time.",
|
||||||
|
url: "https://polyweather.top",
|
||||||
|
images: [
|
||||||
|
{
|
||||||
|
url: "/apple-touch-icon.png",
|
||||||
|
width: 180,
|
||||||
|
height: 180,
|
||||||
|
alt: "PolyWeather",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
twitter: {
|
||||||
|
card: "summary",
|
||||||
|
title: "PolyWeather | Weather Signal Intelligence",
|
||||||
|
description:
|
||||||
|
"Paid professional weather-signal intelligence terminal. 51 cities, real-time observations.",
|
||||||
|
images: ["/apple-touch-icon.png"],
|
||||||
|
},
|
||||||
|
robots: {
|
||||||
|
index: true,
|
||||||
|
follow: true,
|
||||||
|
"max-video-preview": -1,
|
||||||
|
"max-image-preview": "large",
|
||||||
|
"max-snippet": -1,
|
||||||
|
},
|
||||||
icons: {
|
icons: {
|
||||||
icon: [
|
icon: [
|
||||||
{ url: "/favicon.ico", type: "image/x-icon" },
|
{ url: "/favicon.ico", type: "image/x-icon" },
|
||||||
|
|||||||
@@ -33,8 +33,29 @@ export default async function HomePage({
|
|||||||
const qs = usp.toString();
|
const qs = usp.toString();
|
||||||
redirect(`/auth/callback${qs ? `?${qs}` : ""}`);
|
redirect(`/auth/callback${qs ? `?${qs}` : ""}`);
|
||||||
}
|
}
|
||||||
|
const jsonLd = {
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "WebApplication",
|
||||||
|
name: "PolyWeather",
|
||||||
|
description:
|
||||||
|
"Paid professional weather-signal intelligence terminal with METAR evidence, DEB forecast blending, and AI decision cards.",
|
||||||
|
url: "https://polyweather.top",
|
||||||
|
applicationCategory: "BusinessApplication",
|
||||||
|
operatingSystem: "Web",
|
||||||
|
offers: {
|
||||||
|
"@type": "Offer",
|
||||||
|
price: "10.00",
|
||||||
|
priceCurrency: "USD",
|
||||||
|
description: "Monthly subscription",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<script
|
||||||
|
type="application/ld+json"
|
||||||
|
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
|
||||||
|
/>
|
||||||
<PreloadTerminalData />
|
<PreloadTerminalData />
|
||||||
<InstitutionalLandingPage />
|
<InstitutionalLandingPage />
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
import type { MetadataRoute } from "next";
|
||||||
|
|
||||||
|
export default function robots(): MetadataRoute.Robots {
|
||||||
|
return {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
userAgent: "*",
|
||||||
|
allow: "/",
|
||||||
|
disallow: ["/terminal/", "/account/", "/ops/", "/api/"],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sitemap: "https://polyweather.top/sitemap.xml",
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import type { MetadataRoute } from "next";
|
||||||
|
|
||||||
|
export default function sitemap(): MetadataRoute.Sitemap {
|
||||||
|
const baseUrl = "https://polyweather.top";
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
url: baseUrl,
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: "weekly",
|
||||||
|
priority: 1.0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: `${baseUrl}/auth/login`,
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: "monthly",
|
||||||
|
priority: 0.6,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user