惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
Y
Y Combinator Blog
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
博客园_首页
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
宝玉的分享
宝玉的分享

豆沙工作室

不想(二)十七岁 小点阵字 Get an Oscilloscope 杰理 WTS 格式音频转换和打包 [11ty] 增量式地刷新 CDN 缓存 站起来,为你的成果答辩吧 公理还是定理? [11ty] 处理资产文件的 CDN 缓存问题 [11ty] 无障碍设计:正确地标识图和表 停止 Mac 上的时间机器备份 从 Gitea 迁移到 Forgejo 评论里的私信消息 记得清理你的日志文件 招魂 Annihilation 直面死亡 [11ty] 修复 RSS 里的数学公式 看到了一个神奇的 UA PreFound:10B - 四次击键 一点小小的 AI 震撼 PreFound:10A - 文本之外,还有(绘)文字 PreFound:09 - 色彩运算子 计算机不予申辩 Re-Game 2.0 Addendum C - Press START PreFound:08 - 动效与仿射 PreFound:07 - 图片拼贴报 PreFound:06 - 漫游雪花海 PreFound:05 - 写出到屏幕 And Trek I Will PreFound:04 - 举起渲染器
[11ty] 使用 Pagefind 实现静态站点的搜索
dousha99 · 2026-06-11 · via 豆沙工作室

最近发现站点的搜索不太正常,我在需要查找之前的文章时发现按标题搜却怎么都搜索不到,哪怕是英语文章这种理论上不应该出现分词问题的文章也找不到。

那么,正好捋一下在 11ty 中需要怎么接入 Pagefind 做搜索吧,也许是哪里配置有问题?

其实 Pagefind 和 11ty 本身的关系并不大:Pagefind 是一个静态站点索引生成和搜索工具,它并不和任何一个站点生成器绑定。这意味着你可以选用诸如 Hugo 或者 Hexo 等其他静态站点生成器,它们接入 Pagefind 的过程都基本一致。

安装 Pagefind:

npm i pagefind

编辑 package.json, 添加一个新的指令启动 Pagefind 的索引生成:

{
  "scripts": {
    "build-index": "npx pagefind --site _site"
  }
}

Pagefind 是通过直接解析生成后的 HTML 文件来构建索引的,所以需要先把站点通过 11ty 构建出来,再运行 npm run build-index 构建页面索引。Pagefind 会将必要的 CSS, JS 和索引文件输出到 _site/pagefind 文件夹下。

如果你需要构建站点的时候一并构建 Pagefind 的索引,那么也可以把这个指令追加到 build 条目里:

{
  "scripts": {
    "build": "npx @11ty/eleventy && npx pagefind --site _site"
  }
}

编辑页面模板,告诉 Pagefind 正文内容在哪里:

<body>
  <!-- 在正文的父容器中添加 data-pagefind-body 属性 -->
  <article data-pagefind-body>
    <!-- 这里是你的正文 -->  
  </article>
</body>

如果你的标题并不是用 <h1> 之类的传统标题,或者 <h1> 已经被用作站点大标题,而文章的标题是用其他元素表示的,也可以告诉 Pagefind 以给定的元素内容为基准:

<h2 data-pagefind-meta="title">Hello!</h2>
<!-- 将 h2 设置为文章标题 ^ -->

再新增一个页面接入 Pagefind 的搜索框:

<!-- 下面这个样式表需要修改成你对应存放 Pagefind 样式表的地址 -->
<link href="/pagefind/pagefind-ui.css" rel="stylesheet">
<!-- 下面这个 div 会存放 Pagefind 的全部内容 -->
<div id="search" class="search"></div>
<!-- 下面这个脚本的地址也要跟随你的具体配置一并修改 -->
<script src="/pagefind/pagefind-ui.js" onload="new PagefindUI({ element: '#search', showImages: false });"></script>
<!-- ^ 如果你改了 div 框框的 id, 也需要修改这里的名字 -->

这样就足够了,没有太多活动部件。当然,如果你还有自定义 UI 的需求,比如使用模态搜索框而不是用一个单独页面的话,则可以参考官方文档中的 UI 自定义相关的内容;以及,如果你还有更细化的需求,比如设置过滤、排序或者调整不同内容的权重,则也可以参考官方文档

捋了一圈下来,没发现什么问题。不过扫了一眼 GitHub, 发现 Pagefind 在 1.5.0 中修改了标题不参与搜索的重要问题,更新包之后重建索引,问题解决。