Material for MkDocs 站点分析:Google Analytics 4 集成与页面反馈组件完整指南
【免费下载链接】mkdocs-materialDocumentation that simply works项目地址: https://gitcode.com/GitHub_Trending/mk/mkdocs-material
了解文档站点在真实用户手中是如何被使用的,往往是一个文档项目能否持续改进的关键成功因素。Material for MkDocs 原生内置了 Google Analytics 4(GA4)站点分析集成,并附带一个可定制的"Was this page helpful?"(此页是否有帮助)反馈组件与 Cookie 同意(cookie consent)联动机制。本文基于docs/setup/setting-up-site-analytics.md的完整配置体系,结合仓库源码讲解 GA4 的接入方式、反馈组件四个核心属性的用法、自定义分析与自定义反馈的实现方案,读完即可为自己的文档站点配置可观测、可回收反馈的分析链路。
站点分析:理解文档真实使用情况
无论项目面向开源社区还是企业内部团队,文档站点都在承担"用户自助解决问题"的职责。通过分析页面的访问量、站内搜索词以及用户对每页的即时评价,可以回答三类关键问题:用户最常访问哪些页面(内容入口)、用户在搜索什么(内容缺口)、哪些页面让人困惑(内容质量)。Material for MkDocs 用一套统一的extra.analytics配置节同时承载这两类能力:Google Analytics 提供流量数据,反馈组件提供主观评价数据,二者都由同一配置节驱动。
配置 Google Analytics(GA4)
在mkdocs.yml中启用集成
Material for MkDocs 原生集成了 Google Analytics 4。如果你已经创建好 GA4 媒体资源(property),在mkdocs.yml中加入以下配置即可启用:
extra: analytics: provider: google property: G-XXXXXXXXXXprovider:分析服务提供商标识,google表示使用内置的 GA4 集成;property:你的 GA4 媒体资源 ID(形如G-XXXXXXXXXX)。
版本与兼容性说明:Google Analytics 集成自 Material for MkDocs 7.1.8 起提供。更早版本中支持的 Universal Analytics(
UA-开头)已于 9.2.0 移除——由于 Universal Analytics 已被官方停止服务(sunset),该集成在 9.2.0 中彻底删除。
从源码看 GA4 集成的工作方式
该集成的渲染入口是 src/templates/partials/integrations/analytics.html:模板先读取config.extra.analytics.provider,再动态 include 对应名称的 provider 模板文件:
{% if config.extra.analytics %} {% set provider = config.extra.analytics.provider %} {% endif %} {% if provider %} {% include "partials/integrations/analytics/" ~ provider ~ ".html" %}也就是说,provider: google最终会加载 src/templates/partials/integrations/analytics/google.html。该模板定义了一个__md_analytics()函数,核心逻辑包括:
- 初始化
window.dataLayer并调用gtag("js", ...)、gtag("config", property)发送首个页面浏览事件; - 页面
DOMContentLoaded后,通过document.forms.search捕获站内搜索框的blur事件,以gtag("event", "search", { search_term })上报搜索词; - 通过
document.forms.feedback捕获反馈按钮点击,以gtag("event", "feedback", { page, data })上报反馈事件; - 通过
location$observable 监听路由变化,在即时加载(instant loading)场景下持续发送page_path页面浏览事件; - 动态创建
<script>标签,注入https://www.googletagmanager.com/gtag/js?id={{ property }}的 gtag 脚本。
因此页面上一次配置即可同时覆盖"页面浏览 + 站内搜索 + 页面反馈"三类埋点,无需手写任何跟踪代码。
与 Cookie 同意机制联动
分析脚本属于追踪类第三方服务,Material for MkDocs 将其与 Cookie 同意 机制原生集成。从 analytics.html 的模板逻辑可以看到:
- 若配置了
extra.consent,模板会读取本地存储中的__consent对象,只有用户明确接受了analytics分类(consent.analytics为真)时才调用__md_analytics(); - 若未配置 consent,则页面加载后立即执行。
对应地,src/templates/assets/javascripts/components/consent/index.ts 的类型定义中包含了analytics?: boolean字段,用于记录用户对分析类 Cookie 的授权状态。
如何追踪站内搜索使用情况
除了页面浏览与事件,站内搜索 行为也能帮你理解用户对文档的期望。启用站内搜索跟踪的步骤如下:
- 进入 Google Analytics 的管理(admin)设置;
- 选择对应跟踪代码的媒体资源(property);
- 打开数据流(data streams)标签页,点击对应 URL;
- 在增强型测量(enhanced measurement)部分点击齿轮图标;
- 确保站内搜索(site search)处于启用状态。
启用后,配合前面提到的search事件上报,你就能在 GA4 报表中看到用户实际输入的搜索词。
配置"Was this page helpful?"反馈组件
反馈组件会在每个页面的底部显示一组评分图标,鼓励用户即时反馈页面是否有帮助。该功能自 Material for MkDocs 8.4.0 起提供。在mkdocs.yml中配置:
extra: analytics: # (1)! feedback: title: Was this page helpful? ratings: - icon: material/emoticon-happy-outline name: This page was helpful data: 1 note: >- Thanks for your feedback! - icon: material/emoticon-sad-outline name: This page could be improved data: 0 note: >- # (2)! Thanks for your feedback! Help us improve this page by using our <a href="..." target="_blank" rel="noopener">feedback form</a>.- 该功能原生与 Google Analytics 集成,因此
provider与property同样是必需的。当然,也可以改用 自定义反馈集成。 note中可以加入任意 HTML 标签,例如链接到一个反馈表单,用于在用户提交评分后引导其给出更详细的意见。
title与ratings两个属性都是必填项。注意ratings并不限制为两项——可以定义多于两个评分,例如实现 1 到 5 星的评分体系。由于反馈组件会把数据发送给第三方服务,它同样原生受 Cookie 同意 机制约束:若用户未接受analytics分类的 Cookie,反馈组件不会显示。
从源码看反馈组件的渲染与挂载
反馈组件的模板位于 src/templates/partials/feedback.html,并作为页面内容的一部分被挂载:在 src/templates/partials/content.html 中,{% include "partials/feedback.html" %}被放在页面内容(page.content)与评论系统(partials/comments.html)之间,即位于每页正文末尾。
模板的关键渲染逻辑包括:
- 表单默认带有
hidden属性,即默认不可见(见下文"JavaScript 关闭时"的处理方式); - 每个评分按钮渲染为
<button type="submit" title="{{ rating.name }}" />保存报告并收集一段时间的数据后,你将得到所有页面的评分总数与平均评分,从而快速定位最需要改进的页面。
!!! warning "数据延迟" 该报告可能需要 24 小时甚至更长时间才会开始显示数据,属正常现象。
!!! danger "GA4 暂不支持平均值计算" 就目前已知情况,Google Analytics 4 还没有提供自定义计算指标(calculated metric)来计算页面平均评分的功能(参见 issue #5740)。建议在报告中同时拖入
Event count与Page helpful后自行换算,或使用导出数据进行二次计算。在单页中隐藏反馈组件
某些页面(如首页、跳转页)可能不适合展示反馈组件。可以在 Markdown 文件的 front matter 中使用
hide属性单独隐藏:--- hide: - feedback --- # Page title ...从 feedback.html 的模板逻辑可以看到,渲染前会检查
page.meta.hide中是否包含"feedback":若包含,则将feedback置为None,从而跳过整个表单的渲染。自定义站点分析
如果希望接入其他提供 JavaScript 追踪方案的第三方分析服务,可以遵循 主题扩展指南 在
overrides目录中新建一个 partial。该 partial 的文件名即对应mkdocs.yml中的provider值(回顾 analytics.html 中"partials/integrations/analytics/" ~ provider ~ ".html"的动态加载逻辑)。=== ":octicons-file-code-16:
overrides/partials/integrations/analytics/custom.html"``` html <script> /* Add custom analytics integration here, e.g. */ var property = "{{ config.extra.analytics.property }}" // (1)! /* Wait for page to load and application to mount */ document.addEventListener("DOMContentLoaded", function() { location$.subscribe(function(url) { /* Add custom page event tracking here */ // (2)! }) }) </script> ``` 1. 示例:该变量会接收 `mkdocs.yml` 中配置的值,例如 `property` 设为 `"foobar"`。 2. 如果启用了 [即时加载(instant loading)](https://link.gitcode.com/i/13c591a09c953f000b9a00ee712bd7ae),可以利用 `location$` observable 监听导航事件,它总是会发出当前的 `URL`,用于在 SPA 式导航下正确上报每次页面浏览。=== ":octicons-file-code-16:
mkdocs.yml"``` yaml extra: analytics: provider: custom property: foobar # (1)! ``` 1. 你可以在此添加任意键值组合来配置自定义集成,这在多个仓库共享同一套自定义集成时尤其有用。自定义站点反馈
如果不想把反馈数据发给 Google Analytics,而希望自建接收链路,只需借助 附加 JavaScript 处理用户与反馈组件交互产生的事件即可。以
docs/javascripts/feedback.js为例:=== ":octicons-file-code-16:
docs/javascripts/feedback.js"``` js document$.subscribe(function() { var feedback = document.forms.feedback if (typeof feedback === "undefined") return feedback.hidden = false // (1)! feedback.addEventListener("submit", function(ev) { ev.preventDefault() var page = document.location.pathname // (2)! var data = ev.submitter.getAttribute("data-md-value") console.log(page, data) // (3)! feedback.firstElementChild.disabled = true // (4)! var note = feedback.querySelector( ".md-feedback__note [data-md-value='" + data + "']" ) if (note) note.hidden = false // (5)! }) }) ``` 1. 反馈表单默认是隐藏的,以避免在用户禁用 JavaScript 时仍然出现。因此需要在这里手动显示。 2. 获取当前页面路径与反馈数据值。 3. 将 `page` 与 `data` 替换为你自己的上报逻辑,例如发送到自建分析接口。 4. 提交后禁用整个表单,防止重复提交。 5. 显示配置好的 note,具体显示哪一条取决于用户点击的评分。=== ":octicons-file-code-16:
mkdocs.yml"``` yaml extra_javascript: - javascripts/feedback.js ```延伸阅读
- Cookie 同意机制:了解分析、广告等第三方服务的用户授权流程;
- 站内搜索配置:配合搜索词上报理解用户检索意图;
- 主题扩展指南 与 附加 JavaScript:实现自定义分析与反馈所需的前置知识;
- 即时加载(instant loading):理解
location$observable 在导航事件中的角色。
【免费下载链接】mkdocs-materialDocumentation that simply works
项目地址: https://gitcode.com/GitHub_Trending/mk/mkdocs-material
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考