公开页补齐自引用 Canonical 与按类型的结构化数据,图片补上说明文字。
后台设置和内容编辑改成可导航布局;部署用访客 origin 生成 Canonical,避免落到容器地址。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
22
frontend/lib/canonicalMeta.ts
Normal file
22
frontend/lib/canonicalMeta.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { headers } from "next/headers";
|
||||
import { canonicalFields, metadataBaseURL, type QueryBag } from "@/lib/siteUrl";
|
||||
import type { Metadata } from "next";
|
||||
|
||||
/**
|
||||
* 请求时再读 SITE_URL,避免预渲染把构建环境的 origin 打进 HTML。
|
||||
* 使用 headers() 而非 connection():后者会把 metadata 推迟到 </head> 之后,
|
||||
* 插件只扫 head 时仍显示 Missing。
|
||||
* 根布局只设 metadataBase,各公开页再调本函数写入自身 Canonical。
|
||||
*/
|
||||
export async function requestCanonical(
|
||||
pathname: string,
|
||||
query?: QueryBag
|
||||
): Promise<Pick<Metadata, "alternates">> {
|
||||
await headers();
|
||||
return canonicalFields(pathname, query);
|
||||
}
|
||||
|
||||
export async function requestMetadataBase(): Promise<URL | undefined> {
|
||||
await headers();
|
||||
return metadataBaseURL();
|
||||
}
|
||||
Reference in New Issue
Block a user