GithubHelp home page GithubHelp logo

ahoy.js's Introduction

Ahoy.js

🔥 Visit and event tracking for JavaScript

  • Easily track unique visitors
  • Track events across page navigation

Use it with any backend. For Rails, check out the Ahoy gem.

Build Status

Installation

Download ahoy.js and include it on your page.

<script src="ahoy.js"></script>

Or use Yarn:

yarn add ahoy.js

And import it with:

import ahoy from 'ahoy.js';

How It Works

When someone lands on your website, they are assigned a visit token and a visitor token.

The visit token expires after 4 hours, in which a new visit is created. Visits are useful for tracking metrics like monthly active users. The visitor token expires after 2 years. A POST request is sent to /ahoy/visits with:

  • visit_token
  • visitor_token
  • referrer
  • landing_page

The server can capture:

  • ip
  • user_agent
  • user - from app authentication

And calculate things like:

  • referring_domain and search_keyword from referrer
  • utm_source, utm_medium, utm_term, utm_content, and utm_campaign from landing_page
  • city, region, and country from ip
  • browser, os, and device_type from user_agent

Events

Track events with:

ahoy.track(name, properties);

A POST request is sent to /ahoy/events with:

  • name
  • properties
  • time

The server can capture:

  • visit_token - from cookies
  • user - from app authentication

As a precaution, the server should reject times that do not match:

1 minute ago < time <= now

All Events

Track all views and clicks with:

ahoy.trackAll();

Set the page with:

ahoy.configure({page: "Landing page"});

And sections with:

<div data-section="Header">
  <a href="/home">Home</a>
</div>

These are included in event properties if set.

Views

ahoy.trackView();

Name - $view

Properties

  • url - https://www.streamflip.com
  • title - Streamflip

Clicks

ahoy.trackClicks();

Name - $click

Properties

  • tag - a
  • id - account-link
  • class - btn btn-primary
  • text - View Account
  • href - /account

Submits

ahoy.trackSubmits();

Name - $submit

Changes

ahoy.trackChanges();

Name - $change

Development

Ahoy is built with developers in mind. You can run the following code in your browser’s console.

Force a new visit

ahoy.reset(); // then reload the page

Log messages

ahoy.debug();

Turn off logging

ahoy.debug(false);

Configuration

Here’s the default configuration:

ahoy.configure({
  urlPrefix: "",
  visitsUrl: "/ahoy/visits",
  eventsUrl: "/ahoy/events",
  page: null,
  platform: "Web",
  useBeacon: true,
  startOnReady: true,
  trackVisits: true,
  cookies: true,
  cookieDomain: null,
  headers: {},
  visitParams: {},
  withCredentials: false
});

When trackVisits is set to false, Ahoy.js will not attempt to create a visit on the server, but assumes that the server itself will return visit and visitor cookies.

Subdomains

To track visits across multiple subdomains, use:

ahoy.configure({cookieDomain: "yourdomain.com"});

Users

Ahoy automatically associates users with visits and events if the user is authenticated on the server.

If you use cookies for authentication and the JavaScript library is on the same subdomain as the server, no additional configuration is needed.

If you use cookies and the JavaScript library is on a different domain or subdomain as the server, set:

ahoy.configure({withCredentials: true});

This will send credentials such as cookies, authorization headers or TLS client certificates to the server.

If you use headers for authentication, pass them with:

ahoy.configure({headers: {"Authorization": "Bearer ..."}})

Fetch

If you use the Fetch API to make requests and the JavaScript library is on a different domain or subdomain as the server, Ahoy cookies are not sent to the server by default. You can pass the info in headers with:

fetch(url, {
  headers: {"Ahoy-Visit": ahoy.getVisitId(), "Ahoy-Visitor": ahoy.getVisitorId()}
})

Dev Setup

git clone https://github.com/ankane/ahoy.js.git
cd ahoy.js
yarn install
yarn build
yarn test:local

And visit http://localhost:8080/__zuul in your browser.

TODO

  • Send events in batches
  • Add page and section for automatic events
  • Add trackContent method

History

View the changelog

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help:

ahoy.js's People

Contributors

ankane avatar richardvenneman avatar wa0x6e avatar pelletencate avatar jakeniemiec avatar kremalicious avatar wheeyls avatar pazaricha avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.