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

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

云野开源志

OpenClaw npm 升级踩坑记:从版本冲突到模块丢失 免责声明 openclaw(moltbot、Clawdbot)常见异常 大模型配置-千问免费版 初始化OpenClaw 安装openclaw记录 大年初一桃花谷 CheckSSL.sh - SSL证书到期时间监控脚本 g.sh - Go语言环境管理工具安装脚本 install-cri-docker.sh - cri-dockerd安装脚本 install-docker.sh - Docker Engine快速安装脚本 install-docker2.sh - Docker 交互式安装脚本 install-nginx.sh - Nginx官方源快速安装脚本 install-zerotier.sh - ZeroTier 虚拟网络快速安装脚本 mng.sh - Nginx配置文件合并脚本 OpenSSL.sh - 自签名 SSL 证书生成脚本 SystemInfoMonitor.sh - 系统资源监控告警脚本 UpdateImages.sh - Docker 镜像批量更新脚本 解忧杂货铺 - 栏目声明 Certd - 解决多平台SSL证书管理难题的神器 轻量级网络端口监控工具 GeoLite2 自动搬运仓库使用手册 MaxMind 免费账号注册 CloudFlare Accel Docker 搭建私有 DNS 服务器 hugo-theme-stack集成Umami openresty编译添加geoip2模块支持 GPU加速云原生应用,开启高性能计算新纪元 5. K8S Service与Ingress 4. K8S 控制器 Rancher搭建 3. K8S Pod 资源管理 2. K8S 基础资源管理 1. K8S 简介和认证介绍 Rancher集成AzureAD认证 Harbor 部署搭建 站点留言板 关于 友情链接
为Hugo Next主题添加Umami统计支持
云野开源志 · 2026-01-07 · via 云野开源志

总结摘要

本文详细介绍如何为Hugo Next主题添加开源统计工具Umami的支持。通过自定义analytics文件和修改主题配置,实现对开源统计工具Umami的完整集成。文章涵盖了实现原理、具体步骤、配置方法和验证过程,为使用Hugo博客的用户提供了完整的Umami集成解决方案。

概述

最近我将博客的统计工具从其他方案迁移到了开源的 Umami ,但发现 Hugo 的 Next 主题默认并不支持 Umami。经过一番研究,我成功地为该主题添加了 Umami 统计支持。本文将详细介绍实现过程,为使用 Hugo 博客的用户提供一个完整的 Umami 集成解决方案。

主题官网: Github-hugo-next

先声明一下,这个主题默认支持51La、百度、谷歌、Cloudflare、不蒜子、谷歌统计,但是不支持Umami。而且已经做到比较成熟

为什么选择 Umami?

Umami 是一个开源的、注重隐私的网站统计解决方案,它具有以下优点:

  • 轻量级:脚本大小仅约 1 KB,不会影响网站加载速度
  • 注重隐私:不会收集个人身份信息,符合 GDPR 和 ePrivacy 规定
  • 简洁直观的界面:提供清晰的数据展示和易于理解的图表
  • 支持自托管:完全掌控自己的数据,无需依赖第三方服务
  • 完全开源:代码完全透明,可自行修改和部署
  • 数据可视化:提供丰富的数据统计和可视化图表

与 Google Analytics 等传统统计工具相比,Umami 更加注重用户隐私,同时提供了简洁易用的界面和功能。

实现原理

Hugo 主题的统计功能通常通过在页面的 <head> 部分注入统计脚本来实现。Umami 统计需要在每个页面中包含一个 JavaScript 文件,该文件会收集页面访问数据并发送到你的 Umami 实例。

实现方法是通过创建自定义的 analytics 模板文件,并修改主题的 analytics 加载逻辑,使其支持 Umami 统计配置。

具体实现步骤

准备工作

首先,确保你已经拥有一个可访问的 Umami 实例。如果你还没有,可以按照官方文档进行部署:

