跳过正文
  1. 博客文章/

从 60 分到 95 分:Hugo Blowfish 博客的极致优化之路

·688 字·4 分钟·
博客运维 Hugo Blowfish 博客优化 DevOps CI/CD
Zayn
作者
Zayn
专注 Kubernetes、CI/CD、可观测性等云原生技术栈,记录生产环境中的实战经验与踩坑复盘。
目录
Blowfish 主题实践 - 这篇文章属于一个选集。
3: 本文
一次完整的 Hugo Blowfish 博客优化复盘——从基础的 Front Matter 修复,到苹果窗口风格代码框、Unsplash 智能封面图、CI/CD 自动化部署,16 个 MR 逐步将博客质量从 60 分推到 95 分。

优化前的状态
#

拿到这个博客时,89 篇技术文章已经积累了相当的内容量,但在工程化和视觉呈现上存在不少问题:

维度现状评分
Front Matter 完整性96.6% 缺少显示控制参数D
内容结构68.5% 文章 H1 标题滥用D
SEO7 篇缺 description,无 feature imageC
视觉体验无 Favicon,无头像,默认配色C-
CI/CD仅构建,无自动部署C
核心问题:Blowfish 主题功能强大,但大部分高级特性未启用。文章质量不错,展示效果却远未达到主题的潜力。

优化路线图
#

整个优化分为 5 个阶段,按投入产出比排序执行:

