Files
go_blog/ANALYTICS_IMPLEMENTATION.md
T
kevinandClaude Fable 5 da7a39c1c8 feat: implement comprehensive reading analytics system with bot detection
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>
2026-06-22 19:57:12 +08:00

6.5 KiB
Raw Blame History

阅读统计系统实现总结

已完成功能

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)

  • 后台首页添加"阅读统计"按钮

功能特性

去重机制

  1. 应用层去重:在recordArticleView函数中查询现有记录
  2. 数据库层去重BeforeCreate hook二次检查
  3. 组合键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

访问统计页面

  1. 以管理员身份登录
  2. 访问后台首页
  3. 点击"阅读统计"按钮
  4. 或直接访问: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_article on article_id
  • idx_article_views_user on user_id
  • idx_article_views_ip on ip
  • idx_article_views_bot on is_bot

异步记录

// 不阻塞页面响应
go recordArticleView(db, article.ID, c)

扩展建议

未来可添加的功能

  1. 图表可视化

    • 阅读趋势图(按天/周/月)
    • 访客地理分布
    • 浏览器/设备统计
  2. 高级分析

    • 用户阅读路径分析
    • 文章热度变化趋势
    • 访问高峰时段分析
  3. 性能优化

    • Redis缓存统计数据
    • 定期归档旧数据
    • 批量写入优化
  4. 导出功能

    • CSV/Excel导出
    • 自定义报表生成
    • 定期邮件报告
  5. 实时监控

    • WebSocket实时访问流
    • 在线访客数量
    • 实时热门文章

测试验证

编译状态

代码编译成功(无错误)

验证清单

  • 数据库模型创建
  • 爬虫检测逻辑
  • 文章详情页集成
  • 后台handler实现
  • 前端模板创建
  • 国际化翻译
  • 路由配置
  • 数据库迁移
  • 导航入口

建议测试步骤

  1. 启动应用,确认数据库迁移成功
  2. 访问多篇文章,生成测试数据
  3. 访问 /admin/analytics/views 查看统计
  4. 测试筛选功能
  5. 用不同User-Agent测试爬虫识别
  6. 测试分页功能
  7. 切换语言测试国际化

文件清单

新建文件

  1. models/article_view.go - ArticleView数据模型
  2. models/bot_detector.go - 爬虫检测逻辑
  3. handlers/admin_analytics.go - 统计页面handler
  4. templates/admin/analytics_views.html - 统计页面模板

修改文件

  1. handlers/home.go - 添加阅读记录逻辑
  2. models/db.go - 添加ArticleView到迁移
  3. main.go - 添加analytics路由
  4. i18n/i18n.go - 添加翻译
  5. templates/admin/dashboard.html - 添加入口链接

注意事项

  1. 首次运行:会自动创建article_views表
  2. 性能:异步记录不影响页面加载速度
  3. 隐私IP地址完整记录,考虑是否需要脱敏
  4. 存储:长期运行可能积累大量数据,建议定期归档
  5. 爬虫识别:基于User-Agent,可能有漏报和误报

总结

阅读统计系统已完整实现,包含:

  • 自动记录每篇文章的独特访问
  • 智能识别并标记爬虫
  • 功能强大的后台统计页面
  • 详细的访问记录和筛选
  • 完整的中英文支持
  • 性能优化和安全保护

系统可以立即投入使用,为博客管理员提供深入的阅读数据洞察!