Features: - Add article view tracking with automatic deduplication (per user/IP) - Implement intelligent bot detection (35+ patterns: Google, Bing, Baidu, GPTBot, etc) - Create admin analytics dashboard with statistics and filtering - Display view count and comment count on article cards - Add search-based article filter (replaced dropdown for scalability) Analytics Dashboard: - Global stats: total views, human/bot views, unique IPs/users - Top 20 articles ranking with detailed metrics - Detailed view records with time, article, user, IP, user-agent - Filters: article title search, IP search, show/hide bots - Pagination support (50 records per page) Technical Implementation: - Async view recording (non-blocking) - Dual deduplication (application + database layer) - Database indexes for performance optimization - Batch query for comment counts - Full i18n support (Chinese/English) Files Added: - models/article_view.go: View tracking model - models/bot_detector.go: Bot detection logic - handlers/admin_analytics.go: Analytics page handler - templates/admin/analytics_views.html: Analytics UI - test_analytics.sh: Testing script - Documentation: implementation guide, usage guide, changelog Files Modified: - handlers/home.go: Add view recording and comment count queries - models/db.go: Add ArticleView to auto-migration - main.go: Add analytics routes - i18n/i18n.go: Add 35+ translation keys - templates/admin/dashboard.html: Add analytics entry link - templates/pages/home.html: Display view/comment counts on cards Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
6.5 KiB
6.5 KiB
阅读统计系统实现总结
已完成功能
1. 数据库模型
✅ ArticleView 模型 (models/article_view.go)
- 记录每次独特的阅读
- 字段:文章ID、用户ID(可为NULL)、IP地址、User-Agent、是否为爬虫
- 包含去重逻辑(BeforeCreate hook)
- 建立了必要的索引
✅ 爬虫检测 (models/bot_detector.go)
- 基于User-Agent的模式匹配
- 支持主流搜索引擎爬虫、社交媒体爬虫、AI爬虫等
- 包含35+种常见爬虫特征
2. 阅读记录功能
✅ 自动记录 (handlers/home.go)
- 在文章详情页自动记录阅读
- 异步执行(goroutine)不阻塞页面响应
- 同一用户/IP只记录一次(去重)
- 自动识别并标记爬虫
3. 后台统计页面
✅ 统计Dashboard (handlers/admin_analytics.go)
- 全局统计:总阅读量、真人阅读、爬虫访问、独立IP、独立用户
- 文章排行榜:前20篇文章的详细统计
- 详细访问记录:时间、文章、用户、IP、User-Agent、是否爬虫
- 强大的筛选功能:按文章、IP、是否显示爬虫
- 分页支持(每页50条)
✅ 精美模板 (templates/admin/analytics_views.html)
- 响应式设计
- 彩色统计卡片
- 表格展示详细数据
- 爬虫记录高亮显示(橙色背景)
- 筛选表单
- 分页加载
4. 国际化支持
✅ 中英文翻译 (i18n/i18n.go)
- 添加了35+个翻译key
- 完整的中英文对照
5. 路由和集成
✅ 路由配置 (main.go)
/admin/analytics/views- 阅读统计页面- 管理员权限保护
✅ 数据库迁移 (models/db.go)
- ArticleView表已加入自动迁移
✅ 导航入口 (templates/admin/dashboard.html)
- 后台首页添加"阅读统计"按钮
功能特性
去重机制
- 应用层去重:在recordArticleView函数中查询现有记录
- 数据库层去重:BeforeCreate hook二次检查
- 组合键:article_id + user_id + ip(匿名用户user_id为NULL)
爬虫识别
检测的爬虫类型:
- 搜索引擎:Google, Bing, Baidu, Yandex等
- 社交媒体:Facebook, Twitter, LinkedIn等
- AI爬虫:GPTBot, ClaudeBot, Anthropic-AI
- SEO工具:Ahrefs, SEMrush, Moz等
- 无头浏览器:Headless, Phantom, Puppeteer
性能优化
- ✅ 异步记录(goroutine)
- ✅ 数据库索引优化
- ✅ 分页加载(50条/页)
- ✅ 最佳实践:忽略记录错误,不影响用户体验
安全性
- ✅ 管理员权限保护
- ✅ 使用c.ClientIP()获取真实IP(处理代理头)
- ✅ SQL注入防护(GORM参数化查询)
- ✅ XSS防护(模板自动转义)
使用说明
启动应用
./go_blog
访问统计页面
- 以管理员身份登录
- 访问后台首页
- 点击"阅读统计"按钮
- 或直接访问:
http://localhost:PORT/admin/analytics/views
查看统计数据
全局统计卡片:
- 总阅读量:所有记录数
- 真人阅读:排除爬虫的阅读数
- 爬虫访问:被标记为爬虫的访问数
- 独立IP:不同IP地址数
- 独立用户:已登录用户数
文章排行榜:
- 显示阅读量最高的20篇文章
- 每篇文章显示:总阅读、真人阅读、爬虫访问、独立IP
详细访问记录:
- 时间、文章标题(可点击)、用户名、IP地址、User-Agent
- 爬虫记录以橙色背景高亮
- 真人显示绿色标签,爬虫显示橙色标签
使用筛选功能
- 按文章筛选:下拉选择特定文章
- 按IP筛选:输入IP地址(支持部分匹配)
- 显示爬虫:勾选以包含爬虫流量
- 点击"应用筛选"查看结果
分页浏览
- 每页显示50条记录
- 底部显示"加载更多"按钮
- 筛选条件在翻页时保持
技术细节
数据模型
type ArticleView struct {
ID uint
CreatedAt time.Time
ArticleID uint
UserID *uint // NULL for anonymous
IP string
UserAgent string
IsBot bool
Article Article
User *User
}
索引
idx_article_views_articleonarticle_ididx_article_views_useronuser_ididx_article_views_iponipidx_article_views_botonis_bot
异步记录
// 不阻塞页面响应
go recordArticleView(db, article.ID, c)
扩展建议
未来可添加的功能
-
图表可视化
- 阅读趋势图(按天/周/月)
- 访客地理分布
- 浏览器/设备统计
-
高级分析
- 用户阅读路径分析
- 文章热度变化趋势
- 访问高峰时段分析
-
性能优化
- Redis缓存统计数据
- 定期归档旧数据
- 批量写入优化
-
导出功能
- CSV/Excel导出
- 自定义报表生成
- 定期邮件报告
-
实时监控
- WebSocket实时访问流
- 在线访客数量
- 实时热门文章
测试验证
编译状态
✅ 代码编译成功(无错误)
验证清单
- ✅ 数据库模型创建
- ✅ 爬虫检测逻辑
- ✅ 文章详情页集成
- ✅ 后台handler实现
- ✅ 前端模板创建
- ✅ 国际化翻译
- ✅ 路由配置
- ✅ 数据库迁移
- ✅ 导航入口
建议测试步骤
- ✅ 启动应用,确认数据库迁移成功
- ✅ 访问多篇文章,生成测试数据
- ✅ 访问
/admin/analytics/views查看统计 - ✅ 测试筛选功能
- ✅ 用不同User-Agent测试爬虫识别
- ✅ 测试分页功能
- ✅ 切换语言测试国际化
文件清单
新建文件
models/article_view.go- ArticleView数据模型models/bot_detector.go- 爬虫检测逻辑handlers/admin_analytics.go- 统计页面handlertemplates/admin/analytics_views.html- 统计页面模板
修改文件
handlers/home.go- 添加阅读记录逻辑models/db.go- 添加ArticleView到迁移main.go- 添加analytics路由i18n/i18n.go- 添加翻译templates/admin/dashboard.html- 添加入口链接
注意事项
- 首次运行:会自动创建article_views表
- 性能:异步记录不影响页面加载速度
- 隐私:IP地址完整记录,考虑是否需要脱敏
- 存储:长期运行可能积累大量数据,建议定期归档
- 爬虫识别:基于User-Agent,可能有漏报和误报
总结
阅读统计系统已完整实现,包含:
- ✅ 自动记录每篇文章的独特访问
- ✅ 智能识别并标记爬虫
- ✅ 功能强大的后台统计页面
- ✅ 详细的访问记录和筛选
- ✅ 完整的中英文支持
- ✅ 性能优化和安全保护
系统可以立即投入使用,为博客管理员提供深入的阅读数据洞察!