You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理Bot的页面浏览量统计?附已实现的用户统计逻辑

如何在现有浏览量统计逻辑中过滤Bot访问

看起来你已经把正常用户的浏览量去重逻辑搭得很扎实了!针对Bot的统计过滤问题,我可以给你几个实用的优化方向,帮你精准排除无效的Bot访问:

1. 从HTTP请求头入手做基础Bot识别

这是成本最低、见效最快的方式,绝大多数Bot都会留下明显的特征:

  • 检查User-Agent字段:维护一个常见Bot的关键词列表(比如Googlebot、Bingbot、Slurp、DuckDuckBot这些),请求的User-Agent里匹配到这些关键词,直接跳过统计。不过要注意,有些恶意Bot会伪造正常用户的User-Agent,所以这一步只能过滤掉大部分“老实”的Bot。
  • 校验Referer字段:正常用户的请求一般来自站内跳转或者可信的外部链接,很多Bot的Referer是空的,或者来自莫名其妙的域名,对这类请求可以做额外的标记和过滤。
  • 正确获取真实IP:如果你的服务在反向代理后面,一定要通过X-Forwarded-For这类头部拿到用户的真实IP,不然Bot换个代理IP就能绕过你的IP限制逻辑。

2. 基于行为模式过滤“聪明”的Bot

有些Bot会伪装成正常用户的请求头,这时候就得看行为逻辑了:

  • 访问频率检测:正常用户不会在1分钟内刷十几甚至几十次同一个页面。你可以在Redis里给每个IP/用户加个请求计数器,比如1分钟内请求次数超过10次,就判定为Bot,跳过统计。
  • 访问轨迹验证:正常用户一般是从列表页、首页跳转进详情页的,Bot可能直接批量请求详情页,没有前置页面的访问记录。你可以用Redis或者Session记录用户的访问路径,对无轨迹的异常请求直接过滤。

3. 和你现有Redis逻辑的整合方式

把Bot检测放在你现有去重逻辑的前面就行,这里给你一段伪代码参考,顺便优化下你用SETEX的小问题:

def should_count_view(item_id, user_info, request):
    # 先做Bot检测
    if is_bot(request):
        return False
    
    # 再执行原有的去重逻辑
    key = f"{item_id}:{user_info['user_id']}" if user_info['authenticated'] else f"{item_id}:{user_info['ip']}"
    # 用SETNX+EXPIRE替代SETEX,避免竞态问题
    if redis_client.setnx(key, 1):
        redis_client.expire(key, 200)
        return True
    return False

def is_bot(request):
    # 检查User-Agent
    user_agent = request.headers.get('User-Agent', '').lower()
    bot_keywords = ['googlebot', 'bingbot', 'slurp', 'duckduckbot', 'yahoo! slurp']
    for keyword in bot_keywords:
        if keyword in user_agent:
            return True
    
    # 检查短时间内的请求频率
    real_ip = get_real_ip(request)
    count_key = f"req_count:{real_ip}"
    current_count = redis_client.incr(count_key)
    if current_count == 1:
        redis_client.expire(count_key, 60)  # 1分钟过期
    if current_count > 10:
        return True
    
    return False

小提醒:用SETNX+EXPIRE代替SETEX是为了避免竞态问题——如果在执行SETEX的过程中Redis突然挂了,键会永久存在,导致这个用户/IP之后的浏览都无法被统计,SETNX+EXPIRE是更安全的写法。

4. 进阶方案(适合流量大的平台)

如果上面的方法还不够,你可以试试这些更复杂的方案:

  • CAPTCHA验证:对疑似Bot的请求弹出验证码,验证通过再统计浏览量。不过这个会影响用户体验,建议只给高风险请求用。
  • 机器学习模型:收集正常用户和Bot的行为数据(比如请求间隔、页面停留时间、点击位置等),训练一个分类模型来识别Bot。这个需要一定的工程资源,但准确率会很高。

总的来说,先从请求头和简单的行为检测入手,快速过滤大部分Bot,再根据你的业务流量和需求逐步升级方案,重点是平衡过滤的准确性和用户体验,别把正常用户误判成Bot了。

内容的提问来源于stack exchange,提问作者anvd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:16:26