Butterfly 主题更改
Butterfly 是 Hexo 里配置最细致的主题之一,好处是几乎什么都能改,代价是配置文件长得让人迷路。这篇把常用改动按「改哪里 → 改什么 → 效果」的方式记下来,配的正是本站(Butterfly 4.x)。
一、先分清两个配置文件
新手最容易改错文件,先记住这张表:
| 文件 | 管什么 | 什么时候动 |
|---|---|---|
_config.yml |
站点:标题、作者、URL、部署、插件 | 换域名、改部署、装插件时 |
_config.butterfly.yml |
主题外观:导航、配色、侧边栏、评论 | 改样式、加功能时 |
主题配置要放在 _config.butterfly.yml(根目录),不要直接改 themes/butterfly/_config.yml —— 主题一升级就会被覆盖,改动全丢。
改完记得重新生成:
1 | npx hexo clean && npx hexo generate && npx hexo server # 本地预览 http://localhost:4000 |
二、搜索功能配置
Butterfly 内置三种搜索方案,按推荐度排序:
零依赖、最省心,文章量在几百篇以内足够用。
- 安装生成索引的插件:
1 | npm install hexo-generator-search --save |
- 在
_config.butterfly.yml里开启:
1 | local_search: |
- 站点
_config.yml补上生成器配置(默认一般即可):
1 | search: |
搜索体验最好(实时、支持高亮),但需要注册账号并每次部署上传索引,配置稍繁琐。
1 | npm install hexo-algoliasearch --save |
1 | algolia_search: |
1 | # 站点 _config.yml |
部署前需要执行 hexo algolia 上传索引(要配 HEXO_ALGOLIA_INDEXING_KEY 环境变量)。
Algolia 官方为开源文档提供的免费搜索服务,需申请通过(站点需公开且内容合规)。原笔记里记的就是它:
- 在
_config.butterfly.yml中加入:
1 | docsearch: |
- 到 DocSearch 官网 提交申请,通过后 Algolia 会把
appId/apiKey/indexName发到你的邮箱 - 填进上面的配置并把
enable改为true
DocSearch 靠爬虫抓取线上站点建索引,所以必须先把博客部署到公网并提交申请;本地 hexo server 是测不出搜索结果的。
三、导航菜单
1 | menu: |
格式是 显示名: 路径 || 图标类名。图标从 Font Awesome 找,写完整类名即可。
菜单里的路径必须有对应页面,否则点进去是 404。创建页面用:
1 | npx hexo new page categories |
会在 source/categories/index.md 生成页面,确认里面的 type 字段正确:
1 |
|
四、站点基础信息
_config.yml(站点配置):
1 | title: 你的站名 |
url 一定要和最终访问域名完全一致(含 www 与否)。它决定 sitemap、RSS、文章永久链接,填错会让百度收录失败。
五、头图、封面与头像
1 | # _config.butterfly.yml |
单篇文章指定封面(front-matter):
1 |
|
头图建议尺寸 1920×1080 左右、控制在 300KB 以内。太大的话首屏会先白一下,体验很差。统一裁成相同比例,翻页时观感更整齐。
六、侧边栏卡片
aside 控制侧栏显示哪些卡片及排序:
1 | aside: |
card_webinfo 能显示运行时间、文章字数、访问量(访问量需配合不蒜子等统计)。
七、评论系统
本站用的是 Twikoo(免费、基于云函数、国内访问快):
1 | comments: |
其它可选方案对比:
| 方案 | 优点 | 缺点 |
|---|---|---|
| Twikoo | 免费、部署简单、支持邮件通知 | 依赖云函数(Vercel / 腾讯云) |
| Waline | 界面现代、支持多数据库 | 同样需服务端 |
| Giscus | 基于 GitHub Discussions,零后端 | 评论者需 GitHub 账号 |
| Disqus | 老牌、功能全 | 国内访问不稳定 |
八、代码高亮与代码块
1 | highlight: |
美化代码块(本站用的这类效果)可以写在自定义 CSS 里:
1 | /* source/css/custom.css */ |
九、主题色与深色模式
1 | theme_color: |
改主色最快的方式就是 theme_color.main 一个值。想做更细的定制(比如三档主题切换),可以用 CSS 变量覆盖 + 注入 JS,参考本站 source/css/theme-tri.css 的做法,不动主题源文件。
十、自定义 CSS / JS(关键技能)
想改样式但不想动主题源码,用注入:
1 | inject: |
对应文件放在 source/css/ 和 source/js/,Hexo 会原样拷贝到 public/。
CSS 覆盖不生效时的排查顺序:
- 文件是否真的被引用(看页面源码里有没有这个
<link>) - 加载顺序 —— 自定义 CSS 必须在主题 CSS 之后
- 选择器特异性不够 —— 去
public/css/index.css里搜原规则,看它用了几层选择器,照着补齐(比如主题写#nav .site-page:not(.child):after,你只写#nav .site-page::after就压不过它) - 浏览器缓存 —— 强制刷新
Cmd + Shift + R
十一、常用功能开关速查
1 | # 文章相关 |
十二、值得装的插件
| 插件 | 作用 |
|---|---|
hexo-abbrlink |
生成短链接(/posts/xxxx.html),比中文路径友好 |
hexo-wordcount |
字数与阅读时长统计 |
hexo-generator-sitemap / hexo-generator-baidu-sitemap |
生成 sitemap,提交搜索引擎用 |
hexo-bilibili-bangumi |
追番页面 |
hexo-butterfly-swiper |
首页轮播图(本站用了 swiper_index) |
hexo-filter-nofollow |
外链加 nofollow,有利于 SEO |
1 | npm install hexo-abbrlink hexo-wordcount hexo-generator-sitemap --save |
十三、常见坑
| 现象 | 原因 | 解法 |
|---|---|---|
| 改了配置没生效 | 没执行 hexo clean |
清缓存后重新生成 |
| 菜单点进去 404 | 没创建对应 page | hexo new page xxx |
| 样式改了不生效 | 选择器特异性不够 / 缓存 | 见第十节排查顺序 |
| 部署后文章链接变了 | permalink 或 abbrlink 配置变了 |
改链接后必须配 301 重定向 |
| 图片不显示 | 路径大小写、中文文件名 | 用相对路径 /img/x.png,避免中文名 |
| 搜索无结果 | 本地搜索索引未生成 | 确认装了 hexo-generator-search |
改动原则:能用配置解决的不写代码,能靠 CSS 覆盖的不改主题源文件。这样主题升级时一条 git pull 就能跟上,自己的定制也不会丢。




