diff --git a/.vitepress/config.ts b/.vitepress/config.ts index d821182..35f283a 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -3,7 +3,7 @@ import { buildEnd } from "./config/buildEnd"; import { sidebar } from "./config/sidebar"; import { nav } from "./config/navbar"; import { markdown } from "./config/markdown"; -import { head } from "./config/head"; +import { head, transformPageData } from "./config/head"; import { vite } from "./config/vite"; export default defineConfig({ @@ -20,6 +20,7 @@ export default defineConfig({ }, head, + transformPageData, themeConfig: { logo: "/logo.png", diff --git a/.vitepress/config/head.ts b/.vitepress/config/head.ts index 8454a12..43c24e2 100644 --- a/.vitepress/config/head.ts +++ b/.vitepress/config/head.ts @@ -1,4 +1,4 @@ -import type { DefaultTheme, UserConfig } from "vitepress"; +import type { DefaultTheme, PageData, UserConfig } from "vitepress"; const ogDescription = "Zotero 中文社区,Zotero 中文维护小组,Zotero 插件,Zotero 中文 CSL 样式"; @@ -32,3 +32,34 @@ export const head: UserConfig["head"] = [ gtag('config', 'G-YHYFX0LRZK');`, ], ]; + +export const transformPageData = (pageData: PageData) => { + console.log(pageData); + pageData.frontmatter.head ??= []; + pageData.frontmatter.head.push([ + "meta", + { + name: "citation_title", + content: + pageData.frontmatter.layout === "home" + ? `Zotero 中文社区` + : `${pageData.title} | Zotero 中文社区`, + }, + ]); + pageData.frontmatter.head.push([ + "meta", + { + name: "og:type", + content: pageData.frontmatter.layout === "doc" ? `document` : `website`, + }, + ]); + + const canonicalUrl = `https://zotero-chinese.com/${pageData.relativePath}` + .replace(/index\.md$/, "") + .replace(/\.md$/, ".html"); + + pageData.frontmatter.head.push([ + "link", + { rel: "canonical", href: canonicalUrl }, + ]); +};