这篇主要是一些个性化定制和优化,包括添加备案信息、运行时间统计、访问统计等。
添加备案信息
配置备案号
在hugo.toml中添加备案配置:
# 页脚配置 [params.footer] text = '<a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener">备案号:冀ICP备19017061-1号</a>'
⚠️ 注意:请替换为你自己的真实备案号
确保HTML渲染支持: 在配置文件中添加:
# Markup配置 - 支持HTML渲染 [markup] [markup.goldmark] [markup.goldmark.renderer] unsafe = true
💡 配置更新:在hugo.toml文件中添加备案号配置和HTML渲染支持。备案号使用HTML链接格式,unsafe=true允许在Markdown中使用HTML标签。
更新页脚模板
编辑页脚模板: 更新
layouts\partials\footer.html
:{{- if not (.Param "hideFooter") }} <footer class="footer"> {{- if site.Copyright }} <span>{{ site.Copyright | markdownify }}</span> {{- else }} <span>© {{ now.Year }} <a href="{{ "" | absLangURL }}">{{ site.Title }}</a></span> {{- end }} {{- with site.Params.footer.text }} {{- print " · "}} {{ . | markdownify }} {{- end }} <span> {{- print " · "}} Powered by <a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> & <a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a> </span> </footer> {{- end }}
💡 页脚效果:更新后的页脚会显示版权信息、可点击的备案号链接(指向工信部网站)、以及技术支持信息,布局简洁清晰。
添加运行时间统计和访问统计
现在来创建一个包含运行时间和访问统计的两行布局页脚。
完整的页脚代码
将 layouts\partials\footer.html
完全替换为以下内容:
{{- if not (.Param "hideFooter") }}
<footer class="footer">
<!-- 第一行:版权、备案、技术支持 -->
<div class="footer-line">
{{- if site.Copyright }}
<span>{{ site.Copyright | markdownify }}</span>
{{- else }}
<span>© {{ now.Year }} <a href="{{ "" | absLangURL }}">{{ site.Title }}</a></span>
{{- end }}
{{- with site.Params.footer.text }}
<span> | {{ . | markdownify }}</span>
{{- end }}
<span> | Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</div>
<!-- 第二行:运行时间和访问统计 -->
<div class="footer-line">
<span>网站已运行
<span id="runtime-days">0</span> 天
<span id="runtime-hours">00</span> 时
<span id="runtime-minutes">00</span> 分
<span id="runtime-seconds">00</span> 秒
</span>
<span> | 总访问量 <span id="site-pv">0</span> 次</span>
<span> | 访客数 <span id="site-uv">0</span> 人</span>
</div>
</footer>
<!-- 运行时间和访问统计脚本 -->
<script>
// 网站启动时间(修改为你的实际上线时间)
const SITE_START_TIME = new Date('2025-07-20T00:00:00+08:00');
// 运行时间计算函数
function updateRuntime() {
const now = new Date();
const diff = now - SITE_START_TIME;
if (diff < 0) return; // 如果时间有问题,直接返回
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((diff % (1000 * 60)) / 1000);
// 更新DOM元素
const daysEl = document.getElementById('runtime-days');
const hoursEl = document.getElementById('runtime-hours');
const minutesEl = document.getElementById('runtime-minutes');
const secondsEl = document.getElementById('runtime-seconds');
if (daysEl) daysEl.textContent = days;
if (hoursEl) hoursEl.textContent = String(hours).padStart(2, '0');
if (minutesEl) minutesEl.textContent = String(minutes).padStart(2, '0');
if (secondsEl) secondsEl.textContent = String(seconds).padStart(2, '0');
}
// 页面加载完成后初始化运行时间
document.addEventListener('DOMContentLoaded', function() {
console.log('开始运行时间统计');
// 立即执行一次
updateRuntime();
// 每秒更新一次
setInterval(updateRuntime, 1000);
});
// 访问统计初始化
document.addEventListener('DOMContentLoaded', function() {
// 获取或初始化访问统计
let pv = parseInt(localStorage.getItem('site-pv') || '0') + 1;
let uv = parseInt(localStorage.getItem('site-uv') || '0');
// 检查是否是新访客(按天计算)
const today = new Date().toDateString();
const lastVisit = localStorage.getItem('last-visit');
if (lastVisit !== today) {
uv += 1;
localStorage.setItem('last-visit', today);
}
// 保存统计数据
localStorage.setItem('site-pv', pv.toString());
localStorage.setItem('site-uv', uv.toString());
// 更新显示
const pvEl = document.getElementById('site-pv');
const uvEl = document.getElementById('site-uv');
if (pvEl) pvEl.textContent = pv;
if (uvEl) uvEl.textContent = uv;
console.log('访问统计:', 'PV:', pv, 'UV:', uv);
});
</script>
<!-- 页脚样式 -->
<style>
.footer {
text-align: center;
padding: 20px 0;
border-top: 1px solid var(--border);
}
.footer-line {
margin: 5px 0;
font-size: 14px;
color: var(--secondary);
}
.footer a {
color: var(--primary);
text-decoration: none;
}
.footer a:hover {
text-decoration: underline;
}
</style>
{{- end }}
代码说明
这个页脚包含了以下功能:
第一行显示:
- 版权信息:© 2025 网站名称
- 备案号:可点击的备案号链接
- 技术支持:Hugo & PaperMod 链接
第二行显示:
- 运行时间:实时显示网站运行的天、时、分、秒
- 总访问量:基于localStorage的页面访问统计
- 访客数:按天计算的独立访客统计
技术特点:
- 使用
SITE_START_TIME
常量设置网站启动时间 - 运行时间每秒自动更新
- 访问统计数据存储在浏览器本地
- 样式简洁,不过度美化
- 包含错误处理和调试信息
测试页脚功能
验证运行时间
检查时间显示:
- 打开网站首页
- 观察页脚第二行的运行时间
- 确认秒数每秒跳动
修改起始时间: 如果需要修改网站启动时间,编辑页脚模板中的这一行:
const SITE_START_TIME = new Date('2025-07-20T00:00:00+08:00');
将日期改为你的实际上线时间。
这个页脚设计简洁实用,不会过度占用页面空间,同时提供了必要的信息展示。
常见问题解答
Q: 如何修改运行时间的起始日期?
A: 编辑页脚模板中的 SITE_START_TIME
变量,设置为你的网站实际上线时间。例如:const SITE_START_TIME = new Date('2025-07-20T00:00:00+08:00');
Q: 备案号必须添加吗?
A: 如果你的网站部署在中国大陆服务器,根据法律要求必须添加备案号。
Q: 访问统计数据存储在哪里?
A: 访问统计数据存储在浏览器的localStorage中,这是一个简单的本地统计方案。如果需要更准确的统计,建议使用Google Analytics等专业工具。
教程系列回顾:
- 第一篇:环境准备与Hugo安装
- 第二篇:创建站点与主题安装
- 第三篇:内容完善与页面配置
- 第四篇:评论系统与社交功能
- 第五篇:页脚优化与个性化定制(当前)