flowchart LR
    A["阶段一
SEO 基础"] --> B["阶段二
视觉体验"] B --> C["阶段三
布局重构"] C --> D["阶段四
代码框"] D --> E["阶段五
CI/CD"] style A fill:#10b981,color:#fff style B fill:#3b82f6,color:#fff style C fill:#8b5cf6,color:#fff style D fill:#f59e0b,color:#fff style E fill:#ef4444,color:#fff

阶段一:SEO 基础修复
#

H1 标题滥用修复(72 篇,342 处)
#

Blowfish 自动从 title 字段生成 H1,正文中再写 # 标题 就会产生多个 H1,直接导致:

  • 搜索引擎降权(一个页面不应有多个 H1)
  • 目录(TOC)生成混乱
  • 无障碍阅读器导航异常

写了一个 Python 脚本,精确匹配代码块外的 # 并转为 ##

# 核心逻辑:追踪代码块围栏,仅修改正文中的 H1
in_code_block = False
for line in lines:
    if line.startswith('```'):
        in_code_block = not in_code_block
    if not in_code_block and line.startswith('# '):
        line = '#' + line  # # -> ##
成果:72 篇文章,342 个 H1 精确转为 H2,代码块内的注释完全不受影响。

补充缺失的 description
#

7 篇文章缺少 description 字段,搜索引擎无法生成有意义的摘要。逐篇阅读内容后补充了 50-150 字的中文描述。

启用 robots.txt
#

enableRobotsTXTfalse 改为 true,让搜索引擎能正确爬取。


阶段二:视觉体验提升
#

Favicon 全尺寸生成
#

从 author.svg 通过 CairoSVG 生成 5 种尺寸的 PNG:

# 生成的文件
static/favicon-16x16.png      # 浏览器标签页
static/favicon-32x32.png      # 浏览器标签页(高分屏)
static/apple-touch-icon.png   # iOS 添加到主屏幕
static/android-chrome-192x192.png  # Android PWA
static/android-chrome-512x512.png  # Android PWA 启动画面

通过自定义 extend-head.html 注入 favicon 链接。

分类名称统一(59 篇)
#

标签和分类的大小写混乱严重影响归档效果:

修复前修复后
k8s / K8s / kubernetesKubernetes
devops / DevOpsDevOps
docker / DockerDocker
linux / LinuxLinux
日志可观测性
技术技术实践

首页个人信息增强
#

# 修改前
headline = "欢迎来到我的博客"
bio = "一个热爱技术、乐于分享经验和想法的开发者。"

# 修改后
headline = "云原生与 DevOps 实践者"
bio = "专注 Kubernetes、CI/CD、可观测性等云原生技术栈,
       记录生产环境中的实战经验与踩坑复盘。"

阶段三:布局重构
#

配色与布局切换
#

配置项修改前修改后效果
colorSchemeblowfishterminal绿色极客终端风
homepage.layoutprofilebackground沉浸式背景+毛玻璃
header.layoutfixedfixed-fill-blur滚动时毛玻璃效果
pagerSize10015分页加载优化
smartTOCHideUnfocusedChildrenfalsetrue长文目录自动折叠

子导航菜单
#

在主导航下方添加热门分类快捷入口:

[[subnavigation]]
  name = "Kubernetes"
  pageRef = "categories/kubernetes"
  weight = 10

[[subnavigation]]
  name = "Docker"
  pageRef = "categories/docker"
  weight = 20

自定义 404 页面
#

替换主题默认的简陋 404,使用 Tailwind 样式实现居中大号数字 + 双按钮导航。


阶段四:苹果窗口风格代码框
#

这是视觉提升最大的一项改动。完全通过 CSS + JS 实现,不修改主题源码。

CSS 实现要点
#

/* macOS 标题栏 */
.highlight::before {
  content: "";
  display: block;
  height: 2.5rem;
  background: rgba(40, 44, 52, 0.95);
}

/* 红绿黄三圆点 */
.highlight::after {
  content: "";
  position: absolute;
  top: 0.85rem;
  left: 1rem;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: #ff5f57;
  box-shadow:
    20px 0 0 #febc2e,
    40px 0 0 #28c840;
}

踩坑记录
#

坑 1:Chroma 底纹。Hugo 的 Chroma 高亮器给 .chroma.line 元素都带了 background-color,与自定义背景叠加产生条纹。解决:对所有子元素强制 background: transparent !important,仅由 pre 控制背景。
坑 2:复制按钮叠加。Blowfish 内置的 enableCodeCopy 和自定义 code-copy.js 同时生效,产生两个按钮。解决:关闭主题内置的 enableCodeCopy = false
坑 3:复制多余换行.cl 元素的 textContent 本身包含 \n,逐行拼接又追加一个,导致双倍换行。解决:直接取 code.textContent,一行代码替代 15 行。

阶段五:封面图与 CI/CD
#

Unsplash 智能封面图
#

从 Picsum 随机风景照进化为 Unsplash 按分类精选的技术主题图片:

flowchart TD
    A["文章 Front Matter"] --> B{"有 featureimage?"}
    B -->|有| C["直接使用"]
    B -->|无| D["CI 构建前运行
assign-featureimage.py"] D --> E["读取已使用的图片 ID"] E --> F["从 95+ 图片池中
选取未使用的 ID"] F --> G["slug MD5 hash
保证稳定分配"] G --> H["写入 Front Matter"] H --> C

核心设计决策:

  • 1920x1080 q=100 — 1080p 满质量,配合 hotlinkFeatureImage = true 直接引用 CDN
  • slug hash 分配 — 同一篇文章每次构建获得同一张图
  • 已用 ID 跳过 — 保证 89 篇文章零重复
  • CI 自动化 — 新文章无需手动配图

SSH 远程部署
#

完整的 CI/CD 流水线:

stages:
  - build          # Hugo 构建(--minify --gc)
  - docker-build   # Docker 镜像构建推送
  - deploy         # GitLab Pages + SSH 远程部署

SSH 密钥通过 GitLab CI/CD Variable(file 类型)注入,OpenSSH 格式转 PEM 避免 libcrypto 兼容性问题。


最终成果
#

数据对比
#

指标优化前优化后
SEO 评分6095
Front Matter 完整率3.4%100%
H1 标题规范31.5%100%
封面图覆盖0%100%(每篇唯一)
Favicon5 尺寸全覆盖
构建产物未压缩–minify –gc
部署方式手动SSH 自动远程部署
新文章封面图需手动配CI 自动分配

MR 统计
#

16 个 MR,每个都经过 CI 流水线 + pr-agent AI 评审:

pie title MR 分类统计
    "SEO/内容修复" : 5
    "视觉体验" : 4
    "布局重构" : 2
    "代码框" : 3
    "CI/CD" : 2

关键经验
#

1. 不要修改主题源码
#

所有自定义都通过 Blowfish 提供的扩展点实现:

  • layouts/partials/extend-head.html — Favicon
  • layouts/partials/extend-footer.html — 自定义 JS
  • assets/css/custom.css — 苹果代码框样式
  • layouts/404.html — 自定义 404 页面

主题升级时零冲突。

2. 批量操作先写脚本
#

72 篇文章的 H1 修复、59 篇的分类统一、89 篇的封面图分配——全部通过 Python 脚本自动化,手动改一天的工作量 10 分钟搞定。

3. 每次改动都要验证
#

CI 流水线 + pr-agent 双重验证,16 个 MR 无一次直接推 main。有一次 author.svg 做头像导致 Hugo 构建失败(SVG 不支持 .Fill 方法),如果直推 main 就会导致线上故障。

4. Unsplash 图片 ID 要逐个验证
#

92 个候选 ID 中有 23 个返回 404。Unsplash 的图片可能被作者删除或设为私有,必须 curl 逐个验证后才能使用。

下一步
#

  • 核心文章改用 Page Bundle 结构(posts/xxx/index.md + 本地图片)
  • 定制 OG 社交分享图(1200x630,含博客名称和文章标题)
  • 接入 Umami 自托管分析
查看 Blowfish 优化指南
Blowfish 主题实践 - 这篇文章属于一个选集。
3: 本文

相关文章

Blowfish 文章优化前后对比分析
Blowfish 主题文章优化指南
·1132 字·6 分钟
博客运维 Hugo 博客优化 SEO Blowfish Shortcodes
欢迎来到我的博客!
·104 字·1 分钟
综合 欢迎 Hugo 博客 Blowfish