kyranb/footprints

Laravel(UTM参数和引用者)的一个简单的注册归因跟踪解决方案

3.1.5 2022-03-30 00:35 UTC

README

Footprints for Laravel (UTM and Referrer Tracking)

Latest Version on Packagist Software License Build Status Total Downloads

Footprints是为Laravel 7+提供的简单注册归因跟踪解决方案

“我知道我浪费了广告费用的一半……我只是希望我知道是哪一半。” ~ 亨利·普罗克特

通过跟踪用户注册(或任何其他类型的注册)的来源,您可以确保您的营销工作更加专注。

Footprints使得回顾用户注册的原因变得简单。

安装

通过Composer

$ composer require kyranb/footprints

发布配置和迁移文件

php artisan vendor:publish --provider="Kyranb\Footprints\FootprintsServiceProvider"

\Kyranb\Footprints\Middleware\CaptureAttributionDataMiddleware::class添加到需要跟踪的路由组中,或者作为App\Http\Kernel.php中的全局中间件(在EncryptCookie中间件之后!)如下所示

    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\EncryptCookies::class,
        \Kyranb\Footprints\Middleware\CaptureAttributionDataMiddleware::class, // <-- Added
    ];

通过实现TrackableInterface并使用TrackRegistrationAttribution特性,将跟踪添加到需要跟踪注册的模型(通常是Eloquent模型\App\Models\User)中,如下所示

namespace App\Models;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Kyranb\Footprints\TrackableInterface;
use Kyranb\Footprints\TrackRegistrationAttribution;

class User extends Model implements TrackableInterface // <-- Added
{
    use Authenticatable;
    use TrackRegistrationAttribution; // <-- Added 

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

}

配置

检查配置文件,特别是您希望跟踪的模型

连接名称(可选 - 如果您需要一个单独的跟踪数据库)

'connection_name' => 'mytrackingdbconnection'

模型名称

'model' => 'App\Models\User'

认证守卫

'guard' => 'web'

列名称

'model_column_name' => 'user_id'

以及归因持续时间(以秒为单位)

'attribution_duration' => 2628000

您还可以定义一些不想跟踪的路线

'landing_page_blacklist' => ['genealabs/laravel-caffeine/drip', 'admin']

如果您要在多个子域名上使用通配符cookie,您可以设置自定义域名

'cookie_domain' => .yourdomain.com

此布尔值允许您将跟踪数据写入队列中的数据库(可选)

'async' => true

禁用设置可以实现禁用cookie的跟踪

'uniqueness' => false

用法

Footprints是如何工作的?

Footprints跟踪所有由未经认证的用户发送到您的应用程序的请求中的UTM参数和HTTP引用者。不确定UTM参数是什么吗? 维基百科上有详细解释

UTM参数(UTM)是Urchin Traffic Monitor的简称。这些文本标签允许用户在分析工具(例如Google Analytics)中跟踪和分析流量来源。通过将UTM参数添加到URL中,您可以识别发送流量到您网站的资源来源和活动。当用户点击推荐链接/广告或横幅时,这些参数会发送到Google Analytics(或其他分析工具),因此您可以在报告中看到每个活动的有效性。

以下是一个URL中UTM参数的示例: www.wikipedia.org/?utm_source=domain.com&utm_medium=banner&utm_campaign=winter15&utm_content=blue_ad&utm_term=headline_v1

UTM参数有5个维度
  • utm_source = 源名称(通常是源网站的域名)

  • utm_medium = 媒介名称;流量类型(例如cpc = 付费搜索,organic = 有机搜索;referral = 来自其他网站的链接等。)

  • utm_campaign = 活动名称,例如Google AdWords中的活动名称,电子邮件活动的日期等。

  • utm_content = 区分同一活动中的不同部分;例如Google AdWords中AdGroup的名称(使用自动标记,您将在这个维度中看到广告的标题)

  • utm_term 用于区分同一内容的不同部分;例如在Google AdWords中的关键词

它是如何记录的?
  • CaptureAttributionDataMiddleware:只有使用此中间件的路由才能被跟踪
  • TrackingFilter:用于确定是否记录请求
  • TrackingLogger:将请求实际记录到Eloquent的Visit模型中
  • Footprinter:使用cookie或如果配置为使用,则回退到使用ip和User-agent头部进行请求的“链接”
  • TrackRegistrationAttributes:用于我们要跟踪注册的Eloquent模型(通常是User模型)

