极简主题采用了 Pagefind 作为搜索引擎,替代了原有的 Fuse.js 方案。Pagefind 是专为静态网站设计的高性能搜索引擎,对中文搜索体验极佳。

为什么选择 Pagefind

相比传统方案,Pagefind 具有以下优势:

  • 🚀 极速加载 - 索引文件自动分片,按需加载,首屏无性能负担
  • 🎯 精准匹配 - 支持长句搜索、模糊匹配,中文分词效果优秀
  • 📱 零依赖 - 纯静态实现,无需服务器端支持
  • 💾 体积超小 - 索引压缩后体积极小,对大体量站点友好
  • 🎨 美观UI - 自带精致搜索界面和结果预览
  • 🌐 多语言支持 - 完美支持中文、英文等多语言搜索

环境准备

Pagefind 搜索索引的生成需要 Node.js 环境:

  • 本地开发:需要在本地安装 Node.js(v16+),使用 npx 命令生成索引
  • 云端部署:通常云端服务器已内置 Node.js 环境,无需本地安装

检查 Node.js

1
2
node --version
# 应显示 v16.x.x 或更高版本

安装 Node.js(如需)

访问 Node.js 官网 下载并安装 LTS 版本。

配置搜索页面

1. 创建搜索页面

content 目录下创建 search.md 文件:

1
2
3
4
5
---
title: "搜索"
layout: "search"
description: "搜索本站内容"
---

2. 配置导航菜单

hugo.yaml 中添加搜索菜单:

1
2
3
4
5
6
menu:
  main:
    - identifier: search
      name: 搜索
      url: /search/
      weight: 30

3. 启用搜索功能

主题已内置 Pagefind 支持,无需额外配置。旧的 fuseOpts 配置已弃用。

本地开发场景

场景一:本地预览并测试搜索

因为 hugo server 会将 static 目录作为网站根目录资源,所以需要将搜索索引生成到 static 目录:

1
2
3
4
5
6
7
8
# 第一步:构建 Hugo 站点
hugo

# 第二步:生成 Pagefind 索引到 static 目录
npx pagefind --site public --output-path static/pagefind

# 第三步:启动本地服务器
hugo server

访问 http://localhost:1313/search/ 即可测试搜索功能。

更新搜索索引

当你新增或修改文章后,需要重新生成索引:

1
2
3
4
5
# 重新构建并生成索引
hugo && npx pagefind --site public --output-path static/pagefind

# 重启服务器
hugo server

场景二:预览最终构建文件

如果你已经生成了最终的静态文件,想预览脱离 Hugo 环境的纯静态站点:

1
2
3
4
5
6
7
8
# 构建 Hugo 站点
hugo

# 生成 Pagefind 索引(默认输出到 public/pagefind)
npx pagefind --site public

# 使用 Pagefind 自带服务器预览
npx pagefind --site public --serve

这会启动一个 HTTP 服务器(默认 http://localhost:1414),专门预览 public 目录的最终文件。

线上部署场景

GitHub Pages 自动部署

.github/workflows/gh-pages.yml 中配置自动构建:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
name: GitHub Pages

on:
  push:
    branches: [main]

jobs:
  build-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: true

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: 'latest'
          extended: true

      - name: Build with Hugo
        env:
          HUGO_ENVIRONMENT: production
          HUGO_ENV: production
        run: |
          hugo \
            --minify \
            --baseURL "${{ steps.pages.outputs.base_url }}/"
          # 关键步骤:生成 Pagefind 索引
          npx pagefind --site public

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./public

Vercel 部署

在项目根目录创建 vercel.json

1
2
3
4
{
  "buildCommand": "hugo && npx pagefind --site public",
  "outputDirectory": "public"
}

或在 Vercel 项目设置中:

  • Build Command: hugo && npx pagefind --site public
  • Output Directory: public

Cloudflare Pages 部署

在 Cloudflare Pages 设置中:

  • Build command: hugo && npx pagefind --site public
  • Build output directory: public

Netlify 部署

netlify.toml 中配置:

1
2
3
[build]
  command = "hugo && npx pagefind --site public"
  publish = "public"

搜索功能优化

自定义搜索配置

如需自定义搜索行为,可在 hugo.yaml 中添加:

1
2
3
4
5
params:
  # 搜索相关配置
  search:
    # 是否启用搜索
    enabled: true

排除特定页面

如果不想让某些页面被搜索到,可以在文章 Front Matter 中添加:

1
2
3
4
---
title: "私密页面"
search: false
---

搜索结果排序

Pagefind 会根据匹配度和内容相关性自动排序搜索结果。

常见问题

Q: 本地搜索无结果?

A: 确保已执行以下步骤:

  1. 先运行 hugo 构建站点
  2. 再运行 npx pagefind --site public --output-path static/pagefind 生成索引
  3. 最后运行 hugo server 启动服务器

Q: 搜索索引文件在哪里?

A:

  • 本地开发:static/pagefind/ 目录
  • 生产环境:public/pagefind/ 目录

Q: 为什么中文搜索体验更好?

A: Pagefind 使用先进的分词算法,能准确识别中文词汇边界,支持:

  • 精确匹配:输入"极简主题",找到包含完整词组的文章
  • 部分匹配:输入"极简",找到包含"极简"的文章
  • 长句搜索:输入完整句子,找到相关内容

Q: 搜索索引会很大吗?

A: Pagefind 使用智能分片和压缩技术:

  • 索引自动分片,用户只下载需要的部分
  • 压缩后体积极小,即使千篇文章也仅几百 KB
  • 首屏加载不包含搜索索引,不影响性能

Q: 需要手动安装 Pagefind 吗?

A: 不需要。使用 npx pagefind 会自动下载并执行,无需全局安装。云端部署时 CI/CD 环境通常已预装或会自动安装。

Pagefind 命令速查

命令 说明 使用场景
npx pagefind --site public 生成索引到默认位置 线上部署
npx pagefind --site public --output-path static/pagefind 生成索引到 static 本地开发
npx pagefind --site public --serve 启动预览服务器 预览最终构建

相关配置


配置完成后,你的博客将拥有快速、精准的搜索功能,大幅提升用户体验!