Отслеживание конверсий доступно на тарифе Business и выше .
В отслеживании конверсий событие lead — это
действие, которым пользователь показывает интерес к продукту:
- зарегистрировался;
- записался на демо;
- подписался на рассылку.
Событие лида задаёт личность клиента и ссылку, по которой он пришёл: все его дальнейшие действия (покупка, апгрейд тарифа) атрибутируются той же ссылке.
В этом руководстве мы сосредоточимся на отслеживании регистраций новых пользователей для SaaS-приложения, использующего Auth0 для аутентификации.
Что нужно до начала
Сначала включите отслеживание конверсий для ссылок: без него клик не связывается с последующими событиями лида и продажи.
Для ссылок партнёрской программы шаг можно пропустить — RevRoute включает отслеживание конверсий у них автоматически.
Для всего воркспейса. Откройте Настройки → Аналитика и включите переключатель Отслеживание конверсий в шапке страницы — он управляет настройкой на уровне воркспейса. Отслеживание включится у всех ссылок, созданных после этого.
Для отдельной ссылки. Откройте
конструктор ссылки и
включите переключатель Отслеживание конверсий — внутри конструктора он же
дёргается горячей клавишей C.
Через API. Передайте trackConversion: true при создании или обновлении
ссылки (по умолчанию — false):
curl -X POST "https://api.revroute.ru/links" \
-H "Authorization: Bearer dub_xxxxxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"trackConversion": true
}'Затем установите на сайт клиентский скрипт RevRoute — он фиксирует клик и сохраняет его идентификатор, без которого события лида не к чему привязать.
Клиентский скрипт RevRoute отдаётся с нашего домена — npm-пакеты ставить не
нужно. Скрипт находит в URL параметр rr_id, сохраняет его в first-party cookie
rr_id на вашем домене (90 дней) и по нему связывает будущие конверсии с
исходной ссылкой.
Вставьте тег в секцию <head> каждой страницы сайта:
<script defer src="https://app.revroute.ru/analytics/script.js"></script>В Next.js (App Router) — через next/script в корневом layout:
import Script from "next/script";
export default function RootLayout({ children }) {
return (
<html lang="ru">
<body>{children}</body>
<Script defer src="https://app.revroute.ru/analytics/script.js" />
</html>
);
}Варианты скрипта (site visit, outbound domains, клиентские конверсии) и все
его атрибуты data-* описаны в разделе Варианты
скрипта.
Проверить установку можно двумя способами:
- Откройте консоль браузера и введите
_revRouteAnalytics— если скрипт установлен, в консоли появится объект. - Добавьте к адресу сайта параметр
?rr_id=testи убедитесь, что в браузере появился cookierr_id.
Если оба пункта не сработали, проверьте, что:
- тег скрипта стоит в секции
<head>страницы; - кеш CDN сброшен, если сайт отдаётся через CDN.
Серверный клиент RevRoute
Примеры ниже используют официальный TypeScript-SDK. Он ставится из npm под
именем dub — форк RevRoute отдельного пакета не публикует, поэтому в SDK
обязательно указывается наш serverURL, иначе запросы уйдут в api.dub.co.
npm install dubimport { Dub } from "dub";
export const dub = new Dub({
token: process.env.REVROUTE_API_KEY, // секретный ключ dub_* из настроек воркспейса
serverURL: "https://api.revroute.ru", // без него SDK пойдёт в api.dub.co
});Секретный ключ (dub_*) держите в переменных окружения и не отдавайте в
браузер. Ключ создаётся в разделе API-ключей .
SDK не обязателен: /track/lead и /track/sale — обычные HTTPS-эндпоинты,
их можно вызвать из любого языка (см. Track
lead).
Настройка Auth0
Далее настройте Auth0 для отслеживания событий конверсий лидов.
Вот как это работает в двух словах:
- В функции
afterCallbackпри входе проверьте, новый ли это пользователь. - Если пользователь новый — проверьте, есть ли cookie
rr_id. - Если cookie есть — отправьте событие лида в Revroute через
dub.track.lead. - Удалите cookie
rr_id.
import { handleAuth, handleCallback, type Session } from "@auth0/nextjs-auth0";
import { cookies } from "next/headers";
import { dub } from "@/lib/dub";
const afterCallback = async (req: Request, session: Session) => {
const userExists = await getUser(session.user.email);
if (!userExists) {
createUser(session.user);
// check if rr_id cookie is present
const clickId = cookies().get("rr_id")?.value;
if (clickId) {
// send lead event to Revroute
await dub.track.lead({
clickId,
eventName: "Sign Up",
customerExternalId: session.user.id,
customerName: session.user.name,
customerEmail: session.user.email,
customerAvatar: session.user.image,
});
// delete the rr_id cookie
cookies().set("rr_id", "", {
expires: new Date(0),
});
}
return session;
}
};
export default handleAuth({
callback: handleCallback({ afterCallback }),
});Поля запроса POST /track/lead:
| Поле | Обяз. | Описание |
|---|---|---|
clickId | да | Идентификатор клика, к которому привязывается лид. Читается из cookie rr_id. Для отложенного лида допустима пустая строка — тогда клик берётся у клиента, найденного по customerExternalId. |
eventName | да | Название события (например, Sign up). Оно же связывает лид с последующей продажей через leadEventName в /track/sale. |
customerExternalId | да | Идентификатор клиента в вашей системе. По нему атрибутируются все будущие события этого клиента. |
discountCode | нет | Промокод партнёра, если клиент пришёл без клика по ссылке. Если переданы и clickId, и discountCode, приоритет у clickId. |
customerName | нет | Имя клиента. Если не передать, сгенерируется случайное. |
customerEmail | нет | Email клиента. |
customerAvatar | нет | URL аватара клиента. |
mode | нет | async (по умолчанию) — не блокировать запрос; wait — дождаться записи события; deferred — отложить создание лида до следующего запроса. |
eventQuantity | нет | Числовое значение события (например, количество мест в триале): лид будет засчитан столько раз. |
metadata | нет | Произвольные данные события, до 10 000 символов в JSON. |
Где смотреть конверсии
После настройки все отслеженные конверсии видны в аналитике воркспейса — в трёх представлениях:
- График по времени — клики, лиды и продажи в динамике: Аналитика .
- Воронка — конверсия и отвал на каждом шаге (клики → лиды → продажи): Аналитика в режиме воронки .
- Поток событий — каждое событие конверсии по всем ссылкам воркспейса в реальном времени: События .