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

推荐订阅源

Help Net Security
Help Net Security
宝玉的分享
宝玉的分享
Microsoft Security Blog
Microsoft Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
量子位
博客园 - 叶小钗
Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
D
DataBreaches.Net
Vercel News
Vercel News
博客园 - Franky
Recorded Future
Recorded Future
B
Blog RSS Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
GbyAI
GbyAI
M
MIT News - Artificial intelligence
F
Full Disclosure
S
SegmentFault 最新的问题
L
LangChain Blog
F
Fortinet All Blogs
美团技术团队
IT之家
IT之家
博客园 - 司徒正美
Cyberwarzone
Cyberwarzone
NISL@THU
NISL@THU
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Y
Y Combinator Blog
C
Check Point Blog
The GitHub Blog
The GitHub Blog
L
Lohrmann on Cybersecurity
I
Intezer
I
InfoQ
Spread Privacy
Spread Privacy
Project Zero
Project Zero
T
Threatpost
S
Secure Thoughts
C
Comments on: Blog
N
News | PayPal Newsroom
Application and Cybersecurity Blog
Application and Cybersecurity Blog
H
Heimdal Security Blog
T
The Blog of Author Tim Ferriss
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Hugging Face - Blog
Hugging Face - Blog
U
Unit 42

Dlog

数字时代的沉默守护者:致敬 KeePass 之父 Dominik Reichl 🔐 Web Key Directory (WKD) 部署指南 刀锋上的晨间哲学:316L 不锈钢与我的理容仪式 📘 Git 极简生存指南 📘 TortoiseGit 子模块核验手册:如何看懂 PaperMod 改了什么? 📘 TortoiseGit 子模块更新(升级)操作手册 平安夜,给这个 17 岁的数字家园挂上一串代码风铃 🎄 数字世界的火漆印章:我为什么要给博客文章加上 GPG 签名 异星工场蓝图代码 重构实录:Hugo+PaperMod 的终极现代化改造 Markdown 写作指南:像写代码一样写文章 🛶 “寻路者”的回归:海洋与波利尼西亚文化的重生 PaperMod 主题微调:Profile Mode 下的中文排版精修 告别腾讯 404,重构幽灵页面 南太平洋的极客简史:从石币区块链到草编飞机 数字领土的隐秘江湖:那些关于域名的疯狂往事 R2速率限制规则配置 蝴蝶效应:一张 25MB 的图片,让我买下了 .org 大良印记买锅记 海棠血泪 修复访客地图 PaperMod 中的 Google Analytic 配置 fnOS极简版「智能屏幕管理」方案 fnOS「开机10分钟后自动关闭屏幕」配置方案 Markdown中常用的HTML代码 再看海贼王 修复Microsoft Store应用更新 新旧交替之际 剃须装备 湿式剃须 升级Toha主题及测试 剃须日志 巧连神数:第201~第215课 巧连神数:第181~第200课 巧连神数:第161~第180课 巧连神数:第141~第160课 巧连神数:第121~第140课 巧连神数:第101~第120课 巧连神数:第81~第100课 巧连神数:第61~第80课 巧连神数:第41~第60课 巧连神数:第21~第40课 巧连神数:第1~第20课 巧连神数:前言 Le Cimetière Marin Who Has Seen The Wind 看过的书和漫画 整理iPhone和Android解锁TikTok的方法 自动更新网站底部 Copyright © 年份 游戏推荐 浅谈“国产”keepass--奇密FantasyPass 菜谱清单 看过的影视动漫 微星GE75 Raider 记·日本无条件投降76周年 《怒火·重案》 《風立ちぬ》 Netlify构建Hugo博客导致文章修改时间失效 毛泽东:《论持久战》 七子之歌 Hugo Front Matter 浅谈吴亦凡 文章内添加音乐 祛湿食谱 尼康Z5 更新主题测试及杂谈 针对steam中国上市的想法 马里奥制造2 关于QQ等读取浏览器历史记录等敏感信息及解决办法 Git的拉取Pull和获取Fetch的区别 记大马的“奇闻轶事” 解决toha主题新版本无法使用GIF头像的bug 修改背景毛玻璃效果及添加自定义CSS 添加一键返回顶部功能 网址分享 设置Git使用本地代理 增加文章更新时间 为Toha主题增加中文翻译 SteamBD 嵊州杂记 修复更新 更改测试 测试hugo+一键推送 Toha Markdown 示例 今天偶然找到《Relife》啦 测试使用HexoEditor G胖是个孩子气、小心眼儿的阴谋家 clowwindy语录 在GitHub中使用GPG签名你的commit 如何在GPG中导入OpenKeychain备份 Hexo NexT主题相关设置及优化(不定期更新) 常用软件推荐(不定期更新) ASF常用命令 Hexo常用命令(不定期更新) 醉翁亭记 一个正在裸奔面对世界的伟大母亲的呼喊! 切糕之我见 关于腾讯和44573的版权纠纷案 关于学生是否需要“孝敬”老师的杂谈 望夫树
上帝视角:为 PaperMod 接入 Microsoft Clarity 用户行为分析
Chow Ray · 2025-12-16 · via Dlog

