feat(ads): конверсия «регистрация» в Google Ads по gclid
Рекламу по обучающим запросам (obsidian как пользоваться, obsidian заметки) ведём на бесплатный вход в школу, а не на продажу: порог входа нулевой, а из 19 бесплатных регистраций 6 дошли до покупки (32%). Чтобы Google видел, какие клики дают студентов: - User.gclid — идентификатор клика рядом с уже собираемыми UTM; - gclid прокидывается из URL через page → форму → API (той же цепочкой); - src/lib/ads-conversion.ts — серверная отправка конверсии 7719084914 (UPLOAD_CLICKS). Серверно, а не тегом: после регистрации сразу редирект в кабинет, тег на странице «спасибо» не сработает — грабля из разбора платежей 20260810. Всё gated по env (GADS_*): нет кредов — тихо не отправляем, регистрацию не роняем. Миграция идемпотентна: колонка заведена на проде вручную.
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
-- Идентификатор клика Google Ads на пользователе.
|
||||
-- Рекламу по обучающим запросам ведём на бесплатный вход в школу, поэтому
|
||||
-- конверсию «регистрация» отправляем в Google серверно (src/lib/ads-conversion.ts),
|
||||
-- а не тегом на странице: после регистрации человека сразу редиректит в кабинет.
|
||||
--
|
||||
-- IF NOT EXISTS — колонка уже заведена на проде вручную 20260813, чтобы включить
|
||||
-- сбор до выката образа. На чистой базе миграция создаст её обычным порядком.
|
||||
ALTER TABLE "User" ADD COLUMN IF NOT EXISTS "gclid" TEXT;
|
||||
@@ -29,6 +29,10 @@ model User {
|
||||
utmSource String?
|
||||
utmMedium String?
|
||||
utmCampaign String?
|
||||
// Идентификатор клика Google Ads. Нужен, чтобы отправить конверсию
|
||||
// «регистрация» серверно: рекламный трафик ведём на бесплатный вход,
|
||||
// и без него Google не узнает, какие клики дают студентов.
|
||||
gclid String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
|
||||
Reference in New Issue
Block a user