Hugo

共 7 篇文章。

给博客做个站内全文搜索:纯前端离线倒排索引的设计与取舍

• Development

最近给本站正在使用的Chaos主题 增加并逐步完善了一套在客户端进行的全文检索功能。

早年本站使用的是Google站内搜索,不过换成Hugo以后模板中的这个搜索框也就去掉了,毕竟现在也没什么人看blog了,写下去除了给自己留点记录之外,或多或少其实是一种行为艺术,而本站的读者基本上也都知道如何使用搜索引擎。

不过,有时我自己也会希望在blog里找一些以前的文章,虽然本站在Google搜索中的覆盖率还相当高,但有些时候新的文章会搜索不到,或是其实内容已经过时但仍然被索引。虽然在大语言模型的帮助下我整体重建了分类和标签的标注,但这些对于定位有时还是不太方便。

Hugo作为一个静态站点生成器,其实已经有了不少成熟的本地搜索方案。不过,今年都已经2026年了,vibe一个本地搜索并不困难。这里记录一下这个本地搜索的演化过程,以及在这个过程中的一些工程取舍。

阅读全文… ( 本文约 4441 字,阅读大致需要 9 分钟 )

作弊条:在 Nginx 中正确配置自定义 404 页面

• Cheatsheets

最近给 blog 增加了一个自定义的 404 错误页面。像 Hugo 这样的静态网站生成器在构建时,默认会把渲染好的 404 页面直接输出在网站根目录下,即 /404.html。

针对这类页面,我们通常希望:

  1. 当访客访问不存在的网址时,服务器呈现该页面的内容,并且 HTTP 状态码必须是 404。
  2. 当有人(或爬虫)直接在浏览器中访问 /404.html 时,同样呈现其内容,但返回的 HTTP 状态码依然必须是 404,而不是 200 OK。
阅读全文… ( 本文约 1258 字,阅读大致需要 3 分钟 )

写给未来的blog:关于引用、结构、导航与 AI

• Blogging

早年,车东 提出过一个愿景:「让互联网:良好引用,良好结构,良好导航」,这句话一直让我印象深刻。一直以来,对互联网内容的彼此可以有效引用、结构清晰、可以被(人类和机器)理解和持续访问而不是被时间与系统更新湮灭,是我和许多 blog 作者的理想。在我自己的 blog 中,我也一直在尝试实现这三个目标。

阅读全文… ( 本文约 1461 字,阅读大致需要 3 分钟 )

Hugo blog 主题模板重构

• Development

借着 Vibe Coding 的东风,我为 blog 重新设计了一套模板,希望解决一些此前用的基于 ink 模板中存在的一些问题,并彻底清理掉一些历史包袱。

这件事还要从 Search Console 的 Core Web Vitals 报告说起。报告显示,旧主题使用的 Noto Serif SC 网页字体加载缓慢,并在渲染过程中导致了显著的累积布局偏移(CLS)问题。

在调整网站 CSS 的过程中,我逐渐意识到原有主题模板存在不少结构性问题;与其零碎修补,倒不如直接推倒重来。我的想法是,首先用 Hugo 新建一个最新版的最小模板,然后逐渐在上面添加我需要的功能,于是我列了一个需求 wishlist 清单:

阅读全文… ( 本文约 1367 字,阅读大致需要 3 分钟 )

采用了基于 isso 的评论系统

• Cheatsheets

上回书 说到从 Movable Type 搬到 Hugo 上之后,就彻底失去了评论和 pingback 的功能。 因为现时正经写 blog 的人已经越来越少,因此 pingback 似乎意义不太大了,但是能够收集评论反馈还是有一些意义的。

早前,Movable Type 实现的评论系统与其自身的账户系统有集成,并且还支持包括 Facebook、Google 在内的一系列其他 OpenID 的系统。这个功能的一个好处是对于经常访问的人来说比较友好,例如站主可以将某个 ID 设置为受信任的 ID,从而避免先审后发。

阅读全文… ( 本文约 1091 字,阅读大致需要 3 分钟 )

把 blog 从 Movable Type 迁移到了 Hugo

• Blogging

花了些时间把 blog 从 Movable Type 迁移到了 Hugo。

说起来 Movable Type 已经用了有十七年之久了,不过 Movable Type 商业化以后便基本没有更新了,由于它是 Perl 写的,因此我也没什么动力去持续维护。

阅读全文… ( 本文约 1156 字,阅读大致需要 3 分钟 )