知识库 / 阶段 5 · 站外 SEO:外链与友链 / 搜索引擎优化(SEO) ↗ / 第 004 节
友情链接模块开发需求
《友链统计功能设计需求文档》#
1. 功能目标(Feature Goals)#
为友情链接(友链合作站点)提供精准的来路/去路访问统计,实现友链效果监控与数据报表展示。
统计范围包括:
-
来路 PV(Ref-in):用户从友链站点跳转到本站
-
去路 PV(Ref-out):用户从本站跳转至友链站点
-
24 小时内 IP 去重统计 UV
-
自动生成每日友链统计报表
-
支持后台筛选、查询、管理渠道值
-
自动清理超过 30 天的历史数据
2. 名词解释(Definitions)#
| 名称 | 说明 |
| 友链站点 | 合作网站,如 A站、B站、C站 |
| 来路 PV | 用户从友链站点访问本站的页面浏览数 |
| 去路 PV | 用户从本站点击友链,跳转到友链站点的浏览数 |
| 渠道值(code) | 后台手动生成的识别码,如 qd001 用于识别来源站点 |
| UV(独立访客) | 24 小时内按 IP 去重后的访问次数 |
3. 需求大纲(Overview)#
✔ 后台可手动创建友链站点,配置:
-
名称
-
站点域名
-
渠道值(手动生成)
-
跳转 URL
✔ 统计目标
-
统计每日来路 PV(来自友链)
-
统计每日去路 PV(跳转到友链)
-
每 IP 24 小时内只计一次(UV)
-
自动生成每日汇总统计表
-
超过 30 天历史统计数据自动删除
✔ 后台统计页面功能
-
按时间查询
-
按站点名称查询
-
按渠道值查询
-
导出数据(可选)
4. 数据流(Flow)#
4.1 来路(Ref-in)统计流程#
用户从 A站 → 点击跳转 → 访问本站:
https://yourdomain.com/?ref=qd001
系统逻辑:
-
检查 ref 是否为有效渠道值
-
记录访问 IP
-
判断该 IP 在 24 小时内是否已记录
-
若未记录 → 来路 PV +1
-
写入原始日志表(可选)
4.2 去路(Ref-out)统计流程#
用户从本站 → 点击跳转 → A友链站:
本站跳转链接格式:
https://yourdomain.com/go?code=qd001
系统逻辑:
-
根据 code 找到友链站点
-
记录 IP、code、时间
-
判断是否重复(24 小时内 IP 去重)
-
去路 PV +1
-
跳转至真实友链地址
5. 数据表设计(Database Schema)#
5.1 友链配置表(friend_links)#
| 字段 | 类型 | 说明 |
| id | int | 主键 |
| name | varchar | 友链站名称 |
| domain | varchar | 站点域名 |
| code | varchar | 渠道值(后台生成) |
| url | varchar | 跳转链接 |
| status | tinyint | 是否启用 |
| created_at | datetime | 创建时间 |
5.2 来路/去路原始日志表(friend_link_logs)#
(可选,但用于 IP 去重与统计)
| 字段 | 说明 |
| id | 主键 |
| link_id | 友链 id |
| type | in / out |
| ip | 访问来源 IP |
| created_at | 时间 |
5.3 每日统计表(friend_link_daily_stats)#
用于最终展示的数据。
| 字段 | 类型 | 说明 |
| id | int | 主键 |
| date | date | 统计日期 |
| link_id | int | 友链站点 id |
| name | varchar | 站点名称(冗余) |
| domain | varchar | 站点域名(冗余) |
| code | varchar | 渠道值(冗余) |
| ref_in | int | 来路 PV |
| ref_out | int | 去路 PV |
📌 每日凌晨自动生成今日数据,保存 30 天
6. 统计生成逻辑#
6.1 访问实时记录(in/out)#
每次有来路或去路,写入 logs 表:
示例:
| link_id | type | ip | time |
| 1 | in | 1.2.3.4 | 2025-05-26 10:20 |
| 1 | out | 1.2.3.4 | 2025-05-26 11:05 |
6.2 每日统计脚本(定时任务)#
每天凌晨自动执行:
统计前一天的数据 → 写入 daily_stats 表
删除 30 天前的数据
统计公式:
SELECT
DATE(created_at) AS date,
link_id,
COUNT(DISTINCT CASE WHEN type='in' THEN ip END) AS ref_in,
COUNT(DISTINCT CASE WHEN type='out' THEN ip END) AS ref_out
FROM friend_link_logs
GROUP BY date, link_id;
7. 后台页面需求(Admin UI)#
7.1 友链管理页#
功能:
-
添加友链(手动生成渠道值)
-
修改友链
-
上下架
-
删除
-
查看基本信息
字段:
-
名称
-
域名
-
渠道值
-
跳转地址
-
状态
7.2 友链统计页(核心)#
筛选条件:
-
日期范围(默认最近 7 天)
-
站点名称
-
渠道值
表格格式如下(你提供的):
| 日期 | 站点名称 | 域名 | 渠道值 | 来路 PV | 去路 PV |
| 5/26/2025 | A友链站 | a.com | qd001 | 55 | 89 |
| 5/26/2025 | B友链站 | b.com | qd002 | 100 | 103 |
| 5/26/2025 | C友链站 | c.com | qd003 | 88 | 100 |
8. 自动清理规则#
系统定时任务:
删除 friend_link_logs 中超过 30 天的记录
删除 friend_link_daily_stats 中超过 30 天的记录