Keitaro на VPS нужен, чтобы связать источники трафика с лидами, которые собирают формы в WordPress. В результате ты получаешь понятную атрибуцию: какой клик привёл к заявке, какие кампании дают заявки, а какие — только посещения.

Рабочая схема выглядит так: пользователь кликает по трекерной ссылке Keitaro, на его стороне ставятся cookie/идентификаторы клика, затем он заполняет форму WordPress. При отправке формы WordPress делает серверный запрос (postback) в Keitaro, передавая идентификатор клика и данные лида.

Дальше Keitaro принимает conversion и отображает его в интерфейсе кампании.

Подготовка VPS и домена под Keitaro

Перед установкой важно привести сервер и домены к рабочему виду. Большинство проблем при запуске Keitaro — не в логике трекинга, а в доступности сайта, сертификатах и сетевых ограничениях.

Выбор VPS: ресурсы и система

Для старта не нужно «калибровать реактор». Keitaro и аналитика обычно комфортно работают на небольших мощностях, пока трафик не станет очень большим. Ориентируйся на типичный сценарий: один сервер под Keitaro, отдельный сервер или хостинг под WordPress.

По ОС чаще всего выбирают Ubuntu LTS. Если у тебя уже есть VPS под проект — используй то, что привычнее твоей команде, но оставь возможность обновлений и доступа по SSH.

Сеть, порты и firewall

Нужно открыть входящие порты только тем, что реально используется:

  • 80/443 для HTTPS-доступа к интерфейсу и эндпоинтам Keitaro
  • 22 для SSH (по возможности с ограничением по IP)
  • остальные порты — только если они задействованы твоей схемой (обычно Keitaro прячут за reverse proxy)

На практике удобно поставить UFW и явно разрешить правила. Это снижает риск случайно «торчащих» сервисов.

Домен и SSL: минимальная рабочая настройка

Keitaro должен быть доступен по стабильному домену по HTTPS. Если у тебя ещё нет домена для трекера, делай отдельный поддомен, например:

  • tracker.example.com

С SSL лучше не экспериментировать «вручную». Если VPS поддерживает автоматическую выдачу сертификата — используй её. После включения HTTPS проверь, что:

  • интерфейс Keitaro открывается без предупреждений
  • постбеки (запросы) уходят на HTTPS-адрес Keitaro и не ломаются на редиректах

Установка Keitaro на VPS

Keitaro можно поднять по разным сценариям. На практике чаще встречаются варианты с контейнерами и с установкой через инсталлятор. Смысл одинаков: ты получаешь работающий web-интерфейс, хранилище данных и доступность внешних эндпоинтов для постбеков.

Подготовка окружения

Сделай базовую подготовку:

  • обнови пакеты
  • установи Docker и docker-compose (если выбран контейнерный подход)
  • выдели каталог для persistent volumes (чтобы данные не терялись при обновлениях)

Если у тебя в системе есть старые версии контейнеров или конфликтующие сервисы — разрули это до установки. Иначе отладка превратится в «где-то что-то занято».

Поднятие Keitaro и проверка доступности

После установки проверь три вещи:

  1. Web-интерфейс Keitaro открывается по URL.
  2. Сервер Keitaro может принимать входящие запросы с интернета на эндпоинт конверсий (postback).
  3. Система может отправлять исходящие запросы, если у тебя включены интеграции/проверки.

Полезный лайфхак: сделай тестовую страницу на WordPress или отдельный curl-запрос с твоей машины и убедись, что Keitaro отвечает так, как ожидаешь. Это быстрее, чем ждать первую «боевую» заявку.

Настройка базовой безопасности

Перед тем как запускать трафик:

  • ограничь доступ к интерфейсу Keitaro по IP (если это возможно в твоей архитектуре)
  • включи fail2ban или аналогичный подход для SSH
  • проверь, что SSH работает по ключам, а не по паролю
  • обновляй систему и контейнеры по расписанию

Если Keitaro доступен публично, безопасность интерфейса особенно важна. Трекер — это «мозг» связки, доступ к нему должен быть контролируемым.

Создание трекинга: кампании, источники и postback в Keitaro

Когда сервер готов, начинается настройка логики: откуда приходят клики и куда Keitaro должен получать conversion.

Создай кампанию и определись с параметрами атрибуции

В Keitaro создаётся кампания под конкретный источник (рекламный канал или связка). Обычно тебе нужно решить:

  • какие параметры ты будешь использовать для атрибуции (например, subid, параметры кампании, идентификатор объявления)
  • как Keitaro будет различать клики разных источников

Если у тебя несколько рекламных площадок, на старте лучше держать единый стандарт параметров. Иначе потом аналитика превращается в ручную уборку.

