Скрипты для прелендингов в 2026: рабочий набор для арбитражника и медиабайера

Прелендинг давно перестал быть просто «прокладкой между рекламой и оффером». Сегодня это полноценный инструмент, который решает сразу несколько задач: прогревает пользователя, фильтрует трафик, передаёт данные в трекер и рекламный кабинет и помогает пройти модерацию. И всё это держится на скриптах — небольших кусках кода, которые превращают статичную страницу в управляемую машину по добыче лидов.
Ниже — обновлённый набор скриптов, который стоит держать под рукой в 2026 году. Часть из них — классика, проверенная годами. Часть — ответ на новые реалии: ужесточение приватности, отвал клиентского трекинга и всё более умную модерацию площадок.
Что изменилось к 2026 году
Прежде чем копировать код, важно понимать контекст, в котором он теперь работает.
Клиентский трекинг «протекает». Safari с ITP, ограничения iOS, Privacy Sandbox в Chrome и блокировщики срезают куки и пиксели. Скрипт, который честно ставил куку и отправлял событие из браузера, в 2026-м теряет заметную долю конверсий. Поэтому клиентские скрипты сегодня — это не вся истина, а лишь верхний слой над серверным трекингом (server-side, Conversions API / CAPI, серверный GTM).
Согласие стало обязательным. В Tier-1 без корректно настроенного Consent Mode v2 у Google и без баннера согласия по GDPR данные либо не собираются, либо режутся. Скрипт согласия теперь не формальность, а часть воронки.
Трафик всё чаще идёт из приложений и WebView. In-app и WebView-окружения ведут себя иначе, чем обычный браузер: часть API недоступна, буфер обмена и вибрация могут работать по-своему. Скрипты нужно проверять именно в том окружении, откуда идёт трафик.
Прелендинги научились генерировать ИИ. Собрать вёрстку и тексты стало быстрее, но именно скрипты и логика остаются тем, что отличает рабочую связку от красивой, но пустой страницы.
Держа это в голове, разберём набор по блокам.
Базовый блок: трекинг и передача данных
Проброс sub-id и click_id в оффер
Самый важный скрипт из всех. Если параметры из рекламы не доезжают до оффера, вы не сможете оптимизировать кампанию: трекер не поймёт, какое объявление и какая аудитория дали конверсию.
html
<a href="https://your-offer.com/?click_id=" class="btn-offer">Забрать бонус</a>
javascript
document.addEventListener('DOMContentLoaded', () => {
const query = window.location.search.substring(1); // sub1=...&click_id=...
if (!query) return;
document.querySelectorAll('a.btn-offer').forEach(a => {
const sep = a.href.includes('?') ? '&' : '?';
a.href += sep + query;
});
});
Скрипт берёт всю строку параметров с прелендинга и приклеивает её ко всем ссылкам на оффер. Так click_id, sub1–sub10 и utm-метки не теряются на переходе.
Передача Pixel ID через прелендинг
Классический приём для пикселя Meta, когда пиксель нужно инициализировать не на самом прелендинге, а позже — например, на странице «спасибо». ID пикселя прокидывается в URL параметром fbpixel, сохраняется в куку и достаётся уже на нужной странице.
Утилиты для работы с куками и параметрами:
javascript
function setCookie(name, value, days) {
const d = new Date();
d.setTime(d.getTime() + days * 864e5);
document.cookie = `${name}=${value};expires=${d.toUTCString()};path=/`;
}
function getCookie(name) {
const m = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)');
return m ? m.pop() : '';
}
function getParam(name) {
return new URLSearchParams(window.location.search).get(name);
}
На прелендинге сохраняем ID:
javascript
const pixel = getParam('fbpixel');
if (pixel) setCookie('fbpixel', pixel, 30);
На странице конверсии достаём и инициализируем:
javascript
const pixel = getCookie('fbpixel');
if (pixel) {
// сюда вставьте базовый код пикселя Meta (fbq)
fbq('init', pixel);
fbq('track', 'Lead');
}
Важная оговорка для 2026 года: клиентский пиксель ловит уже не всё. Дублируйте события через Conversions API на сервере — иначе часть конверсий просто не долетит.
Конверсионный блок: работа с пользователем
Автоопределение языка и гео
Одна связка может лить на несколько гео. Скрипт показывает нужный языковой блок в зависимости от настроек браузера.
javascript
const lang = (navigator.language || 'en').slice(0, 2);
document.querySelectorAll('[data-lang]').forEach(el => {
el.style.display = el.dataset.lang === lang ? 'block' : 'none';
});
Для точного гео (страна, город) язык браузера ненадёжен — лучше определять по IP через серверный заголовок или гео-API и передавать результат в разметку.
Таймер обратного отсчёта с сохранением состояния
Дефицит и срочность работают до сих пор. Но «вечный» таймер, который сбрасывается при каждой перезагрузке, выглядит фальшиво. Сохраняем состояние в localStorage:
javascript
const DURATION = 15 * 60; // 15 минут
const el = document.getElementById('timer');
let end = +localStorage.getItem('timerEnd');
if (!end || end < Date.now()) {
end = Date.now() + DURATION * 1000;
localStorage.setItem('timerEnd', end);
}
const tick = setInterval(() => {
let left = Math.max(0, Math.round((end - Date.now()) / 1000));
const m = String(Math.floor(left / 60)).padStart(2, '0');
const s = String(left % 60).padStart(2, '0');
el.textContent = `${m}:${s}`;
if (left <= 0) clearInterval(tick);
}, 1000);
Кнопка «Копировать промокод»
Актуально для гемблинга, беттинга и e-commerce. Современный способ — через Clipboard API с запасным вариантом:
javascript
document.getElementById('copyPromo').addEventListener('click', async () => {
const code = document.getElementById('promo').textContent.trim();
try {
await navigator.clipboard.writeText(code);
} catch (e) {
const t = document.createElement('textarea');
t.value = code; document.body.appendChild(t);
t.select(); document.execCommand('copy'); t.remove();
}
const btn = document.getElementById('copyPromo');
btn.textContent = 'Скопировано';
setTimeout(() => (btn.textContent = 'Копировать'), 1500);
});
В WebView и in-app доступ к буферу обмена бывает ограничен — обязательно тестируйте в реальном окружении.
Всплывающие соцдоказательства
Уведомления в духе «кто-то только что получил бонус» повышают доверие. Главное — не переборщить с частотой.
javascript
const names = ['Александр', 'Мария', 'Дмитрий', 'Елена', 'Игорь'];
const cities = ['Москва', 'Киев', 'Алматы', 'Минск', 'Ташкент'];
function showToast(text) {
const t = document.createElement('div');
t.className = 'social-toast';
t.textContent = text;
document.body.appendChild(t);
setTimeout(() => t.remove(), 5000);
}
setInterval(() => {
const n = names[Math.random() * names.length | 0];
const c = cities[Math.random() * cities.length | 0];
showToast(`${n} из города ${c} только что забрал бонус`);
}, 8000);
Динамическая подстановка города и даты
Персонализация повышает вовлечённость. Дату вставить легко, город — через гео по IP.
javascript
document.querySelectorAll('.today').forEach(el => {
el.textContent = new Date().toLocaleDateString('ru-RU');
});
Вибрация и звук на мобильных
Короткая вибрация при первом касании привлекает внимание. Работает только по действию пользователя и только там, где браузер это разрешает.
javascript
document.addEventListener('click', () => {
if (navigator.vibrate) navigator.vibrate([200, 100, 200]);
}, { once: true });
Блок перехода: как довести до оффера
Клик по всей странице
Иногда прелендинг настраивают так, что любой клик ведёт на оффер. Приём мощный, но агрессивный: он ухудшает качество трафика и не проходит на многих площадках. Используйте осознанно и только там, где это допустимо.
javascript
document.addEventListener('click', () => {
window.location.href = 'https://your-offer.com/?' + location.search.substring(1);
});
Возврат-ловушка (камбэкер)
Перехватывает кнопку «Назад» и вместо выхода отправляет пользователя на другой оффер или предложение.
javascript
history.pushState(null, '', location.href);
window.addEventListener('popstate', () => {
window.location.href = 'https://your-second-offer.com/';
});
Честно: приём раздражает пользователей, портит поведенческие метрики и нарушает правила ряда источников. В 2026 году площадки распознают его всё лучше. Тестируйте аккуратно и не там, где рискуете аккаунтом.
Технический блок: скорость, чистота, защита
Скорость и Core Web Vitals
В 2026 году скорость — это и конверсия, и допуск к трафику. Google учитывает Core Web Vitals, а пользователь просто уходит с медленной страницы. Базовый минимум без всякого JS:
- изображения с
loading="lazy"и правильными размерами; - сжатие в WebP/AVIF;
deferдля скриптов,preconnectк домену оффера;- минимум внешних библиотек — большинство скриптов выше работают на чистом JS.
Фильтр мусорного и бот-трафика на стороне ленда
Часть кликов — это боты, парсеры и превью-сканеры. Они портят статистику и мешают чистой оптимизации. Простой клиентский фильтр помогает пометить очевидно неживой трафик:
javascript
function looksLikeBot() {
return navigator.webdriver === true
|| /HeadlessChrome|bot|crawler|spider/i.test(navigator.userAgent)
|| navigator.plugins.length === 0;
}
if (looksLikeBot()) {
// например, не запускать тяжёлые скрипты и пометить визит в трекере
}
Это грубый фильтр для чистоты статистики, а не серьёзная защита — продвинутые боты его обходят.
Базовая защита от копирования
Скрипт, отключающий правый клик и выделение, часто ставят на прелендинги. Стоит понимать честно: он останавливает только случайного пользователя, но не того, кто откроет исходный код или инструменты разработчика.
javascript
document.addEventListener('contextmenu', e => e.preventDefault());
document.addEventListener('copy', e => e.preventDefault());
Комплаенс-блок для Tier-1
Если вы льёте на Европу, США или другие Tier-1 гео, без согласия на обработку данных вы теряете и данные, и аккаунты.
- Consent Mode v2 у Google: без него конверсии из Европы моделируются частично или не собираются вовсе.
- Баннер согласия по GDPR: пользователь должен явно согласиться до того, как запустятся трекинговые скрипты.
- Порядок запуска: пиксели и аналитика должны стартовать только после согласия, иначе рискуете и данными, и жалобами.
Минимальный каркас баннера — простой блок, который прячется после клика и разрешает запуск трекинга:
javascript
if (!getCookie('consent')) {
document.getElementById('consentBanner').style.display = 'block';
}
document.getElementById('consentAccept').addEventListener('click', () => {
setCookie('consent', '1', 180);
document.getElementById('consentBanner').style.display = 'none';
// здесь запускаем пиксели и аналитику
});
Как собрать это в связку
- Сначала — трекинг. Проброс параметров и передача данных подключаются первыми: без них оптимизация слепа.
- Потом — конверсия. Таймер, соцдоказательства, промокод и персонализация добавляют по одному и тестируют влияние на CR.
- Затем — переход. Механики перехода включают в последнюю очередь и только там, где источник это позволяет.
- Всегда — тест в реальном окружении. Особенно WebView и in-app: то, что работает в десктопном Chrome, может молча падать в приложении.
- Не складывайте всё сразу. Пять агрессивных механик на одной странице убивают доверие и метрики быстрее, чем поднимают конверсию.
Итог: короткий чек-лист
- Параметры доезжают до оффера — проверено.
- События дублируются на сервере (CAPI/server-side), а не только в браузере.
- Таймер и соцдоказательства выглядят живо, а не фальшиво.
- Скорость и Core Web Vitals в норме.
- Согласие настроено для Tier-1.
- Всё протестировано именно в том окружении, откуда идёт трафик.
Скрипты — не магия, а инструменты. В 2026 году выигрывает не тот, у кого их больше, а тот, кто собирает из них аккуратную, быструю и честную к трекингу связку.
Поделиться статьёй
Отправьте её в соцсети или скопируйте AI-промпт.