在折腾完博客的 UI 和排版后,是时候关注一下「里子」了。

对于个人博客来说,Google Analytics ( GA4 ) 显得过于庞大且复杂。我们更关心的是:用户到底看了什么?他们在哪里停留?为什么他们离开了?

这时,Microsoft Clarity 是一个绝佳的选择。它完全免费、不限流量,且提供两个杀手级功能:热力图 ( Heatmaps )会话录屏 ( Session Recordings )

本文记录了如何在 Hugo PaperMod 主题中,以最符合工程规范的方式接入 Clarity。

  • 可视化强:GA4 给你一堆数字,Clarity 给你一张热力图。你可以直观地看到用户在文章的哪个段落停留最久,或者点击了哪个无效链接。
  • 上帝视角:录屏功能可以回放用户的浏览轨迹 ( 已脱敏 ) ,这对于优化排版和发现 Bug 极其有用。
  • 轻量:脚本异步加载,对加载速度影响极小。

2. 获取 Project ID

  1. 登录 Microsoft Clarity 并创建项目。
  2. 进入 Settings -> Overview
  3. 复制 Project ID ( 通常是一串 10 位的字符,如 j8x7s2k... ) 。

注意:官方会提供一段包含 <script> 的完整代码,不要复制整段。作为追求代码整洁的工科男,我们要用 Hugo 的方式来封装它。

3. 工程化接入方案

PaperMod 预留了 extend_head.html 接口,这是引入第三方脚本的最佳位置。

我采用了 「配置与逻辑分离」 的方案:在 HTML 中写通用模板,在 hugo.toml 中填具体 ID。这样以后换 ID 或关闭统计,只需改配置,不用动代码。

第一步:创建模板文件

在博客根目录下创建文件:layouts/partials/extend_head.html

  • ( 注:如果文件已存在,直接追加内容 ) *

写入以下代码:

{{- if .Site.Params.clarity_id }}
<!-- Microsoft Clarity Code -->
<script type="text/javascript">
 ( function ( c,l,a,r,i,t,y ) {
        c [a]=c [a]||function ( ) {( c [a].q=c [a].q||[] ) .push ( arguments )};
        t=l.createElement ( r ) ;t.async=1;t.src="https://www.clarity.ms/tag/"+i;
        y=l.getElementsByTagName ( r ) [0];y.parentNode.insertBefore ( t,y ) ;
 }) ( window, document, "clarity", "script", "{{ .Site.Params.clarity_id }}" ) ;
</script>
{{- end }}

代码解析:

  • {{- if .Site.Params.clarity_id }}:这是一个开关。只有当你在配置文件里填了 ID,这段 JS 才会加载。没填就是纯净版,方便本地调试。
  • t.async=1:确保脚本是异步加载的,不会阻塞页面渲染。

第二步:修改配置文件

打开博客根目录下的 hugo.toml( 或 config.yml ) ,找到 [params] 区域,添加你的 ID:

[params]
    # ... 其他配置 ...

    # Microsoft Clarity
    clarity_id = "你的_Clarity_Project_ID"

4. 验证与性能

提交代码并部署到 Cloudflare Pages 后,打开博客,按下 F12 进入开发者工具:

  1. Network 面板:搜索 clarity,应该能看到相关的数据包请求 ( status 200 ) 。
  2. 性能影响:得益于 async 异步加载和 Cloudflare 的全站加速,Clarity 对 **LCP ( 最大内容渲染时间 ) ** 的影响几乎可以忽略不计。博客依然是秒开。

5. 总结

相比于直接把 <script> 标签硬编码到网页里,这种参数化的配置方式显然更加优雅和健壮。

大概等待 30 分钟到 2 小时,Clarity 后台就会出现数据。接下来,就是享受「上帝视角」,观察访客如何在你的数字领地上行走的乐趣了。

💡 方案 B:直接粘贴官方代码 ( 简单粗暴 )

如果不喜欢逻辑配置分离,直接简单粗暴,直接把 <script> 标签塞进 layouts/partials/extend_head.html 里。