Настрой postback для лида

Keitaro должен получить данные о конверсии через postback URL, который ты забираешь из интерфейса Keitaro. Он обычно включает параметры, позволяющие привязать conversion к конкретному клику.

Важные принципы при настройке:

  • постбек должен приходить один раз на одну реальную заявку
  • в запросе должны быть идентификаторы, которые Keitaro сможет сопоставить с кликом
  • тело запроса должно соответствовать формату, который ожидает Keitaro (часто это query-параметры или x-www-form-urlencoded)

Самый частый провал — отправить postback без идентификатора клика. В этом случае Keitaro либо не сможет корректно связать conversion, либо положит её в «никуда».

Подготовь поля лида для передачи

Обычно для контроля и сегментации нужны:

  • email и/или телефон
  • имя (если есть)
  • страница или оффер
  • сумма/тип услуги (если форма позволяет)

Данные лида лучше передавать вместе с conversion. Это ускоряет принятие решений и уменьшает ручную сверку с CRM.

Подключение Keitaro к страницам WordPress (скрипт и cookie)

Чтобы при отправке формы Keitaro мог связать заявку с кликом, на стороне браузера должны появиться идентификаторы. Чаще всего это достигается установкой скрипта трекинга Keitaro на страницы, куда попадают пользователи по трекерным ссылкам.

Размести JS-трекинг на странице формы

Смотри документацию Keitaro по установке JS и вставь трекинг на страницу WordPress, где пользователь видит форму. Цель простая: когда пользователь открыл страницу после клика, Keitaro должен «узнать» сессию и подготовить cookie/значения для дальнейшей передачи.

Практический вариант:

  • если у тебя одна целевая страница — ставь скрипт на неё
  • если их несколько — ставь скрипт на шаблон страницы с формой

Если используешь каскадные редиректы или много страниц между кликом и формой, трекинг лучше закрепить на всех ключевых шагах, чтобы идентификатор не потерялся.

Проверь, что cookie на стороне браузера реально появляются

После установки трекинга:

  • открой страницу после перехода по трекерной ссылке
  • проверь Storage/Cookies в браузере
  • убедись, что на домене WordPress появились нужные значения Keitaro

Ошибки на этом этапе часто выглядят так: «postback в Keitaro приходит, но conversion не атрибутится». И причина — идентификатор клика в форме пустой или не соответствует формату.

Передача идентификатора клика в форму WordPress

Теперь главный мост между системами: при отправке формы WordPress должен отправить в backend (и дальше в Keitaro) то значение, которое Keitaro использует для привязки к клику.

Скрытое поле в форме: простой и надёжный подход

Оптимально добавить в форму скрытое поле, куда ты положишь идентификатор клика. Его можно заполнить:

  • при загрузке страницы (с помощью JS, который читает cookie Keitaro)
  • перед отправкой формы (если форма рендерится динамически)

Суть подхода: ты сохраняешь идентификатор клика в поле формы, а затем отправляешь вместе с остальными данными.

Пример логики без привязки к конкретному имени cookie:

  • JS читает cookie, которые ставит Keitaro
  • JS записывает значение в input name=»keitaroclickid»
  • при submit формы это значение уходит в backend обработчик

Если у тебя форма строится через конструктор, скрытое поле добавляется через настройки поля или через шаблон. Если конструктор не даёт — можно сделать единый обработчик отправки, но тогда придётся подхватывать значение из cookie напрямую на клиенте.

Где именно брать идентификатор

Keitaro использует свой набор параметров и cookie. Поэтому правильнее работать так:

  • посмотри в документации или в настройках трекера, какое значение используется для привязки конверсии
  • выбери из него то, что нужно в postback (часто это клик-идентификатор или cookie-ссылка)

Если ты подставишь «не то» значение (например, параметр кампании вместо click id), Keitaro может принять запрос, но атрибуция будет неправильной.

Валидация на клиенте: чтобы не отправлять пустоту

Перед тем как вызывать postback или отдавать данные серверу, убедись, что hidden-поле заполнено. Минимальная проверка:

  • если значение пустое — логируй в консоль и не отправляй lead в Keitaro (либо отправляй как «без атрибуции», но тогда теряется аналитика)

Такая защита особенно полезна при редиректах и кроссдоменных сценариях.

Отправка лида в Keitaro (postback) на стороне WordPress

Когда кликовые идентификаторы оказались в форме, остаётся сделать корректный серверный вызов в Keitaro при событии отправки.

Есть два рабочих подхода:

  1. WordPress вызывает Keitaro прямо с фронтенда (fetch на postback URL).
  2. WordPress принимает форму, затем серверно вызывает Keitaro (рекомендуется).

