Меняем заголовки h1 по UTM метке через PHP


26-12-2018
Денис Л.
Seo
3

Меняем заголовки h1 по UTM метке через PHP

Давайте представим, что у Вас есть общая посадочная страница, на которую Вы ведёте пользователей с рекламы в Яндекс.Директ или Google Adwords. И Вы хотите, чтобы для пользователей, пришедших на сайт с разных объявлений показывались разные заголовки. Например, клиент перешёл к Вам по объявлению: "Купить такой-то товар в Москве". При заходе на Ваш сайт клиенту будет показан заголовок: "Лучший товар такой-то в Москве". А если клиент переходит по объявлению "Купить такой-то товар в Люберцах", то его заголовок на этой же странице будет "Лучший товар такой-то в Люберцах". В общем, вариантов применения этой опции - уйма.

Как считать данные из файла CSV

Для начала нам нужно сформировать файл, в котором будет список меток и заголовков. Формируем обычный документ в программе Exel или любой аналогичной, сохраняем его в формате CSV. В документе должно быть 2 столбца:

  1. UTM-метка
  2. Заголовок

Пример файла:

tovar_v_moskve Лучший товар такой-то в Москве
tovar_v_lyubertsah Лучший товар такой-то в Люберцах

Важно учитывать разделитель, который будет стоять при сохранении в формат CSV. Некоторые программы (например Open Office) спросят Вас, какой Вы хотите использовать разделитель. Можете указать, к примеру этот ;

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

Теперь нам нужно убедиться, что данные в нашем файле находятся в кодировке UTF-8. Если мы имеем данные в другой кодировке, то при выводе на сайт будут кракозябры вместо русских букв. Чтобы сменить кодировку - открываем файл CSV через Notepad++. В меню программы, в разделе "Кодировки", выбираем "Преобразовать в UTF-8". Сохраняем документ.

Теперь будем разбирать PHP скрипт, который может считать данные из CSV файла и исходя из конкретной UTM-метки поменять заголовок на нашем сайте.

Как менять заголовки по UTM меткам

Представим, что в объявлении у нас следующий URL:

https://адрес_сайта/?utm_source=YandexDirect&utm_replace=tovar_v_moskve

Ниже привожу скрипт, он небольшой. Подробно разберём, что в нём происходит.

<?php

$utmReplace = $_GET['utm_replace'] ?? false; // получаем из URL параметр utm_replace

$utmStringRow = 1;
$utmArray = [];
if(($handle = fopen("имя_файла.csv", "r")) !== FALSE) { // Указываем корректное имя файла и открываем файл
    while(($utmData = fgetcsv($handle)) !== FALSE) { // Получаем данные из файла, в цикле
        $utmStringNum = count($utmData);
        $utmStringRow++;
        for($c = 0; $c < $utmStringNum; $c++) {
            $elementArr = explode(';', $utmData[$c]); // Здесь между одинарными кавычками должен 
            // стоять корректный разделитель! В примере выше стоит точка с запятой, но у Вас это может быть
            // как запятая, так и точка с запятой, так и пробел, так и табуляция. Поэтому,
            // рекомендую открыть файл CSV через Notepad++ и скопировать разделитель между меткой и заголовком
            // и в ставить его выше. Вручную с клавиатуры его лучше не вводить, т.к. визуально Вы можете просто
            // не отличить пробел от табуляции. Поэтому, просто копируем и вставляем его выше.
            $utmArray []= $elementArr;
        }
    }
    fclose($handle);
}

function correctsEncoding($world) { // Функция для проверки корректности кодировки. Без неё может не работать!
    // В цикле проверяем, что каждый символ в нашей метке корректный.
    // Когда я запускал этот пример для себя, у некоторых слов из-за особенностей формирования CSV-файла
    // в качестве первых символов стояли знаки вопросов
    for($i = 0; $i < strlen($world); $i++) {
        if(mb_detect_encoding($world[$i]) == 'ASCII') $worldArr []= $world[$i];
    }
    return implode($worldArr);
}

// в цикле перебираем все метки из файла и если метка совпадает с меткой в URL - берём заголовок, идущий в паре с меткой
for($utm = 0; $utm < count($utmArray); $utm++) {
    if(correctsEncoding($utmArray[$utm][0]) == $utmReplace) {
        $utm_source = true;
        $h1 = $utmArray[$utm][1];
    }
}

echo $h1; // выводим для проверки полученный заголовок

?>

Надеюсь, Вам пригодится данный скрипт и Вы сможете решить с его помощью поставленные задачи!

Читайте также:

Как делать ссылки, не передающие вес

Как избежать скликивания рекламных средств на Яндекс.Директ