有关流程的更详细技术解释,请参阅下面的[跟踪过程详情](#Tracking process in details)部分。

每次访问都跟踪哪些数据?

默认配置跟踪最相关的信息

  • landing_page
  • referrer_url
  • referrer_domain
  • utm_source
  • utm_campaign
  • utm_medium
  • utm_term
  • utm_content
  • created_at(访问日期)

但此包还使用户的IP地址或请求对象中可用的任何信息变得容易跟踪。

获取注册前所有用户的访问记录。
$user = User::find(1);
$user->visits;
获取注册前用户首次访问的归属数据。
$user = User::find(1);
$user->initialAttributionData();
获取注册前用户最后一次访问的归属数据。
$user = User::find(1);
$user->finalAttributionData();
事件

当注册处理完毕后,TrackingLogger会触发一个RegistrationTracked事件,此时可以通过监听Visit模型上的Eloquent事件来监听任何被跟踪的访问。

跟踪过程详情

首先,CaptureAttributionDataMiddleware可以全局注册或在选定的路由列表中注册。

每当传入的请求通过CaptureAttributionDataMiddleware中间件时,它会检查是否使用TrackingFilter类(可以是实现TrackingFilterInterface的任何类)来跟踪请求,以及如果请求应该被记录,TrackingLogger将执行此操作(可以是实现TrackingLoggerInterface的任何类)。

TrackingLogger负责将有关请求的信息作为Vist记录记录下来。最重要的参数是请求的“足迹”,这是多个请求应由同一用户执行且应该相同的实体,因此这就是用来链接不同请求的。

计算足迹是通过一个请求宏完成的,该宏反过来使用一个Footprinter单例(可以是实现FootprinterInterface的任何类)。它将查找是否存在一个footprints cookie(可配置),如果存在则使用它。如果cookie不存在,则创建它以便可以在后续请求中跟踪。有些人可能希望实现自定义逻辑,但请注意,计算必须是一个纯函数,这意味着多次以相同的请求作为输入调用此方法应该始终产生相同的结果。

在某个时候,用户注册(或创建任何可跟踪的模型)会触发AssignPreviousVisits作业。此作业计算请求的足迹,并查找任何现有的已记录的Visit记录,并将这些记录链接到新用户。

保持足迹表轻量

修剪表

如果不进行修剪,则visits表会非常快地积累记录。为了减轻这种情况,您应安排每天运行footprints:prune Artisan命令。

$schedule->command('footprints:prune')->daily();

默认情况下,所有超过配置文件中 attribution_duration 设置的时间未被分配给用户的条目。您可以在调用命令时使用天数选项来决定保留足迹数据的时间长度。例如,以下命令将删除所有超过10天前创建的记录。

$schedule->command('footprints:prune --days=10')->daily();

=======

禁用机器人跟踪

在禁用机器人跟踪之前,您需要安装 jaybizzle/crawler-detect。为此:composer require jaybizzle/crawler-detect

您的表可能会很快变得很大,主要是因为机器人(如Google、Bing等)。要禁用机器人跟踪,请相应地更改 config 文件夹中的 footprints.php 文件。

'disable_robots_tracking' => true 

升级

2.x > 3.x

此包的3.x版本包含一些需要解决的破坏性更改,如果您从早期版本升级,则必须解决这些更改。

  • 将配置在 config('footprints.table_name') 中的表的 cookie_token 列重命名为 footprint
  • 将字段 ip 添加为 nullable string 到配置的足迹表中。
  • 在应跟踪跟踪的任何模型上实现 TrackableInterface(通常为Eloquent模型 User)。
  • (可选 | 推荐) 发布更新后的配置文件: php artisan vendor:publish --provider="Kyranb\Footprints\FootprintsServiceProvider" --tag=config --force
  • 如果对 TrackRegistrationAttribution 进行了任何修改,请查阅更新版本以确保兼容性。

变更日志

请查看提交历史记录以获取有关最近更改的更多信息。

测试

尚未进行此项测试 - 欢迎PR;)

$ composer test

贡献

如果您遇到任何问题,有建议或想扩展此包的功能,请创建问题或拉取请求:)

感谢

感谢ZenCast,它是周围最好的播客托管服务之一。

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件