diff --git a/generator/page-list-generator.ts b/generator/page-list-generator.ts
index d01a9dd..607ef6a 100644
--- a/generator/page-list-generator.ts
+++ b/generator/page-list-generator.ts
@@ -33,15 +33,15 @@ export default function pageListGenerator(routeBase: string[]): PluginOption {
const data = frontmatter.data
const time = data.time
const title = data.title
- const metaDescription = data.metaDescription
+ const meta= data.meta
delete data.time
delete data.title
- delete data.metaDescription
+ delete data.meta
return {
title,
time,
data,
- metaDescription,
+ meta,
excerpt: frontmatter.excerpt,
contentUrl: `/${base}/${filename}`,
}
diff --git a/index.html b/index.html
index 8467a01..0858147 100644
--- a/index.html
+++ b/index.html
@@ -3,7 +3,7 @@
-
+
>
diff --git a/prerender.ts b/prerender.ts
index 832f6cd..8799e5e 100644
--- a/prerender.ts
+++ b/prerender.ts
@@ -29,13 +29,13 @@ routesToPrerender.push(...fg.sync('./src/data/*/*.md').map((p) => p.slice(10, -3
// pre-render each route...
for (const url of routesToPrerender) {
- const [appHtml, preloadLinks, titlePrefix, metaDescription] = await render(url, manifest)
+ const [appHtml, preloadLinks, titlePrefix, meta] = await render(url, manifest)
const html = template
.replace(``, preloadLinks)
.replace(``, appHtml)
.replace(``, titlePrefix)
- .replace(``, metaDescription)
+ .replace(``, meta)
.replace(``, SiteConfiguration.titleSuffix)
const filePath = `dist/static${url.endsWith('/') ? url + 'index' : url}.html`
diff --git a/server.ts b/server.ts
index 01dc342..e8f566c 100644
--- a/server.ts
+++ b/server.ts
@@ -77,13 +77,13 @@ export async function createServer(
render = (await import('./dist/server/entry-server.js')).render
}
- const [appHtml, preloadLinks, titlePrefix, metaDescription] = await render(url, manifest)
+ const [appHtml, preloadLinks, titlePrefix, meta] = await render(url, manifest)
const html = template
.replace(``, preloadLinks)
.replace(``, appHtml)
.replace(``, titlePrefix)
- .replace(``, metaDescription)
+ .replace(``, meta)
.replace(``, SiteConfiguration.titleSuffix)
res.status(200).set({ 'Content-Type': 'text/html' }).end(html)
diff --git a/src/data/activities/the-ultimate-markdown-benchmark.md b/src/data/activities/the-ultimate-markdown-benchmark.md
index caa0b8e..d357b8b 100644
--- a/src/data/activities/the-ultimate-markdown-benchmark.md
+++ b/src/data/activities/the-ultimate-markdown-benchmark.md
@@ -1,7 +1,8 @@
---
title: ~THE ULTIMATE MARKDOWN BENCHMARK!!!~
time: 2024-12-25
-metaDescription: 尝试所有在本项目中合法的 Markdown 语法
+meta:
+ description: 尝试所有在本项目中合法的 Markdown 语法
---
Merry, merry Christmas
diff --git a/src/data/announcements/scant-press.md b/src/data/announcements/scant-press.md
index 4716a29..edc690c 100644
--- a/src/data/announcements/scant-press.md
+++ b/src/data/announcements/scant-press.md
@@ -1,6 +1,9 @@
---
title: Introducing ScantPress
time: 2024-12-27
+meta:
+ description: A brief introduction to ScantPress
+ generator: ScantPress 0.0.1
---
::: info
diff --git a/src/data/pagedata.ts b/src/data/pagedata.ts
index 24de5a8..8aab9d3 100644
--- a/src/data/pagedata.ts
+++ b/src/data/pagedata.ts
@@ -3,6 +3,6 @@ export interface PageData {
title: string
excerpt?: string
contentUrl: string
- metaDescription?: string
- data: { [key: string]: unknown }
+ meta?: { [key: string]: string }
+ data?: { [key: string]: unknown }
}
diff --git a/src/entry-server.ts b/src/entry-server.ts
index 3ca79f4..69b5aca 100644
--- a/src/entry-server.ts
+++ b/src/entry-server.ts
@@ -21,7 +21,8 @@ export async function render(url: string, manifest: { [key: string]: string[] })
// which we can then use to determine what files need to be preloaded for this
// request.
const preloadLinks = renderPreloadLinks(ctx.modules, manifest)
- return [html, preloadLinks, ctx.titlePrefix ?? '', ctx.metaDescription ?? '']
+ const meta = renderMeta(ctx.meta)
+ return [html, preloadLinks, ctx.titlePrefix ?? '', meta]
}
function renderPreloadLinks(modules: Set, manifest: { [key: string]: string[] }) {
@@ -67,3 +68,13 @@ function renderPreloadLink(file: string) {
return ''
}
}
+
+function renderMeta(meta: { [key: string]: string } | undefined | null): string {
+ if (!meta) return ''
+ let result = ''
+ for (const key in meta) {
+ if (!meta[key]) continue
+ result += ``
+ }
+ return result
+}
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
index 9facef6..ec12566 100644
--- a/src/views/HomeView.vue
+++ b/src/views/HomeView.vue
@@ -39,9 +39,13 @@ onMounted(() => {
if (import.meta.env.SSR) {
const ctx = useSSRContext()
- if (ctx)
- ctx.metaDescription =
+ if (ctx) {
+ if (!ctx.meta) {
+ ctx.meta = {}
+ }
+ ctx.meta.description =
'北京大学学生 Linux 俱乐部是由学生自发成立的民间组织,以学习研究 Linux 操作系统和其它各种与开源相关的软硬件技术为目的。'
+ }
}
diff --git a/src/views/NotFoundView.vue b/src/views/NotFoundView.vue
index d3da21f..fb74ae0 100644
--- a/src/views/NotFoundView.vue
+++ b/src/views/NotFoundView.vue
@@ -12,7 +12,10 @@ if (import.meta.env.SSR) {
const context = useSSRContext()
if (context) {
context.titlePrefix = '404 NOT FOUND | '
- context.metaDescription = '未找到此页面...'
+ if (!context.meta) {
+ context.meta = {}
+ }
+ context.meta.description = '未找到此页面...'
}
}
diff --git a/src/views/PageView.vue b/src/views/PageView.vue
index b0bf6c9..8de4994 100644
--- a/src/views/PageView.vue
+++ b/src/views/PageView.vue
@@ -41,13 +41,9 @@ title.value = currentPage.value?.title
: `${pageCategory.value} - `
if (ssrContext) {
ssrContext.titlePrefix = title.value
- ssrContext.metaDescription = (
- (currentPage.value?.metaDescription as string | undefined)
- ? (currentPage.value?.metaDescription as string)
- : currentPage.value?.excerpt
- ? currentPage.value.excerpt
- : (currentPage.value?.title ?? SiteConfiguration.titleSuffix)
- ).trim()
+ const meta: { [key: string]: string } = currentPage.value?.meta ?? {}
+ meta.description = (meta.description ?? currentPage.value?.excerpt)?.trim()
+ ssrContext.meta = meta
}
const scrollViewRef = ref()
const showTitle = ref(false)