Скрипт подмены номера телефона для отслеживания источников трафика

Зачем подменять телефонный номер?

Рано или поздно вам захочется сэкономить на рекламе, оптимизировав неэффективные рекламные кампании или вовсе отключив их. А, может быть, вам придётся запустить новый инструмент привлечения трафика. В любом случае вам понадобится статистика обращений с сайта.

Если с письмами всё более менее понятно — настроили цели в Google Analytics или Яндекс.Метрике и получили нужные цифры, то с телефонами обычно беда — как отделить звонки с поискового трафика от звонков с контекстной рекламы или e-mail рассылки, не спрашивая у звонящего, по какой рекламе он перешёл на сайт? Решение уже давно не новое и до безобразия простое.

Подмена номера телефона с помощью JS

Нам понадобится…

  1. Несколько телефонных номеров (количество номеров будет зависеть от того, на сколько групп вы хотите разделить звонящих).
  2. Простой скрипт, который мы установим на сайте
  3. Секретарша, которая будет вести учёт звонков по каждому номеру (либо crm система, которая делает это автоматически)

С пунктами 1 и 3 вроде всё просто. Ну, а простенький скрипт подмены номера я раздаю. Сразу оговорюсь — это самая простая версия скрипта и она подойдёт не под все задачи. Но, думаю, для большинства случаев он вполне сгодится.

Логика работы скрипта

  1. Смотрим Referer (с какой страницы пришёл посетитель) для того, чтобы определить, не пришёл ли он с результатов поиска
  2. Смотрим URL страницы, на которую попал посетитель и по utm-меткам определяем источник трафика
  3. Если посетитель пришёл из интересного нам источника, меняем телефонный номер на нужный нам
  4. Записываем в cookies источник трафика для того, чтобы, гуляя по сайту или придя в следующий раз напрямую, посетитель всегда видел этот же номер (до тех пор пока он не придёт с другого интересного нам источника).

Как установить скрипт

  1. Добавить в корень сайта файл с именем phone-replace.js. Содержимое файла:

    Тут потребуется небольшая настройка: в строках 7-10 в кавычках нужно вписать соответствующие телефонные номера для разных источников трафика.
  2. Добавить между <head> и </head>:
  3. Добавить в php код, который исполняется на каждой странице до вывода чего-либо на экран (довольно часто это index.php, который лежит в корне сайта.) следующее:

    В строках 4-6 нужно указать, какие фрагменты скрипт должен искать в URI, на который попадает человек, заходя на сайт.

    Подразумевается, что в URI есть какие-то зацепки типа UTM-меток. В моём примере наличие в URI «utm_medium=cpc» говорит о том, что посетитель пришёл по контекстной рекламе, «utm_medium=email» — по e-mail рассылке, «utm_campaign=Remarketing» — по ремаркетингу.

    Поскольку у контекстной рекламы и у ремаркетинга метка utm_medium обычно одинаковая, для ремаркетинга я взял кусок строки из utm_campain.

  4. В шаблоне сайта указать контейнерам, содержащим телефонный номер, класс «phone_container»: phone-all
  5. Проверить работоспособность.

Чтобы вам было проще разобраться, можете забрать подарок — рабочий пример скрипта.

