Перейти к содержанию

Страница «Спасибо за заказ» для лендинга: шаблон на 25 языков

Готовая страница «Спасибо за заказ» для лендинга: 25 языков без библиотек, имя и телефон из заявки, noindex и событие Lead в пиксель Facebook без дублей…

Страница «Спасибо за заказ» для лендинга: шаблон на 25 языков

Страница «Спасибо за заказ» нужна, чтобы клиент понял: заявка дошла, скоро позвонят, телефон надо держать рядом. Ниже готовый шаблон для лендингов: один HTML-файл без внешних библиотек, 25 языков, показ имени и телефона из заявки, закрытие от индексации и событие Lead в пиксель Facebook без дублей.

Это обновлённая версия статьи 2025 года. Старая страница переводила тексты на лету через бесплатный API MyMemory и у англоязычных посетителей показывала вместо текста «PLEASE SELECT TWO DISTINCT LANGUAGES». Что ещё было не так, разобрано в конце.

Что должно быть на странице «Спасибо за заказ»

  • Подтверждение. Короткий заголовок: заказ принят.
  • Что будет дальше. Для офферов с подтверждением по телефону это главное: менеджер скоро позвонит, телефон нужно держать рядом.
  • Данные из заявки. Имя и номер, которые ушли в партнёрку. Клиент видит опечатку в номере и может отправить форму заново, пока не ушёл со страницы.
  • Кнопка назад к форме. Возвращает на лендинг тем же путём, которым клиент пришёл.
  • Язык лендинга. Если оффер на испанском, «спасибо» тоже на испанском, даже когда браузер у клиента английский.
  • Запрет индексации. Тег <meta name="robots" content="noindex">: по справке Google он закрывает страницу от всех поисковиков, которые поддерживают это правило.
  • Событие конверсии. Lead в пиксель, один раз на заявку.
Страница «Спасибо за заказ» на испанском и арабском языках
Шаблон в Chromium: испанская версия с данными заявки и арабская, которая выводится справа налево

Как устроен шаблон

  1. Лендинг при отправке формы сохраняет в sessionStorage имя, телефон и язык страницы, а при открытии ID пикселя и subid клика из Keitaro.
  2. api.php отправляет лид в партнёрку и перенаправляет клиента на success.html.
  3. success.html выбирает язык, показывает имя и телефон и один раз отправляет Lead в пиксель.

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

Шаг 1. Скрипт для лендинга

Вставьте в <head> лендинга:

<script>
  (function () {
    try {
      var p = new URLSearchParams(location.search);
      if (p.get('pxl')) sessionStorage.setItem('pxl', p.get('pxl'));
      var subid = '{subid}'; // Keitaro подставит subid клика
      if (subid.charAt(0) !== '{') sessionStorage.setItem('external_id', subid);
    } catch (e) {}
  })();
  document.addEventListener('submit', function (e) {
    var form = e.target;
    function val(name) {
      var el = form.querySelector('[name="' + name + '"]');
      return el ? el.value : '';
    }
    try {
      sessionStorage.setItem('lead_name', val('name'));
      sessionStorage.setItem('lead_phone', val('phone'));
      sessionStorage.setItem('lead_lang', document.documentElement.lang);
    } catch (err) {}
  });
</script>

{subid} Keitaro заменит на ID клика: плейсхолдеры подставляются в HTML локального лендинга, сам трекер в документации так же передаёт {subid} через скрытое поле формы. Если открыть лендинг не через трекер, строка останется {subid}, и скрипт её не сохранит. ID пикселя берётся из параметра pxl в адресе, как в статье про пиксель Facebook на sessionStorage.

Если на лендинге стоит маска телефона с кодом страны, она срабатывает раньше этого скрипта, и на страницу благодарности попадает номер в формате +34612345678. Мы проверили связку в браузере.

Шаг 2. Редирект из api.php

После успешной отправки лида в партнёрку достаточно одной строки редиректа:

<?php
// api.php: лид успешно отправлен в партнёрку
header('Location: success.html');
exit;

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

Шаг 3. Файл success.html

