Нульовий сніпет або розширений сніпет, схема блоку відповідей у GoogleAds
Визначимося для чого потрібен нульовий сніпет в GoogleAds, розглянемо структуру сніпета питання-відповідь. Наведемо приклад у html та json схемі.
Зіткнувшись днями з бібліотекою , Вирішив розповісти готове рішення визначення джерела відвідування.
Інформацію брав . Там більш детальна документація. Я ж розповім простий приклад обліку та відловлювання даних.
1. Підключення на сайті :
У статті, на офіційному сайті (посилання на яке вище) наведено для завантаження готового мінімізованого js файлу. Лежить у директорії /dist . З ним і працюватимемо. Також там описана установка через npm, але оскільки це наочне посібник, його опустимо.
У головному файлі шаблону перед тегом body, що закривається, підключаємо і запускаємо скрипт.
<!DOCTYPE html>
<html>
<head>
...
</head>
<body>
....
<!-- sbjs аналiтика -->
<script src="sourcebuster.min.js"></script>
<script>
sbjs.init();
</script>
<!-- END sbjs аналiтика -->
</body>
</html>
Для перевірки, чи доданий скрипт, в консолі браузера слід набрати:
sbjs.get
Не повинно виникати помилки і має бути виданий об'єкт з інформацією.

Інформація, яка зберігається в sbjs.get.current буде потрібна нам для визначення джерела:

2. Робота на серверній стороні :
Sourcebuster.js працює з cookie . Тому актуальна інформація набуде чинності лише після перезавантаження сторінки або відвідування користувачем будь-якого іншого посилання на сайті (щоб було перевантаження сторінки та оновлено кука).
Робота з даними у куках проста.
<?php
/**
* Якщо ні $_COOKIE['analitic_sbjs'] то повертаємо це
*/< br />function getTempInfo() {
$a = strtr($_COOKIE['sbjs_current'], ['|||' => '&']);
parse_str($a, $b);
if (!$b) {
$b = [
'typ' => 'organic',
'src' => 'google',
'mdm' => 'organic',
'cmp' => '(none)',
'cnt' => '(none)',
'trm' => '(none)',
];
}
return (string) json_encode($b);
}
// Витягуємо збережену інформацію. Якщо її немає, в analitic_sbjs, то смикаємо getTempInfo()
$other = strip_tags(trim((string) $_COOKIE['analitic_sbjs']) ? : getTempInfo());
/ / json_decode, і наводимо все в нижній регістр, для легшого порівняння
$decode = $other ? json_decode($other, true) : [];
$decode['src'] = mb_strtolower($decode['src']);
$decode['mdm'] = mb_strtolower($decode ['mdm']);
$source = 'Інші';
if ($decode['src'] == 'google' && $decode['mdm' ] == 'cpc') {
$source = 'Google Adwords';
} elseif ($decode['src'] == 'yandex' && $decode['mdm'] == 'cpc') {
  ; $source = 'Яндекс Директ';
} elseif (mb_stripos($decode['src'], 'youtube') !== false) {
$source = 'Youtube';
} elseif (in_array($decode['src'], ['facebook', 'fb']) && in_array($decode['mdm'], ['cpc','ppc ','cpa','cpm','cpv','cpp'])) {
$source = 'Facebook реклама';
} elseif ($decode['src'] == 'instagram' && in_array($decode['mdm'], ['cpc','ppc','cpa','cpm ','cpv','cpp'])) {
$source = 'Instagram реклама';
} elseif (mb_stripos($decode['src'], 'google') !== false && $decode['mdm'] == 'organic') {
  ; $source = 'SEO Google';
} elseif (mb_stripos($decode['src'], 'yandex') !== false && $decode['mdm'] == 'organic') {
  ; $source = 'SEO Yandex';
} elseif ($decode['src'] == 'hotline' && $decode['mdm'] == 'cpc') {
$source = 'hotline';
} elseif ($decode['src'] == 'priceua' && $decode['mdm'] == 'cpc') {
$source = 'Price';
} elseif (mb_stripos($decode['src'], 'viber') !== false) {
$source = 'Viber';
} elseif ((mb_stripos($decode['src'], 'facebook') !== false || mb_stripos($decode['src'], 'fb') !== false) & ;& !in_array($decode['mdm'], ['cpc','ppc','cpa','cpm','cpv','cpp'])) {
$source = 'Facebook інше';
} elseif ($decode['mdm'] == 'email') {
$source = 'Email розсилка';
} elseif ($decode['mdm'] == 'organic') {
$source = 'SEO інше';
} elseif ($decode['mdm'] == 'cpc') {
$source = 'Реклама інше';
} elseif ($decode['src'] == 'nadavi') {
$source = 'Ek';
} elseif ($decode['src'] == 'sendpulse') {
$source = 'Send Pulse';
} elseif (mb_stripos($decode['src'], 'yandex') !== false) {
$source = 'Яндекс інше';
} elseif ($decode['mdm'] == 'referral') {
$source = 'Переходи з інших сайтів';
} elseif ($decode['src'] == '(direct)' && $decode['mdm'] == '(none)') {
  ; $source = 'Прямі заходи';
} elseif ($decode['mdm'] == 'display') {
$source = 'Медійна реклама';
} else {
$source = 'Інші';
}
var_dump($source); // Інформація про джерело.
Як видно, $source буде інформація про джерела, з якого перейшов клієнт. Такий спосіб доцільно використовувати при оформленні замовлення або на подібну одноразову дію, щоб це було не на першій сторінці входу користувача.
Інформація зберігається в $_COOKIE['analitic_sbjs'] та $_COOKIE['sbjs_current'] (але в специфічному форматі). Функція getTempInfo() тут як страховка, як у користувача відключені куки або щось пішло не так (чи мило). У будь-якому випадку це приблизна інформація, оскільки заснована на js та куках.
Навів приклад без ООП, щоб було зрозуміліше. Я вважаю, що тут важливіше розібрати, що приходить у src і mdm і що це означає в сукупності для визначення джерела.
Цей приклад не відображає всіх можливостей бібліотеки, що підключається. З рештою можна докладно ознайомитись на офіційному сайті, джерело наведене вгорі.
Визначимося для чого потрібен нульовий сніпет в GoogleAds, розглянемо структуру сніпета питання-відповідь. Наведемо приклад у html та json схемі.
Доводиться мати справу з неоптимізованими за розміром фотографіями формату png. Є простий оптимізатор optipng, який дає можливість керувати оптимізації.
Доводиться стикатися з неоптимізованими за розміром фотографіями формату jpeg. Є простий оптимізатор jpegoptim, який дає змогу керувати оптимізації.