Next.js
使用 @geo/sdk-next 在 App Router 中生成 Metadata、JSON-LD、sitemap 与 robots。
npm i @geo/sdk-nextgenerateMetadata
// app/[locale]/blog/[slug]/page.tsx
import { geoMetadata } from '@geo/sdk-next';
export async function generateMetadata({ params }) {
const { locale, slug } = await params;
const post = await getPost(slug, locale);
return geoMetadata({
site: process.env.NEXT_PUBLIC_GEO_SITE!,
path: `/blog/${slug}`,
locale,
variables: { title: post.title, summary: post.summary, cover: post.cover },
fallback: { title: post.title, description: post.summary },
});
}geoMetadata() 会把平台规则转成 Next 的 Metadata:title、description、alternates.canonical、alternates.languages(hreflang)、openGraph、twitter、robots。
JSON-LD
import { GeoJsonLd } from '@geo/sdk-next';
export default async function Page({ params }) {
return (
<>
<GeoJsonLd site={site} path={`/blog/${slug}`} locale={locale} variables={{ title, summary }} />
<article>…</article>
</>
);
}sitemap 与 robots
// app/sitemap.ts
import { geoSitemap } from '@geo/sdk-next';
export default geoSitemap({ site: process.env.NEXT_PUBLIC_GEO_SITE! });
// app/robots.ts
import { geoRobots } from '@geo/sdk-next';
export default geoRobots({ site: process.env.NEXT_PUBLIC_GEO_SITE! });两者都从平台的 sitemap / robots 配置生成,并带上多语言 alternates。
客户端路由
在根布局加入 <GeoClient site="…" />,SPA 导航时 head 保持与规则同步(generateMetadata 已经覆盖的字段不会被重复写入)。
缓存
配置请求在边缘缓存 5 分钟,后台发布时按站点失效。geoMetadata() 默认 revalidate: 300,可通过 cache 参数调整。