手把手教你如何作一套utm广告投放

设计背景

目前平台上缺少对用户来源和生命周期的管理,致使外部投放活动和平台的运营活动没法精确掌握投放效果。此次增长的功能,可让咱们掌握不一样的投放、活动所带来的用户质量,从而优化投放及活动手段。php

设计概览

经过在连接后面添加UTM(跟踪模块)参数的方式,跟踪用户来源。而且经过为游客模式的用户分配临时ID的方式,能够从游客时期就开始跟踪用户行为,从而更充分的掌握投放效果和用户质量。mysql

详细设计

UTM参数

UTM(urchin tracking module)是一套标准的渠道跟踪工具,除了用来跟踪不一样渠道的流量效果外,还能够用来做为精细化运营工具,不断优化投放、活动效果。
UTM经常使用的参数有5个,分别以下:web

参数 名称 示例
utm_source 渠道来源 utm_source=zhihu
utm_medium 投放媒介 utm_medium=kecheng
utm_campaign 广告名称 utm_campaign=zhihu0728
utm_content 广告内容 utm_content=153
utm_term 广告关键词 utm_content=cv

用户生命周期

用户的生命周期是由一系列具体的用户行为构成的,在本次设计中,定义的能够收录入用户生命周期的用户行为有:第一次浏览(第一次使用该产品)、登陆、注册、访问课程、下单、购买成功和参与活动(活动特指访问带有UTM参数的页面,多是对外投放的广告,也多是官网的一次活动)。下文中将须要收录入用户生命周期的用户行为命名为用户关键行为。
收录的用户关键行为的格式为:行为、行为对象、设备、浏览器、时间戳。好比用户下单了某个课程A,收录的格式为:下单、课程A、手机、APP、时间戳。sql

临时ID

用户以游客身份访问网站时(PC、M站、APP),若是是以游客身份,须要给用户分配一个惟一的临时ID,而且须要以该临时ID在后台建立一个用户生命周期记录。后续该用户注册或者登陆后,须要将该临时ID上发生的用户关键行为合并到学号上去。但该临时ID不要删除,以便继续统计用户万一退出登陆后在平台上的行为。
建立临时ID时,须要同时将第一次浏览的信息写上,若是是经过活动连接,则将该次行为记为“参与活动”,不然的话就记为第一次浏览。好比用户经过百度搜索,进入主页,记录的格式为:第一次浏览、具体连接、PC、Chrome、时间戳。数据库

数据统计

用户经过活动连接建立的帐户,须要对用户的后续关键行为作持续统计,好比注册、购买等,以方便根据这些数据作精细化的运营,提高广告或者活动效率。
一个用户参与了屡次活动,好比活动A、B、C,后续该用户若是注册或者购买了课程(任何平台课程均可以),则注册或者购买数据,须要统计到活动A上,由于是活动A最先触达该用户,使其了解到公司的产品。浏览器

技术实现思路

  1. 当存在这几个参数的时候去匹配是否有设置投放utm
    1. 有:则将惟一标识存入到cookie
    2. 没有:则不是广告投放来源
  2. 虚拟id:暂时用php中session_id做为虚拟id的(若是朋友们有更好的建议,能够推荐一下,互相学习)
  3. 当发现用户已注册或登陆后,将要把虚拟id生成的全部记录绑定到uid上,这样才能不丢失未注册人的生命周期。若是未注册或登陆,那就没办法了。

数据库设计

用户生命周期记录表cookie

CREATE TABLE `utm` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `vid` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '登录前的虚拟id',
  `uid` int(11) NOT NULL DEFAULT '0' COMMENT '用户id',
  `utm_url_id` int(11) NOT NULL DEFAULT '0' COMMENT '关联投放id',
  `url` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '记录连接',
  `device` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '设备',
  `browser` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '浏览器',
  `course_id` int(11) NOT NULL DEFAULT '0' COMMENT '课程',
  `pay_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '消费金额',
  `add_time` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间',
  `action` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '行为',
  PRIMARY KEY (`id`),
  KEY `rds_idx_0` (`uid`,`vid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='用户生命周期记录'

广告投放表session

CREATE TABLE `utm2` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '连接名称',
  `url` text COLLATE utf8_unicode_ci NOT NULL COMMENT 'url完整地址',
  `utm_campaign` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '缩略名',
  `utm_source` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '来源',
  `utm_medium` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '媒介',
  `utm_term` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '关键词',
  `utm_content` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '内容',
  `add_time` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间',
  `url_index` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'url惟一索引',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='广告投放'

实战连接

https://wxiangqian.blog.csdn.net/article/details/105764287?utm_source=csdn数据库设计

结束语

若是功能设计有什么漏洞,欢迎你们提供更好的建议,但愿本文能够帮助大家实现"utm"功能👍
在这里插入图片描述svg