Второй подход обычно проще для отладки и меньше упирается в CORS, редиректы и ограничения браузера. Для нейтральной и «боевой» связки стоит делать серверный postback из WordPress.

Делай свой REST endpoint в WordPress

Создай эндпоинт, который будет принимать данные лида от формы и отправлять их в Keitaro. С точки зрения архитектуры ты получишь:

  • единое место, куда приходят данные
  • контроль формата запроса к Keitaro
  • возможность добавлять недостающие поля (например, IP, user agent, utm)

Схема:

  • форма отправляется обычным образом
  • в обработчике формы или через webhook вызывается твой endpoint /wp-json/keitaro/v1/lead
  • endpoint делает wpremotepost на postback URL Keitaro

Такой вариант также позволяет добавлять защиту, например секретный токен параметром.

Что отправлять в Keitaro вместе с постбеком

В postback обычно нужны:

  • идентификатор клика (тот самый из hidden-поля)
  • идентификатор кампании/оффера (если требуется)
  • поля лида (email/телефон/имя)
  • опционально: timestamp события или статус

Уточни формат в Keitaro: где именно ожидаются поля — в query-параметрах или в теле запроса. Если поле «не там», Keitaro может вернуть ошибку или записать conversion, но без нужных атрибутов.

Серверный запрос из WordPress: удобные настройки

В PHP обработчике (через wpremotepost):

  • выставь разумный timeout
  • обработай ответ Keitaro и залогируй ошибки
  • не делай повторные запросы бесконечно (лучше ограничить ретраи)

Если запрос падает по сети, лучше вернуть форму пользователю с нормальным сообщением и параллельно залогировать, чем «зависать» на ожидании postback.

Как вызывать endpoint из разных типов форм

Здесь важен принцип, а не конкретный плагин:

  • тебе нужно получить событие отправки формы
  • на этом событии передать данные (хотя бы email/телефон + keitaroclickid) в твой REST endpoint

Если у тебя Contact Form 7, Gravity Forms, WPForms или Elementor Forms — у каждого свой способ хуков. Но суть одна: найти точку, где формируется итоговая запись, и там дернуть webhook/REST.

Лайфхак: если твой конструктор умеет «webhook on submit», подключай webhook напрямую на /wp-json/keitaro/v1/lead. Тогда не придётся лезть глубоко в код.

Тестирование связки: от клика до лида в Keitaro

Самый надёжный способ не упустить детали — тестовый прогон по шагам. Делай его перед включением рекламы.

Шаг 1: тестовый клик через трекерную ссылку

  • открой в браузере инкогнито
  • зайди по трекерной ссылке Keitaro
  • убедись, что дошёл до страницы формы

После этого открой DevTools и проверь:

  • cookie Keitaro появились на нужном домене
  • hidden-поле заполнилось (или хотя бы JS-значение доступно)

Шаг 2: отправка формы с тестовыми данными

Введи тестовые email/телефон, отправь форму. Сразу проверь:

  • отправилась ли форма на WordPress
  • твой REST endpoint получил запрос
  • endpoint попытался сделать postback в Keitaro

Если ты делаешь серверный postback, ошибки чаще всего будут в стороне WordPress (формат payload, timeout, неправильный URL Keitaro или SSL).

Шаг 3: проверка conversion в Keitaro

Перейди в Keitaro и посмотри:

  • появилась ли conversion в нужной кампании
  • присвоился ли клик (правильная атрибуция)
  • корректно ли заполнены поля лида (email/телефон)

Если conversion появилась, но «не на тот клик», ищи проблему в идентификаторе клика: либо hidden-поле пустое, либо значение не соответствует ожидаемому формату.

Шаг 4: защита от дублей

На практике формы иногда отправляются дважды:

  • пользователь нажал кнопку повторно
  • плагин делает двойной submit
  • браузер повторил запрос при проблемах сети

Чтобы это не ломало аналитику, добавь идемпотентность:

  • перед отправкой postback проверь наличие уникального идентификатора лида (например, email + timestamp в разумном окне)
  • или храни «last sent hash» на сервере в пределах сессии/периода

Это снижает ручную чистку результатов и делает отчёты стабильнее.

Типичные ошибки при связке Keitaro и форм WordPress

Ниже список проблем, которые встречаются чаще всего. Каждая сопровождается причиной и тем, что проверить в первую очередь.

Conversion приходит без атрибуции

Причины:

  • hidden-поле не заполнено
  • JS не успевает отработать до submit
  • берётся не то cookie/значение
  • идентификатор клика изменился из-за редиректа/кроссдоменности