Ссылка для скачивания
Замечания по работе скрипта оставляйте в комментариях.

  • Ivan Kovalko

    Проверил, не работает 🙁

    • Я проверял на своём проекте — работает.

      Возможно, Вы что-то не донастроили или сделали неправильные выводы (например, скрипт не будет срабатывать, если посетитель пользовался безопасным поиском гугла — это допустимая погрешность) или у Вас на странице конфликтуют js скрипты (например, подключены 2 разные версии jquery).

      Если дадите ссылку на сайт с установленным скриптом, постараюсь помочь.

      • Ivan Kovalko

        Спасибо за скрипт 🙂
        Почти работает 🙂

        Наконец, все работает. Только вот одна проблемка, как и с другим скриптом. В Ваших исходниках ничего не менял.

        Если вводить ссылку, _http://korporativ.kh.ua/?utm_source=adwords&utm_medium=cpc&utm_campaign=kampaniya-gruppa&utm_content=soderzanie то подмена номера успешно совершается.

        Если же у меня маркируется ссылка на подстраницу сайта, к примеру _http://korporativ.kh.ua/special-report?utm_source=adwords&utm_medium=cpc&utm_campaign=kampaniya-gruppa&utm_content=soderzanie тогда подмена номера действует только на этой странице, больше нигде 🙁

        Может быть проблема в том, что он сохраняет в куки источник как «korporativ.kh.ua/special-report», но если убрать вторую часть, то куки уже не реагируют.

        Как мне быть с данным делом.

        • Вы правы — была ошибка (куки работали только для конкретной страницы, т.к. в функции setcookie() забыл указать один параметр).

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

          Спасибо за наблюдательность.

          • Ivan Kovalko

            Спасибо! Все отлично работает!
            Огромное спасибо, если подскажите еще по плагину для wp. 🙂

            «easy timer»

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

            Но вот какая незадача, таймер куки запоминает для каждой страницы отдельно. Получается куча таймеров и куков… 🙁 А было бы отлично его прикрепить fixed на каждой странице.. Что можно поменять? Выписал участки с куками

            {easy-timer.php}
            $easy_timer_cookies = array();

            function easy_timer_cookies_js() {

            global $easy_timer_cookies;

            if (function_exists(‘date_default_timezone_set’)) { date_default_timezone_set(‘UTC’); }

            $T = time();

            $U = $T + 86400*easy_timer_data(‘cookies_lifetime’);

            $expiration_date = date(‘D’, $U).’, ‘.date(‘d’, $U).’ ‘.date(‘M’, $U).’ ‘.date(‘Y’, $U).’ ‘.date(‘H:i:s’, $U).’ UTC’;

            if (!empty($easy_timer_cookies)) { echo ».»n»; }

            foreach ($easy_timer_cookies as $id) { echo ‘document.cookie=»first-visit-‘.$id.’=’.$T.’; expires=’.$expiration_date.'»;’.»n»; }

            if (!empty($easy_timer_cookies)) { echo ».»n»; } }

            if (easy_timer_data(‘javascript_enabled’) == ‘yes’) { add_action(‘wp_footer’, ‘easy_timer_cookies_js’); }

            __________________________________________________
            {initial-options.php}
            if ((substr($date, 0, 1) == ‘-‘) || (strstr($date, ‘//-‘)) || (strstr($date, ‘+’))) {

            if (($origin == ‘first-visit’) && (!isset($_COOKIE[‘first-visit-‘.$id]))) { global $easy_timer_cookies; $easy_timer_cookies[$id] = $id; } }

            if (($origin == ‘first-visit’) && (isset($_COOKIE[‘first-visit-‘.$id]))) { $origin_time = $_COOKIE[‘first-visit-‘.$id]; }

            else { $origin_time = $time; }

            ____________________________________________________

            Здесь можно что-то поменять?

            • Вот в этом фрагменте создаётся кука:

              echo ‘document.cookie=»first-visit-‘.$id.’=’.$T.’; expires=’.$expiration_date.'»;’ . «n»;

              Чтобы получить то, что Вы хотите, по идее в нём не хватает параметра path=/ (т.е. кука должна работать для всего сайта).

              Если ничего не путаю, то нужно написать так:

              echo ‘document.cookie=»first-visit-‘.$id.’=’.$T.’; expires=’.$expiration_date.’; path=/;» . «n»;

              • Ivan Kovalko

                оупс

                Parse error: syntax error, unexpected $end in /home/denrojde/public_html/wp-content/plugins/easy-timer/easy-timer.php on line 124 (это последняя строка документа)

                Весь файл .php:

                define(‘EASY_TIMER_URL’, plugin_dir_url(__FILE__));

                $plugin_data = get_file_data(__FILE__, array(‘Version’ => ‘Version’));

                define(‘EASY_TIMER_VERSION’, $plugin_data[‘Version’]);

                if (is_admin()) { include_once dirname(__FILE__).’/admin.php’; }

                function install_easy_timer() { include dirname(__FILE__).’/install.php’; }

                register_activation_hook(__FILE__, ‘install_easy_timer’);

                $easy_timer_options = get_option(‘easy_timer’);

                if (((is_multisite()) || ($easy_timer_options)) && ((!isset($easy_timer_options[‘version’]))

                || ($easy_timer_options[‘version’] != EASY_TIMER_VERSION))) { install_easy_timer(); }

                $easy_timer_js_attribute = ‘id’; $easy_timer_js_extension = »;

                if (stristr($_SERVER[‘HTTP_USER_AGENT’], ‘MSIE’)) { $easy_timer_js_attribute = ‘title’; $easy_timer_js_extension = ‘-ie’; }

                $easy_timer_cookies = array();

                function easy_timer_cookies_js() {

                global $easy_timer_cookies;

                if (function_exists(‘date_default_timezone_set’)) { date_default_timezone_set(‘UTC’); }

                $T = time();

                $U = $T + 86400*easy_timer_data(‘cookies_lifetime’);

                $expiration_date = date(‘D’, $U).’, ‘.date(‘d’, $U).’ ‘.date(‘M’, $U).’ ‘.date(‘Y’, $U).’ ‘.date(‘H:i:s’, $U).’ UTC’;

                if (!empty($easy_timer_cookies)) { echo ».»n»; }

                foreach ($easy_timer_cookies as $id) { echo ‘document.cookie=»first-visit-‘.$id.’=’.$T.’; expires=’.$expiration_date.'»;’.»n»;}

                if (!empty($easy_timer_cookies)) { echo ».»n»; } }

                if (easy_timer_data(‘javascript_enabled’) == ‘yes’) { add_action(‘wp_footer’, ‘easy_timer_cookies_js’); }

                function easy_timer_data($atts) {

                global $easy_timer_options;

                if (is_string($atts)) { $field = $atts; $default = »; $filter = »; }

                else {

                $field = (isset($atts[0]) ? $atts[0] : »);

                $default = (isset($atts[‘default’]) ? $atts[‘default’] : »);

                $filter = (isset($atts[‘filter’]) ? $atts[‘filter’] : »); }

                $field = str_replace(‘-‘, ‘_’, easy_timer_format_nice_name($field));

                if ($field == ») { $field = ‘version’; }

                $data = (isset($easy_timer_options[$field]) ? $easy_timer_options[$field] : »);

                $data = (string) do_shortcode($data);

                if ($data == ») { $data = $default; }

                $data = easy_timer_filter_data($filter, $data);

                return $data; }

                function easy_timer_filter_data($filter, $data) {

                if (is_string($filter)) { $filter = preg_split(‘#[^a-zA-Z0-9_]#’, str_replace(‘-‘, ‘_’, $filter), 0, PREG_SPLIT_NO_EMPTY); }

                if (is_array($filter)) { foreach ($filter as $function) { $data = easy_timer_string_map($function, $data); } }

                return $data; }

                function easy_timer_format_nice_name($string) {

                $string = easy_timer_strip_accents(strtolower(trim(strip_tags($string))));

                $string = str_replace(‘ ‘, ‘-‘, $string);

                $string = preg_replace(‘/[^a-zA-Z0-9_-]/’, », $string);

                return $string; }

                function easy_timer_i18n($string) {

                load_plugin_textdomain(‘easy-timer’, false, ‘easy-timer/languages’);

                return __(__($string), ‘easy-timer’); }

                function easy_timer_string_map($function, $string) {

                if (!function_exists($function)) { $function = ‘easy_timer_’.$function; }

                if (function_exists($function)) { $array = array_map($function, array($string)); $string = $array[0]; }

                return $string; }

                function easy_timer_strip_accents($string) {

                return str_replace(

                explode(‘ ‘, ‘á à â ä ã å ç é è ê ë í ì î ï ñ ó ò ô ö õ ø ú ù û ü ý ÿ Á À Â Ä Ã Å Ç É È Ê Ë Í Ì Î Ï Ñ Ó Ò Ô Ö Õ Ø Ú Ù Û Ü Ý Ÿ’),

                explode(‘ ‘, ‘a a a a a a c e e e e i i i i n o o o o o o u u u u y y A A A A A A C E E E E I I I I N O O O O O O U U U U Y Y’),

                $string); }

                for ($i = 0; $i < 4; $i++) {

                foreach (array('counter', 'countdown', 'countup') as $tag) {

                add_shortcode($tag.($i == 0 ? '' : $i), create_function('$atts, $content', 'include_once dirname(__FILE__)."/shortcodes.php"; return '.$tag.'($atts, $content);')); } }

                foreach (array('clock', 'isoyear', 'monthday', 'month', 'timezone', 'weekday', 'yearday', 'yearweek', 'year') as $tag) {

                add_shortcode($tag, create_function('$atts', 'include_once dirname(__FILE__)."/shortcodes.php"; return '.$tag.'($atts);')); }

                add_shortcode('easy-timer', 'easy_timer_data');

                foreach (array(

                'get_the_excerpt',

                'get_the_title',

                'single_post_title',

                'the_excerpt',

                'the_excerpt_rss',

                'the_title',

                'the_title_attribute',

                'the_title_rss',

                'widget_text',

                'widget_title') as $function) { add_filter($function, 'do_shortcode'); }

                • Обычно такая ошибка возникает, когда что-то не закрыто (например, условие в if).

                  Вообще по вопросам программирования лучше обратиться на специализированные форумы. У меня немного другая специализация =)

                  • Ivan Kovalko

                    у меня тоже интернет-маркетинг 🙂
                    спасибо 🙂

              • Ivan Kovalko

                тут плагин в действии (в кнопке внизу)
                _http://den-rozhdeniya.event-agency.org/kiev/

                сквозным офром не получается 🙁

  • eugene

    А смысл делать часть на PHP, разве на JS нельзя полностью получать referrer и ставить куку?

    • Можно. Но так объём js кода меньше, а, значит, страница чуть быстрее загружается.

  • appolinairya

    Сасибо огромное за такой замечательный мануал! а ссылка на скачивание скрипта еще активна?

    • естественно ))

      • appolinairya

        Надо авторизоваться, не иначе?)

        • Чтобы скачать пример использования, достаточно просто поставить лайк в любой из предложенных социальных сетей.

          Либо можно самостоятельно скопировать код по инструкции выше.

          • appolinairya

            Да, лайк поставила, но активную ссылку скачать так и не увидела. Копировать уже начала, но не оч удобно т.к. мне все это еще надо передать веб-мастеру)

            • странно, вроде проверял, всё работало. раз так, снёс плагин. сейчас ссылка должна быть доступна без дополнительных действий.

              • appolinairya

                Появилась, скачала! Большое спасибо Вам!

  • Сергей

    Здравствуйте. Все установил. Номер не меняется. 1001-tour.com.ua
    Сможете помочь?

    • Есьт какой-то конфликт у этих двух файлов:

      /templates/yoo_master/warp/libraries/jquery/jquery.js
      //ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js

      Когда подключаю на своём тестовом сайте /templates/yoo_master/warp/libraries/jquery/jquery.js — тоже перестаёт работать.

  • Andriy Lesjuk

    Вот неплохой сервис по подмене номера sip-ring.com

  • Алена

    Добрый день! А бывает часто что у пользователей выключен JS(в настройках браузера), ведь есть вероятность потери звонков из-за выключенного JS, тогда код не будет работать.
    Неподскажите как тогда быть? Как вместо файла phone-replace.js использовать php.

    • К счастью это бывает уже совсем не часто, но вопрос очень правильный.

      Просто в блоке, содержимое которого будет меняться на виртуальный номер (в моём примере это phone_container), нужно изначально выводить рабочий номер телефона, который будет отображаться даже при отключённом js.

      Звонки пропадать не будут. Будет маленькая погрешность в статистике.

      • Алена

        Евгений, спасибо за ответ.
        Но все же не могли бы Вы написать пример, как вместо файла phone-replace.js использовать php код.

        • С этой задачей Вам лучше обратиться к программисту.

  • Digital Cameras

    а как сделать что бы меняло 2 телефона? у нас на сайте 2 телефона

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

      задать доп номера вначале

      var remarketing = ‘000-00-00’;
      var remarketing2 = ‘111-11-11’;

      и добавить указания — в каких контейнерах какие переменные выводить.

      if ( source == ‘remarketing’ ) { phone = remarketing; phone2 = remarketing2;}

      в этом примере в контейнере с классом phone появится содержимое переменной remarketing, а в контейнере с классом phone2 — содержимое переменной remarketing2

  • Алексей

    Здравствуйте.
    Пожалуйста, подскажите куда вставить Ваш скрипт?

    Каталог для распечатки

    400075, г. Волгоград,

    ул. Историческая, 179

    +7 (8442) 22-21-21, 22-22-31

    +7 937 549-90-02

    e-mail: info@vzvt.net

    В числе наших клиентов

    Заранее спасибо, за ответ.

  • Алексей

    Здравствуйте.

  • Алексей

    Пожалуйста, подскажите куда вставить Ваш скрипт?
    Каталог для распечатки

    400075, г. Волгоград,

    ул. Историческая, 179

    +7 (8442) 22-21-21, 22-22-31

    +7 937 549-90-02

    e-mail: info@vzvt.net

    В числе наших клиентов

    Заранее спасибо, за ответ.

  • Царь Иван

    Скрипт не работает, несколько раз перезагрузился, ничего не помогает. Хотел денег заработать на вашем решении. Плохо, сударь, пишете скрипты!

    • Хоть я и не считаю себя программистом, скрипт работает. Проверено на нескольких сайтах. Суда по тому, что Вы пытались перезагружать компьютер, Вы искали какой-то софт, подменяющий исходящий номер. Если Вы внимательно прочтёте статью, то поймёте, что задача у моего скрипта совсем другая. С наступающим!

  • Павел

    Спасибо за скрипт! Всё замечательно работает!!!

  • ProfComServ

    Здравствуйте дорогие друзья!

    Первый профессиональный сервис, представляет Вашему вниманию услуги по телефонным атакам на различные телефоны мира.

    Блокировка звонками стационарных, мобильных, многоканальных телефонов, а так же 8-800 и любых других номеров мира!

    Что такое Телефонный флуд?

    Флуд (от англ. flood — наводнение, затопление.)

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

    Мы полностью останавливаем работу атакуемого ресурса в результате чего, телефон перестает работать на время пока идет атака.

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

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

    Для чего нужна Телефонная атака?

    — Для блокировки телефонов фирм и частных лиц. Просто и эффективно.

    — Вас кто то обидел или надоедает Вам? Мы поможем поквитаться!

    — Хотите разыграть Ваших знакомых? Это отличный способ.

    — Желаете заблокировать телефоны конкурентам? Легко!

    — И многое другое…

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

    И это только малая часть выгодных моментов которые Вы получите заказав у нас Телефонную атаку.

    Как это работает:

    На телефон атакуемого абонента идет звонок.

    Если абонент принимает вызов, то идет сброс и следует повторный вызов. (Вместо непрерывного сбрасывания можно проигрывать Вашу аудиозапись.)

    Если абонент сбрасывает или занят, то так же идет повторный вызов.

    Если абонент отключит телефон, звонки продолжат поступать.

    Как только абонент включит телефон моментально пойдут звонки.

    В результате абонент полностью лишается возможности пользоваться своим телефоном.

    Обращайтесь к нам и Вам помогут! Наши дружелюбные операторы ответят на все Ваши вопросы.

    Какой эффект мы получаем в итоге:

    До абонента невозможно дозвониться. Гарантия 99%!!!

    Каковы преимущества нашего предложения?

    1. Делаем бесплатный 20-ти минутный тест перед началом атаки.

    2. Можем атаковать одновременно любое запрашиваемое Вами количество номеров!!!

    3. У нас есть подмена номера. Вы можете дать нам список телефонов, с которых будут поступать звонки!!!

    4. Многопоточность звонков позволяет полностью блокировать

    телефонный канал абонента.

    5. Наш флуд стабилен и сбоев не дает!

    6. Мы можем работать по Вашему расписанию.

    7. Используем профессиональное программное обеспечение. Самые совершенные технологии и разработки в данной сфере.

    8. Опыт. Мы постоянно совершенствуем наши технологии в данной сфере и применяем новые современные решения.

    9. Вместо непрерывного сбрасывания можно проигрывать Вашу аудиозапись.

    10. Наш персонал качественно осуществляет мониторинг атакуемого объекта. Мониторинг цели гарантирован!

    11. Оперативная помощь в решении Ваших проблем — наш support в сети круглые сутки, 7 дней в неделю!

    12. Анонимность гарантируется! Вы можете быть полностью уверены, что данные о вашем заказе не попадут к третьим лицам.

    13. Предоставляем сервер без логирования и программы для анонимного общения. Никто никогда не узнает о чем мы с Вами договариваемся и какие заказы выполняем.

    14. При возникновении каких-либо проблем делаем возврат средств. Или если заказчик отказался уже в процессе работы, делаем возврат средств за оставшиеся время.

    Услуги оказываются по правилам.

    Наши цены:

    от 100 рублей за час *

    от 600 рублей за день *

    от 4000 рублей в неделю *

    Больше недели обсуждать с support’ом.

    *Цены могут меняться в зависимости от степени сложности заказа.

    **Предоставляем бесплатный 20-минутный тест каждому клиенту.

    ***Цены указаны для стандартной комплектации.

    ****Оставляем за собой право отказать в проведении теста без объяснения причин.

    Способ оплаты: По договоренности.

    Наши контакты для связи:

    Jabber: ProfComServ@exploit.im

    Mail: profcomserv@gmail.com

    Skype: profcomserv

    Icq: 999 4 666

    Других контактов нет.

    Гарантированное время приема заказов с 9:00 до 22:00, время по Москве.

    Гарант за счет клиента 100% на любом форуме!

    Пройдем проверку у администрации! Стучите в контакты!!!

    Мы работаем для Вас!!! Мы Вам поможем!!! Никто кроме нас!!!

  • Александр

    Самому нет желания копаться, но есть желание обернуть ваш скрипт в модули — что скажете?

    • Не понял, Вы хотите этим заняться или предлагаете мне это сделать?

      • Александр

        Нет конечно же, я имею ввиду я оберну, какие ваши условия при этом.

  • Евгений, поставил Ваш скрипт на сайт. Но не работает. Не подскажите в чем дело? arsenal-d.ru

    • Возможно, из-за того, что у вас одновременно подключены разные версии библиотеки jquery. 1 для работы моего скрипта, вторая — для ещё какого-то.

  • Евгений

    а как дальше обрабатываются эти данные?
    Надо иметь все эти номера физически или можно настроить связь с аналитиксом?

    • Обычно покупаются виртуальные номера и сервис, в котором Вы их покупаете даёт Вам CRM, где видно, сколько на какой номер позвонили. Что делать дальше — вопрос вкуса и бюджетов. Это может быть совмещение данных из analytics и CRM в excel, это может быть своя CRM, которая делает такие вещи автоматически. Как вариант — можно использовать виртуальные номера Яндекс.Метрики и в упрощённом варианте получать статистику в этой системе.

      • Александр

        А можно поподробнее?
        Про виртуальный номер и CRM. Хочу реализовать и отслеживать звонки

        • самый популярные, наверное, манго офис.

          если записи разговоров не нужны, можно использовать целевой звонок от Яндекс.Метрики

  • Игорь

    Здравствуйте! Все установил как написано. Как проверить работоспособность?Если нет размещенной рекламы. В этом немного не разбираюсь. Пробовал шаблон с метками вставлять в адресную строку, не меняется. Вот ссылка на сайт где установлено купим-ноутбуки-дорого.рф

    • Ну идея простая — сформировать полный URL, по которому зайдёт посетитель с рекламы и зайти по нему самостоятельно. Если подмена не работает, что-то настроено не так.

      • Игорь

        А тогда объясните сайт на локальном и на хостинге, оба идентичны. На локальном меняется номер, а на хостинге ни в какую. В чем может быть проблема?

        • Проверьте, подгружается ли файл JS и не подключена ли на хостинге ещё одна библиотека jquery — м.б. конфликт. А вообще тут Вам лучше поможет Ваш программист, т.к. гадать на кофейной гуще можно сколько угодно.

  • Иван Войлочников

    Здравствуйте!

    А как можно в данный скрипт добавить отслеживание трафика с конкретных сайтов?

    • Самый простой способ — заказать у программиста. К сожалению, данная версия скрипта предлагается «как есть». Это бесплатный вариант, который можно брать за основу или использовать в текущем варианте. Техподдержки нет. Спасибо за понимание.

  • Роман

    В файле phone-replace.js есть функция change, а в каком месте происходит вызов этой функции?

    • Она сама запускается при загрузке страницы. Реализовано через $(document).ready

  • Станислав

    Добрый день, Евгений. Спасибо за скрипт, всё работает!

    Но возник вопрос, что необходимо изменить в файле скрипта, для того, чтобы запись cookies производилась один раз по первому источнику?

    Т.е. если человек первоначально зашёл на сайт из контекстной рекламы, то ему постоянно показывался номер соответствующий ей. И в случае захода, допустим, с рассылки, телефон не подменялся.

    • нужно сделать проверку- если в куке уже есть источник трафика, то дальше ничего не проверять и не менять — выводить телефон на основе информации их куки.

  • А если у меня один источник — яндекс.директ, например? Как отследить, с какого ключевого запроса перешли и позвонили, а с какого нет? По логике данного скрипта нужно для каждого запроса привязывать свой номер телефона. Но правильнее же будет менять номер в зависимости от количества посетителей, одновременно находящихся на сайте, разве нет?

    • То, о чём Вы говорите, называется динамический кол-трекинг. Это более сложная технология, которая имеет свои преимущества и недостатки.

      Скрипт, который здесь предложен, — это простейшее решение, которое можно взять и использовать как есть, или взять за основу более сложного скрипта, или вообще не брать 😉

  • Руслан Евченко

    Евгений, огромное спасибо за мануал!
    У меня возник вопрос:
    на корневой странице все отрабатывает нормально,
    toner.pp.ua/?utm_medium=cpc
    Но если речь идет о утм метке для вложенной странице,
    toner.pp.ua/test/?utm_medium=cpc
    то ничего не меняется…не моли бы вы подсказать в чем проблема?
    Спасибо

    • У Вас, похоже, на странице /test/ не работает php-код от этого скрипта.

      • Руслан Евченко

        Спасибо, действительно, на дополнительных страницах не отрабатывает php!!!
        Протестил на joomla и wp все работает идеально!!!) Интересно как к таким манимпуляциям отнесется поисковая система (с точки зрения СЕО)

    • Руслан Евченко

      нашел решение, проблема была в моем сайте)

      • Руслан Евченко

        ничего интересного, описывать не буду

  • Руслан

    А если версия моего jquery 1.11.3 ваш скрипт будет работать?

  • Аноним

    А с чем связано, что php код надо так высоко вставлять? У меня получилось минимум в его заставить работать.

    Я просто вот боюсь за скорость загрузки страниц, хотелось как можно ниже.

    • Этот маленький скрипт записывает информацию об источнике в куки. Если до функции setcookie что-то выводится на экран, то функция не сработает.
      На скорость загрузки это никак не повлияет.

  • У меня установлен последний jquery с ним не работает, как быть?

    • Можете попробовать использовать плагин jQuery Migrate

  • Олег

    Евгений, добрый день!

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

    • Добрый день. Может быть проблема с версиями jquery.

  • Anna Moskalchuk

    Евгений, здравствуйте! Подскажите, пожалуйста, как сделать телефон, на который мы заменяем через js, кликабельным, чтобы по нажатию на него можно было звонить?
    Через php понимаю, как сделать: прописать +7921111111
    Как сделать, чтобы подменялся не только телефон, но и ссылка на позвонить?

    • нужно допилить скрипт, чтобы подменял не только содержимое тэга, но и атрибут href

  • Виталий

    если не меняется номер при переходе с рекламы директ яндекс и вообще все переходы считает как поиск что делать?