Положите файл в папку лендинга рядом с api.php. Внешних скриптов, шрифтов и картинок в нём нет: страница грузится одним запросом, не считая пикселя.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="robots" content="noindex, nofollow">
  <title>Thank you for your order</title>
  <style>
    * { box-sizing: border-box; }
    body {
      margin: 0;
      min-height: 100vh;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 16px;
      background: #f0f0f0;
      font-family: -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
      color: #2c3e50;
    }
    .card {
      width: 100%;
      max-width: 500px;
      padding: 32px 24px;
      background: #fff;
      border-radius: 20px;
      box-shadow: 0 8px 20px rgba(0, 0, 0, .15);
      text-align: center;
    }
    h1 { margin: 0 0 16px; font-size: 26px; color: #27ae60; }
    p { margin: 0 0 16px; font-size: 17px; line-height: 1.5; }
    .data { margin: 20px 0; padding: 0; list-style: none; text-align: start; }
    .data li { margin-bottom: 10px; padding: 14px; background: #f7f9fa; border-radius: 10px; font-size: 17px; }
    .hint { font-size: 15px; color: #555; }
    .button {
      display: inline-block;
      padding: 14px 28px;
      background: #2980b9;
      color: #fff;
      border-radius: 8px;
      text-decoration: none;
    }
    .button:hover { background: #1e6e99; }
  </style>
</head>
<body>
  <div class="card">
    <h1 data-i18n="h1">Thank you! Your order has been received</h1>
    <p data-i18n="text">Our manager will call you shortly to confirm the order. Please keep your phone nearby.</p>
    <ul class="data" id="data" hidden>
      <li><b data-i18n="name">Name</b>: <span id="name"></span></li>
      <li><b data-i18n="phone">Phone</b>: <span id="phone" dir="ltr"></span></li>
    </ul>
    <p class="hint" id="hint" data-i18n="check" hidden>Made a mistake in your details? Go back and submit the form again.</p>
    <a class="button" id="back" href="./" data-i18n="back">Back to the form</a>
  </div>

  <script>
    var I18N = {
      en: { title: 'Thank you for your order', h1: 'Thank you! Your order has been received',
        text: 'Our manager will call you shortly to confirm the order. Please keep your phone nearby.',
        name: 'Name', phone: 'Phone', check: 'Made a mistake in your details? Go back and submit the form again.',
        back: 'Back to the form' },
      ru: { title: 'Спасибо за заказ', h1: 'Спасибо! Ваш заказ принят',
        text: 'Наш менеджер скоро позвонит вам, чтобы подтвердить заказ. Пожалуйста, держите телефон рядом.',
        name: 'Имя', phone: 'Телефон', check: 'Ошиблись в данных? Вернитесь назад и отправьте форму ещё раз.',
        back: 'Вернуться к форме' },
      es: { title: 'Gracias por su pedido', h1: '¡Gracias! Hemos recibido su pedido',
        text: 'Nuestro asesor le llamará en breve para confirmar el pedido. Por favor, tenga el teléfono a mano.',
        name: 'Nombre', phone: 'Teléfono', check: '¿Hay un error en sus datos? Vuelva atrás y envíe el formulario de nuevo.',
        back: 'Volver al formulario' },
      pt: { title: 'Obrigado pelo seu pedido', h1: 'Obrigado! Recebemos o seu pedido',
        text: 'Em breve entraremos em contato por telefone para confirmar o pedido. Mantenha o telefone por perto.',
        name: 'Nome', phone: 'Telefone', check: 'Errou algum dado? Volte e envie o formulário novamente.',
        back: 'Voltar ao formulário' },
      fr: { title: 'Merci pour votre commande', h1: 'Merci ! Votre commande a bien été reçue',
        text: 'Notre conseiller vous appellera bientôt pour confirmer la commande. Gardez votre téléphone à portée de main.',
        name: 'Nom', phone: 'Téléphone', check: 'Une erreur dans vos coordonnées ? Revenez en arrière et renvoyez le formulaire.',
        back: 'Retour au formulaire' },
      de: { title: 'Vielen Dank für Ihre Bestellung', h1: 'Vielen Dank! Ihre Bestellung ist eingegangen',
        text: 'Unser Berater ruft Sie in Kürze an, um die Bestellung zu bestätigen. Bitte halten Sie Ihr Telefon bereit.',
        name: 'Name', phone: 'Telefon', check: 'Fehler in Ihren Angaben? Gehen Sie zurück und senden Sie das Formular erneut.',
        back: 'Zurück zum Formular' },
      it: { title: 'Grazie per il tuo ordine', h1: 'Grazie! Abbiamo ricevuto il tuo ordine',
        text: "Un nostro operatore ti chiamerà a breve per confermare l'ordine. Tieni il telefono a portata di mano.",
        name: 'Nome', phone: 'Telefono', check: 'Hai inserito dati errati? Torna indietro e invia di nuovo il modulo.',
        back: 'Torna al modulo' },
      pl: { title: 'Dziękujemy za zamówienie', h1: 'Dziękujemy! Twoje zamówienie zostało przyjęte',
        text: 'Nasz konsultant wkrótce zadzwoni, aby potwierdzić zamówienie. Prosimy mieć telefon pod ręką.',
        name: 'Imię', phone: 'Telefon', check: 'Pomyłka w danych? Wróć i wyślij formularz ponownie.',
        back: 'Wróć do formularza' },
      ro: { title: 'Vă mulțumim pentru comandă', h1: 'Vă mulțumim! Comanda dumneavoastră a fost primită',
        text: 'Un consultant vă va suna în curând pentru a confirma comanda. Vă rugăm să țineți telefonul aproape.',
        name: 'Nume', phone: 'Telefon', check: 'Ați greșit datele? Reveniți și trimiteți formularul din nou.',
        back: 'Înapoi la formular' },
      cs: { title: 'Děkujeme za objednávku', h1: 'Děkujeme! Vaše objednávka byla přijata',
        text: 'Náš operátor vám brzy zavolá, aby objednávku potvrdil. Mějte prosím telefon u sebe.',
        name: 'Jméno', phone: 'Telefon', check: 'Spletli jste se v údajích? Vraťte se zpět a odešlete formulář znovu.',
        back: 'Zpět na formulář' },
      hu: { title: 'Köszönjük a rendelését', h1: 'Köszönjük! Rendelését megkaptuk',
        text: 'Munkatársunk hamarosan felhívja, hogy megerősítse a rendelést. Kérjük, tartsa kéznél a telefonját.',
        name: 'Név', phone: 'Telefon', check: 'Elírta az adatait? Lépjen vissza, és küldje el újra az űrlapot.',
        back: 'Vissza az űrlaphoz' },
      bg: { title: 'Благодарим ви за поръчката', h1: 'Благодарим ви! Поръчката ви е приета',
        text: 'Наш консултант ще ви се обади скоро, за да потвърди поръчката. Моля, дръжте телефона си наблизо.',
        name: 'Име', phone: 'Телефон', check: 'Грешка в данните? Върнете се назад и изпратете формуляра отново.',
        back: 'Обратно към формуляра' },
      el: { title: 'Ευχαριστούμε για την παραγγελία σας', h1: 'Ευχαριστούμε! Η παραγγελία σας ελήφθη',
        text: 'Ένας σύμβουλός μας θα σας καλέσει σύντομα για να επιβεβαιώσει την παραγγελία. Παρακαλούμε κρατήστε το τηλέφωνό σας κοντά σας.',
        name: 'Όνομα', phone: 'Τηλέφωνο', check: 'Κάνατε λάθος στα στοιχεία σας; Επιστρέψτε και στείλτε ξανά τη φόρμα.',
        back: 'Επιστροφή στη φόρμα' },
      et: { title: 'Täname tellimuse eest', h1: 'Aitäh! Teie tellimus on vastu võetud',
        text: 'Meie konsultant helistab teile peagi, et tellimus kinnitada. Palun hoidke telefon käepärast.',
        name: 'Nimi', phone: 'Telefon', check: 'Kas andmetes on viga? Minge tagasi ja saatke vorm uuesti.',
        back: 'Tagasi vormi juurde' },
      lv: { title: 'Paldies par pasūtījumu', h1: 'Paldies! Jūsu pasūtījums ir saņemts',
        text: 'Mūsu konsultants drīz jums piezvanīs, lai apstiprinātu pasūtījumu. Lūdzu, turiet tālruni tuvumā.',
        name: 'Vārds', phone: 'Tālrunis', check: 'Kļūda datos? Atgriezieties un nosūtiet veidlapu vēlreiz.',
        back: 'Atpakaļ uz veidlapu' },
      lt: { title: 'Ačiū už užsakymą', h1: 'Ačiū! Jūsų užsakymas gautas',
        text: 'Mūsų konsultantas netrukus paskambins, kad patvirtintų užsakymą. Prašome laikyti telefoną šalia.',
        name: 'Vardas', phone: 'Telefonas', check: 'Suklydote duomenyse? Grįžkite atgal ir išsiųskite formą dar kartą.',
        back: 'Grįžti į formą' },
      tr: { title: 'Siparişiniz için teşekkürler', h1: 'Teşekkürler! Siparişiniz alındı',
        text: 'Temsilcimiz siparişi onaylamak için kısa süre içinde sizi arayacak. Lütfen telefonunuzu yanınızda bulundurun.',
        name: 'Ad', phone: 'Telefon', check: 'Bilgilerinizde hata mı var? Geri dönüp formu tekrar gönderin.',
        back: 'Forma geri dön' },
      ar: { title: 'شكرًا لطلبك', h1: 'شكرًا لك! تم استلام طلبك',
        text: 'سيتصل بك أحد ممثلينا قريبًا لتأكيد الطلب. يرجى إبقاء هاتفك بالقرب منك.',
        name: 'الاسم', phone: 'الهاتف', check: 'هل أخطأت في بياناتك؟ ارجع وأرسل النموذج مرة أخرى.',
        back: 'العودة إلى النموذج' },
      hi: { title: 'आपके ऑर्डर के लिए धन्यवाद', h1: 'धन्यवाद! आपका ऑर्डर मिल गया है',
        text: 'ऑर्डर की पुष्टि के लिए हमारा प्रतिनिधि जल्द ही आपको कॉल करेगा। कृपया अपना फ़ोन पास रखें।',
        name: 'नाम', phone: 'फ़ोन', check: 'क्या आपकी जानकारी में कोई गलती है? वापस जाएँ और फ़ॉर्म दोबारा भेजें।',
        back: 'फ़ॉर्म पर वापस जाएँ' },
      id: { title: 'Terima kasih atas pesanan Anda', h1: 'Terima kasih! Pesanan Anda sudah kami terima',
        text: 'Petugas kami akan segera menelepon Anda untuk mengonfirmasi pesanan. Mohon siapkan ponsel Anda.',
        name: 'Nama', phone: 'Telepon', check: 'Ada kesalahan pada data Anda? Kembali dan kirim formulir sekali lagi.',
        back: 'Kembali ke formulir' },
      vi: { title: 'Cảm ơn bạn đã đặt hàng', h1: 'Cảm ơn bạn! Đơn hàng của bạn đã được tiếp nhận',
        text: 'Nhân viên của chúng tôi sẽ sớm gọi cho bạn để xác nhận đơn hàng. Vui lòng để điện thoại bên mình.',
        name: 'Họ tên', phone: 'Điện thoại', check: 'Bạn nhập sai thông tin? Hãy quay lại và gửi lại biểu mẫu.',
        back: 'Quay lại biểu mẫu' },
      kk: { title: 'Тапсырысыңыз үшін рахмет', h1: 'Рахмет! Тапсырысыңыз қабылданды',
        text: 'Тапсырысты растау үшін менеджеріміз жақын арада сізге қоңырау шалады. Телефоныңызды жаныңызда ұстаңыз.',
        name: 'Аты', phone: 'Телефон', check: 'Деректерде қате бар ма? Артқа оралып, форманы қайта жіберіңіз.',
        back: 'Формаға оралу' },
      uz: { title: 'Buyurtmangiz uchun rahmat', h1: 'Rahmat! Buyurtmangiz qabul qilindi',
        text: "Buyurtmani tasdiqlash uchun menejerimiz tez orada sizga qo'ng'iroq qiladi. Iltimos, telefoningizni yaqin joyda saqlang.",
        name: 'Ism', phone: 'Telefon', check: "Ma'lumotlarda xato bormi? Orqaga qayting va formani qayta yuboring.",
        back: 'Formaga qaytish' },
      az: { title: 'Sifarişiniz üçün təşəkkür edirik', h1: 'Təşəkkür edirik! Sifarişiniz qəbul edildi',
        text: 'Sifarişi təsdiqləmək üçün menecerimiz tezliklə sizə zəng edəcək. Zəhmət olmasa, telefonunuzu yaxında saxlayın.',
        name: 'Ad', phone: 'Telefon', check: 'Məlumatlarda səhv var? Geri qayıdın və formanı yenidən göndərin.',
        back: 'Formaya qayıt' },
      ka: { title: 'გმადლობთ შეკვეთისთვის', h1: 'გმადლობთ! თქვენი შეკვეთა მიღებულია',
        text: 'შეკვეთის დასადასტურებლად ჩვენი მენეჯერი მალე დაგირეკავთ. გთხოვთ, ტელეფონი ახლოს იქონიოთ.',
        name: 'სახელი', phone: 'ტელეფონი', check: 'მონაცემებში შეცდომაა? დაბრუნდით უკან და ფორმა ხელახლა გააგზავნეთ.',
        back: 'ფორმაზე დაბრუნება' }
    };
    var DEFAULT_LANG = 'en';
    var RTL = ['ar', 'he', 'fa', 'ur'];

    function store(key) {
      try { return sessionStorage.getItem(key) || ''; } catch (e) { return ''; }
    }

    function pickLang(params) {
      var list = [params.get('lang'), store('lead_lang')].concat(navigator.languages || [navigator.language]);
      for (var i = 0; i < list.length; i++) {
        var code = String(list[i] || '').slice(0, 2).toLowerCase();
        if (I18N) return code;
      }
      return DEFAULT_LANG;
    }

    var params = new URLSearchParams(location.search);
    var lang = pickLang(params);
    var t = I18N[lang];

    document.documentElement.lang = lang;
    document.documentElement.dir = RTL.indexOf(lang) > -1 ? 'rtl' : 'ltr';
    document.title = t.title;
    document.querySelectorAll('[data-i18n]').forEach(function (el) {
      el.textContent = t[el.getAttribute('data-i18n')];
    });

    // имя и телефон: из адреса (старая схема) или из sessionStorage
    var name = params.get('name') || store('lead_name');
    var phone = params.get('phone') || store('lead_phone');
    if (name || phone) {
      document.getElementById('name').textContent = name;
      document.getElementById('phone').textContent = phone;
      document.getElementById('data').hidden = false;
      document.getElementById('hint').hidden = false;
    }
    // убираем личные данные из адресной строки и истории
    if (params.has('name') || params.has('phone')) {
      params.delete('name');
      params.delete('phone');
      var rest = params.toString();
      history.replaceState(null, '', location.pathname + (rest ? '?' + rest : ''));
    }

    // назад к форме: если пришли с лендинга, возвращаемся по истории, иначе по ссылке
    document.getElementById('back').addEventListener('click', function (e) {
      if (document.referrer && history.length > 1) {
        e.preventDefault();
        history.back();
      }
    });

    // Facebook Pixel: событие Lead один раз на заявку
    (function () {
      var pixelId = store('pxl');
      var eventId = store('external_id');
      if (!pixelId || (eventId && store('pxl_sent') === eventId)) return;
      var url = 'https://www.facebook.com/tr?id=' + encodeURIComponent(pixelId) + '&ev=Lead&noscript=1';
      if (eventId) url += '&eid=' + encodeURIComponent(eventId);
      new Image(1, 1).src = url;
      try { sessionStorage.setItem('pxl_sent', eventId); } catch (e) {}
    })();
  </script>
</body>
</html>

Как выбирается язык

Скрипт проверяет источники по порядку и берёт первый язык, для которого есть перевод:

ИсточникПримерКогда пригодится
Параметр lang в адресеsuccess.html?lang=esЯзык задаёт api.php или лендинг на другом домене
Язык лендинга<html lang="es"> на лендингеОсновной вариант, работает со скриптом из шага 1
Языки браузераnavigator.languagesЕсли лендинг не указал язык
Язык по умолчаниюDEFAULT_LANG = 'en'Если ничего не подошло
Таблица прокручивается вбок

navigator.languages по описанию MDN возвращает языки пользователя в порядке предпочтения. Скрипт берёт из каждого тега две первые буквы, поэтому pt-BR и pt-PT получат один португальский текст. Для арабского выставляется dir="rtl", иначе арабский текст выводится слева направо и знаки препинания встают не на своё место.

В шаблоне 25 языков: английский, русский, испанский, португальский, французский, немецкий, итальянский, польский, румынский, чешский, венгерский, болгарский, греческий, эстонский, латышский, литовский, турецкий, арабский, хинди, индонезийский, вьетнамский, казахский, узбекский, азербайджанский и грузинский. Чтобы добавить язык, скопируйте любой блок в объекте I18N, поменяйте двухбуквенный код и переведите семь строк. Тексты мы переводили сами, перед запуском на новое ГЕО покажите их носителю языка. Про перевод самого лендинга есть отдельная статья: локализация лендингов под ГЕО.

Имя и телефон: почему не в адресе

Старая версия получала имя и телефон параметрами ?name=…&phone=…. Такой адрес остаётся в истории браузера и в логах сервера. Новый шаблон берёт данные из sessionStorage, а если они всё же пришли в адресе, показывает их и сразу убирает из адресной строки через history.replaceState. Остальные параметры, например lang и UTM-метки, остаются.

Значения выводятся через textContent, поэтому HTML в параметрах не выполнится: строку <img src=x onerror=alert(1)> страница покажет как текст.

Пиксель Facebook на странице спасибо

Не ставьте этот блок одновременно с другим кодом, который уже отправляет Lead со страницы благодарности. Пример не содержит управления согласием посетителя и подтверждения доставки события Meta. При недоступном хранилище или отсутствующем ID защита от повторов ограничена.

Событие Lead отправляется картинкой-пикселем. ID события передаётся в параметре eid: так он называется в инструкции Meta по дедупликации для пикселя в теге img. По той же инструкции событие из браузера и из Conversions API считаются дублями, если совпадают имя события и ID. В качестве ID шаблон берёт subid клика из Keitaro. Серверная часть описана в статье Keitaro и Facebook Conversions API.

Чтобы обновление страницы не давало второй Lead, шаблон запоминает отправленный ID в sessionStorage и при повторном открытии событие не шлёт. Если пикселя в sessionStorage нет, блок просто ничего не делает.

Что было не так со старой версией

Старый код из статьи 2025 года мы запустили в headless Chromium с языками браузера en-US, de-DE и ru-RU. Вот что нашли и как это исправлено:

ПроблемаЧто былоКак сейчас
Английский браузерСтраница запрашивала у MyMemory перевод с английского на английский и получала ответ «PLEASE SELECT TWO DISTINCT LANGUAGES». Он попадал в заголовок, текст и кнопкуПереводы лежат в файле, внешних запросов нет
СкоростьШесть запросов к MyMemory на каждый показ, страница скрыта, пока не придут ответыТексты подставляются сразу
Библиотекиi18next, jQuery и jquery-i18next ради шести строкОбычный JavaScript
Ссылка в текстеПосле перевода ссылка «Back to Home» внутри абзаца пропадалаСсылки в переводимых строках нет, кнопка отдельная
Ошибка в консолиСкрипт пикселя в <head> вызывал document.body.appendChild до появления body: «Cannot read properties of null»Пиксель создаётся через new Image() без вставки в страницу
ID событияПараметр event_id в ссылке пикселяeid, как в документации Meta
Повторный LeadКаждое обновление страницы отправляло событиеОдно событие на ID
ИндексацияТега noindex не былоЕсть
Таблица прокручивается вбок
Старая страница спасибо в английском браузере выводит PLEASE SELECT TWO DISTINCT LANGUAGES, новая выводит нормальный текст
Старый код в английском браузере просил сервис перевода перевести английский на английский и показывал ответ с ошибкой

Новый шаблон прошёл 27 проверок в том же браузере: выбор языка для семи локалей, приоритет ?lang, очистка адреса, вывод данных как текста, полный путь лендинг, api.php, success.html с маской телефона, одно событие Lead с eid и возврат на лендинг по кнопке.

Частые вопросы

Что написать на странице «Спасибо за заказ»?

Что заказ принят, что будет дальше и что для этого нужно от клиента. Для офферов с подтверждением по телефону это звонок менеджера и просьба держать телефон рядом. Покажите имя и номер из заявки, чтобы клиент успел исправить опечатку.

Нужно ли закрывать страницу благодарности от индексации?

Да. Без заявки страница посетителю ничего не даёт, а в выдаче она только собирает случайные визиты. Тег noindex в шаблоне уже стоит.

Как подключить thank you page к лендингу в Keitaro?

Положите success.html в архив лендинга рядом с api.php, добавьте на лендинг скрипт из шага 1, а в api.php после отправки лида сделайте редирект на success.html.

Почему страница открывается не на языке лендинга?

Проверьте атрибут lang у тега <html> на лендинге и то, что скрипт из шага 1 стоит на странице. Если лендинг на другом домене, передайте язык в адресе: success.html?lang=es.

Сработает ли пиксель дважды, если клиент обновит страницу?

Нет. Шаблон запоминает ID отправленного события и повторно его не шлёт. Если subid не сохранился, защиты от повтора нет, поэтому проверьте, что лендинг открывается через кампанию Keitaro.

Редакция BoostClicks

Материалы о настройке рекламы, трекинге и автоматизации: инструкции, примеры кода и расчёты с указанием условий проверки.