1
2
3
4
5
6
7
8
# 使用 Docker 部署 Umami
docker run -d --restart=always --name umami \
  -p 3000:3000 \
  -e DATABASE_URL="postgresql://[数据库用户名]:[数据库密码]@[数据库主机]:[数据库端口]/[数据库名]" \
  -e APP_SECRET="任意长随机字符串" \
  -e HASH_LENGTH="8" \
  -e DISABLE_TELEMETRY="true" \
  ghcr.io/umami-software/umami:postgresql-latest

部署完成后,创建一个网站并获取网站 ID 和追踪脚本 URL。

创建自定义 Analytics 文件

首先,我们需要创建一个自定义文件来处理 Umami 统计代码:

1
mkdir -p layouts/partials/_thirdparty/analytics

然后创建 layouts/partials/_thirdparty/analytics/umami.html 文件

粘贴以下内容:

1
2
3
4
5
{{- if .Site.Params.analytics.umami.enable -}}
<!-- Umami Analytics -->
<script async defer data-website-id="{{ .Site.Params.analytics.umami.websiteId }}" src="{{ .Site.Params.analytics.umami.scriptUrl }}"></script>
<!-- End Umami Analytics -->
{{- end -}}

image-20260107032728212

这个文件使用了 Hugo 的模板语法,只有在 enable 参数设置为 true 时才会输出统计脚本。

修改主题文件

接下来,我们需要修改主题的 analytics.html 文件,以支持 Umami 统计。该文件位于:

1
themes/hugo-theme-next/layouts/_partials/head/script/analytics.html

将以下代码添加到该文件的末尾(在其他统计配置之后):

1
2
3
{{ if isset .Site.Params.analytics "umami" }}
  {{ partial "_thirdparty/analytics/umami.html" . }}  
{{ end }}

image-20260107032806215

这段代码检查配置中是否包含 umami 设置,如果有则加载我们创建的自定义 Umami 模板。

配置 Umami 统计

hugo.yaml 配置文件中添加 Umami 统计的配置:

 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
params:
  analytics:
    # 51La 站点统计
    # 更多信息请参考:https://invite.51.la/1NUfGTS1?target=V6
    # 51La Analytics
    # See: https://invite.51.la/1NUfGTS1?target=V6 
    #laId: #<anaytics_id> 
    # 百度统计
    # Baidu Analytics
    #baidu: #<anaytics_id>
    # 谷歌统计
    # Google Analytics
    #google: #<anaytics_id>
    # 谷歌统计
    # Cloudflare Analytics
    #cloudflare: #<cloudflare_id>
    # 不蒜子统计
    # Show Views / Visitors of the website / page with busuanzi.
    # For more information: http://ibruce.info/2015/04/04/busuanzi/
    busuanzi:
      visitorsIcon: fa fa-user
      viewsIcon: fa fa-eye
    # Umami 统计
    # Umami Analytics
    umami:
      # 启用Umami统计
      enable: true
      # 你的Umami网站ID
      websiteId: "your-umami-website-id"
      # Umami脚本的URL,例如:https://umami.example.com/script.js
      scriptUrl: "https://your-umami-instance.com/script.js"

image-20260107033009006

请确保将以下参数替换为你的实际值:

  • your-umami-website-id:在 Umami 实例中创建网站时获得的 ID
  • https://your-umami-instance.com/script.js:你的 Umami 实例的追踪脚本 URL

验证集成

完成上述步骤后,重新构建并启动你的 Hugo 网站:

要验证集成是否成功,可以执行以下操作:

  1. 打开浏览器,访问你的网站
  2. 右键点击页面,选择"查看页面源代码"
  3. 搜索页面源代码中是否包含 Umami 的脚本标签
  4. 在开发者工具的"网络"标签中,查看是否有对 Umami 脚本的请求

如果一切正常,你应该能看到类似这样的代码:

1
<script async defer data-website-id="your-umami-website-id" src="https://your-umami-instance.com/script.js"></script>

