SSG 集成实践
Pagefind 最适合接在静态站点生成器之后。无论你使用 VitePress、Astro、Hugo、Eleventy,还是自研 SSG,关键点都是:先生成 HTML,再运行 Pagefind。
通用构建脚本
{
"scripts": {
"build": "your-ssg-build && pagefind --site dist"
}
}
如果搜索资源需要输出到固定路径:
pagefind --site dist --output-path dist/_pagefind
这样浏览器就可以加载:
const pagefind = await import("/_pagefind/pagefind.js");
控制正文区域
自研 SSG 或 Vue SSR 外壳通常会输出统一布局。推荐只给正文主区域加 data-pagefind-body:
<main data-pagefind-body>
<article>
...
</article>
</main>
导航、侧边栏、目录、页脚和广告位不应进入正文索引。若它们必须存在于 main 中,可给局部元素加 data-pagefind-ignore。
当前项目的集成方式
本项目的构建流程已经在静态页面输出后运行 Pagefind:
await execFileAsync(command, [
"exec",
"pagefind",
"--site",
"dist",
"--output-path",
"dist/_pagefind",
"--root-selector",
"main",
"--force-language",
"zh",
]);
页面正文位于带有 data-pagefind-body 的 main 中,客户端搜索框按需导入 /_pagefind/pagefind.js,并使用 pagefind.search(query) 获取结果。
这种方式的好处是:
- Pagefind 不参与 Markdown 编译链路。
- 搜索索引来自最终 HTML,和线上内容一致。
- 搜索资源放在
dist/_pagefind,部署时作为静态资源一起发布。 - 中文站点用
--force-language zh保持统一索引。
部署检查
上线前检查:
- 构建产物中存在
dist/_pagefind/pagefind.js。 - 页面能访问
/_pagefind/pagefind.js。 - 搜索框只在用户交互时加载 Pagefind。
- 搜索结果 URL 与站点路由一致。
- CDN 或静态托管没有屏蔽
.wasm、.pf_*等索引资源。
相关内容
- Pagefind 是什么 介绍 Pagefind 的定位、工作流程、适用场景与限制,帮助你判断它是否适合文档站、博客和静态内容网站。
- 安装与运行 讲解如何通过 npx、pnpm、Python 包或二进制文件运行 Pagefind,并把它接入静态站点构建流程。
- 索引范围控制 讲解 data-pagefind-body、data-pagefind-ignore、root selector、include characters 等索引控...
- 搜索 UI 介绍 Pagefind Component UI 的引入方式、弹窗搜索、搜索框组件和样式定制思路,适合快速给静态站点增加搜索入口。
- JavaScript API 讲解如何通过 /_pagefind/pagefind.js 动态导入搜索 API,执行查询、按需加载结果、渲染标题、摘要和 URL。
- 元数据与筛选 介绍 data-pagefind-meta、data-pagefind-filter、默认元数据、属性捕获和筛选查询设计,让搜索结果更有结构。