Что проверить:

  • значение в скрытом поле перед отправкой
  • cookie в браузере
  • как именно формируется postback payload

Keitaro не принимает postback или возвращает ошибки

Причины:

  • неверный URL Keitaro (часто путают домен, порт или путь)
  • проблема с SSL (сертификат на другом поддомене)
  • firewall на VPS блокирует входящие запросы
  • неверный формат параметров (поля отправлены не так, как ждёт Keitaro)

Что проверить:

  • доступность URL Keitaro с внешней сети
  • логи WordPress (где формируется postback)
  • логи Keitaro или статус ответа на постбек

Дубликаты заявок в Keitaro

Причины:

  • обработчик формы дергается дважды
  • постбек делается и с фронтенда, и с бэкенда одновременно
  • ретраи на стороне WordPress без ограничений

Что проверить:

  • точку вызова endpoint (одна ли она)
  • идемпотентность (есть ли уникальный ключ)
  • отсутствие повторного submit

Заявка отправляется в WordPress, но не попадает в Keitaro

Причины:

  • REST endpoint в WordPress недоступен (ошибка маршрута/URL)
  • endpoint не принимает payload из формы (несовпадение полей)
  • endpoint «падает» по PHP ошибке, но форма пользователя проходит

Что проверить:

  • PHP error log
  • response endpoint в браузере (если вызов делается клиентом)
  • логи WordPress при отправке

Трекер работает, но отчёт не совпадает с реальными лид-данными

Причины:

  • поля лида передаются не полностью (например, нет телефона)
  • формат полей меняется (строка vs число)
  • есть разница между временем отправки формы и временем получения postback

Что проверить:

  • mapping полей: как именно названия полей сопоставлены в Keitaro
  • единый формат email/телефона
  • что конверсия считается на статусе «успешная отправка»

Эксплуатация: как держать связку Keitaro на VPS стабильной

После запуска важно не забыть про обслуживание. Связка трекер + WordPress будет жить дольше, чем желание сделать «только один раз».

Логи и мониторинг

Минимальный набор:

  • логи Keitaro: по ошибкам постбеков и обработке конверсий
  • логи WordPress: по вызовам твоего endpoint и ошибкам в wpremotepost
  • мониторинг доступности домена и HTTPS (хотя бы внешним сервисом)

Если нет мониторинга, проблема обнаруживается только по «пустым отчётам». Это медленно.

Регулярные обновления и бэкапы

Делай бэкапы конфигурации и данных Keitaro согласно твоей схеме хранения. Если Keitaro в контейнерах — следи за volumes. Для WordPress бэкапируй:

  • базу данных
  • файлы темы/плагинов
  • конфиги и кастомные endpoints

Обновления лучше делать по расписанию и в окно минимальной нагрузки. Перед обновлением трекера протестируй короткий сценарий: клик → форма → postback.

Ограничение доступа и контроль безопасности

Проверь, что:

  • интерфейс Keitaro доступен только нужным пользователям (по IP или по логину/паролю)
  • SSH не доступен по паролю
  • секреты (токены endpoint, пароли базы) лежат не в открытом виде

Для endpoint на WordPress добавь секретный токен или подпись запроса. Это не «безопасность на века», но уже сильно снижает риск случайных запросов.

Чек-лист перед запуском рекламы

Чтобы запуск прошёл без «сюрпризов», пройди короткий список:

  • Keitaro доступен по HTTPS по твоему tracker.example.com
  • JS-трекинг стоит на странице формы в WordPress
  • скрытое поле формы заполняется идентификатором клика
  • WordPress отправляет postback в Keitaro из серверной части (REST endpoint или webhook)
  • conversion в Keitaro появляется в нужной кампании и атрибутируется к клику
  • ошибок в логах нет или они понятны и учтены
  • дублей при повторной отправке формы не возникает

Если хотя бы один пункт не сходится, сначала разбирай причину на стороне передачи идентификатора клика и формата postback. Обычно именно там спрятано 80 процентов проблем.

Итог: как получить стабильные лиды из форм WordPress в Keitaro

Связка Keitaro на VPS и форм WordPress становится рабочей, когда сходятся три вещи: доступность трекера, корректная передача идентификатора клика и правильный postback именно в том формате, который ждёт Keitaro. Если сделать эти элементы единообразными и протестировать сценарий клик → форма → лид, дальше аналитика ведёт себя предсказуемо.

Собери связку как систему, а не как набор «разрозненных правок»: один стандарт параметров, один endpoint для лидов, одна проверка дублей. Тогда Keitaro начнёт показывать реальную картину по кампаниям, а не приблизительные догадки.

От mpns_by