同时,访问你的 Umami 控制面板,应该能看到实时访问数据。

故障排除

如果 Umami 统计没有正常工作,请检查以下几点:

检查配置参数

  • 确认 umami.html 文件已正确创建
  • 确认 analytics.html 文件已正确修改
  • 确认配置文件中的 websiteIdscriptUrl 已正确设置
  • 确认 enable 参数设置为 true

检查 Umami 实例

  • 确认 Umami 实例可正常访问
  • 确认网站 ID 与 Umami 实例中的 ID 一致
  • 检查浏览器控制台是否有 JavaScript 错误

检查网络请求

  • 使用浏览器开发者工具的"网络"标签
  • 查看是否有对 Umami 脚本的请求
  • 检查请求状态是否为 200

扩展功能

自定义 Umami 配置

你还可以为 Umami 添加更多自定义配置,例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{{- if .Site.Params.analytics.umami.enable -}}
<!-- Umami Analytics with Custom Configuration -->
<script>
  var _umami = _umami || [];
  _umami.push(['track', {
    websiteId: '{{ .Site.Params.analytics.umami.websiteId }}',
    hostUrl: '{{ .Site.Params.analytics.umami.hostUrl }}'
  }]);
</script>
<script async defer src="{{ .Site.Params.analytics.umami.scriptUrl }}"></script>
{{- end -}}

同时使用多个统计工具

你可以在配置中同时启用多个统计工具,包括 Umami 和其他统计工具。它们之间通常不会冲突。

更新主题时的注意事项

这是一个关键部分,需要特别注意:当你更新 Hugo Next 主题时,直接修改的主题文件将会被覆盖,导致 Umami 集成失效。以下是处理主题更新的几种方法:

方法一:备份和恢复修改

  1. 备份修改:在更新主题之前,备份你修改过的文件:

    1
    
    cp themes/hugo-theme-next/layouts/_partials/head/script/analytics.html themes/hugo-theme-next/layouts/_partials/head/script/analytics.html.bak
  2. 更新主题:执行主题更新(例如通过 Git 或手动替换)

  3. 重新应用修改:更新完成后,将你的修改重新应用到新的 analytics.html 文件中:

    1
    2
    3
    4
    
    # 在新文件末尾添加 Umami 支持代码
    echo '{{ if isset .Site.Params.analytics "umami" }}' >> themes/hugo-theme-next/layouts/_partials/head/script/analytics.html
    echo '  {{ partial "_thirdparty/analytics/umami.html" . }}  ' >> themes/hugo-theme-next/layouts/_partials/head/script/analytics.html
    echo '{{ end }}' >> themes/hugo-theme-next/layouts/_partials/head/script/analytics.html

方法二:使用 Git 补丁

  1. 创建补丁

    1
    2
    
    # 创建包含修改的补丁文件
    git diff themes/hugo-theme-next/layouts/_partials/head/script/analytics.html > umami-patch.patch
  2. 更新主题后应用补丁

    1
    2
    
    # 更新主题后应用补丁
    git apply umami-patch.patch

安全注意事项

  1. 保护 Umami 实例:确保你的 Umami 实例受到适当保护,防止未授权访问
  2. 使用 HTTPS:始终使用 HTTPS 连接你的 Umami 实例
  3. 限制访问权限:在生产环境中限制对 Umami 管理界面的访问权限

总结

通过以上步骤,我们成功地为 Hugo Next 主题添加了 Umami 统计支持。这种方法不会修改主题的核心文件,因此在主题更新时不会丢失自定义功能。

Umami 提供了一个轻量级、注重隐私的统计解决方案,特别适合注重用户隐私的网站。通过自定义 analytics 文件和修改主题配置,我们可以灵活地集成各种统计工具,满足不同的需求。

这种方法可以应用于其他类似的统计工具,只需相应地修改脚本标签即可。希望这篇指南对你有所帮助,让你的网站能够更好地了解访问者行为,同时保护他们的隐私。