Головна · Встановлення · Код прямо на сайті

Код прямо в шаблоні сайту

Спосіб для тих, у кого є доступ до файлів сайту. Один блок перед </body> — і лічильник вантажиться з вашого ж HTML, без посередника. Нічого не ріжуть блокувальники і нічого не залежить від того, чи опублікований контейнер.

Потрібен доступ до шаблону і FTP · 15 хвилин · лічильник і приймач живуть на вашому домені

Який спосіб обрати

Цей спосіб надійніший, але потребує доступу до коду

Google Tag Manager — це ще один зовнішній файл, gtm.js. Частина блокувальників реклами вирізає його разом з рекламними скриптами: контейнер не завантажився — візит не порахований взагалі. Код у шаблоні посередника не має: відкрилася сторінка — лічильник відпрацював. Плата за це проста — потрібен доступ до файлів і людина, яка вміє їх правити.

Google Tag ManagerКод у шаблоні
Доступ до коду сайтуне потрібенпотрібен
Блокувальники рекламичастина ріже gtm.jsрізати нічого
Хто ставитьмаркетолог самрозробник або ми
Оновлення теми чи CMSтег лишається на місціможе стерти — перевіряйте після оновлення
Тека /cg/ на хостингупотрібнапотрібна
Змінити налаштування лічильникау панелі GTM, без FTPправкою файла шаблону

Тека /cg/ потрібна в обох випадках. Tag Manager уміє вставляти лише JavaScript — PHP-файл на вашому хостингу він створити не може. Тому приймач заливається руками один раз, незалежно від способу.

Не ставте обидва способи одночасно. Два лічильники на сторінці — це подвійний рахунок візитів і перевитрата ліміту тарифу. Один сайт — один спосіб встановлення.

Крок 1

Блок ставиться останнім перед закриттям body

Скопіюйте блок і вставте його в шаблон сайту прямо перед рядком </body>. Ключ акаунта (CG_ACC) видає бот @sadalclik_bot після реєстрації — паролів на сайті ми не заводимо. Домен у двох адресах замініть на свій: файли лежать на вашому хостингу, а не на нашому.

  <script>
    window.CG_ACC = 'vash-akaunt';
    window.CG_CG_ENDPOINT = 'https://vash-sajt.com/cg/collect.php';
  </script>
  <script src="https://vash-sajt.com/cg/cg-tracker.safe.js" async></script>
</body>
</html>
  • Один раз на сторінку. Якщо блок потрапив і в шапку, і в підвал — візити подвояться.
  • Не в <head>. Атрибут async не гальмує відмальовування, але перед </body> скрипт стартує, коли сторінка вже зібрана цілком, і одразу бачить її вміст.
  • Атрибут async не прибирайте — без нього браузер чекає завантаження лічильника, перш ніж домалювати сторінку.
  • Блок не має потрапити всередину умови «показувати лише гостям» або «лише на головній». Особливо потрібен він на сторінці подяки: саме там видно, чи дав клік заявку.

Крок 2

Тека /cg/ на вашому хостингу

У теці лежить сам лічильник і приймач даних. Сенс у тому, що браузер відвідувача звертається до вашого домену, а не до стороннього: такий запит не виглядає як трекер і не потрапляє під списки блокувальників. Приймач уже на сервері пересилає візит нам.

cg-tracker.safe.js

Лічильник, менше 20 КБ. Знімає джерело, gclid, пристрій, екран, мову, час на сторінці та поведінку вказівника. Поля форм, паролі й платіжні дані вирізаються прямо в браузері.

collect.php

Приймач. Приймає лише POST з вашого сайту й передає дані в панель. Нічого не виводить і нічого не пише в корінь сайту.

.htaccess

Забороняє перелік теки: сторонній не побачить список файлів за адресою /cg/.

  1. Завантажте архівПосилання на архів приходить у боті @sadalclik_bot разом з ключем акаунта. Архів прив’язаний до домену, який ви вказали при реєстрації.
  2. Знайдіть корінь сайтуПо FTP або у файловому менеджері хостингу це тека public_html, www чи htdocs — та, де лежить index.php вашого сайту. Для Laravel та інших систем з окремим публічним каталогом — тека public.
  3. Розпакуйте туди теку cgАдреса https://vash-sajt.com/cg/collect.php має відкриватися напряму. Якщо вийшло /public/cg/ або /site/cg/ — тека лежить не там.
  4. Виставте праваТеці 755, файлам 644. Права 777 не потрібні нікому і є діркою. Власник файлів має збігатися з власником решти файлів сайту, інакше PHP-пул їх не прочитає.

Файловий менеджер у cPanel, ISPmanager чи в панелі хостингу підходить так само, як FTP. Важливо лише одне: тека cg має опинитися в корені сайту цілком, з усіма трьома файлами.

Крок 3

Перевірте, що приймач живий

Відкрийте в браузері адресу https://vash-sajt.com/cg/collect.php. Нормальна відповідь — помилка 405, Method Not Allowed. Це не поломка: приймач приймає лише POST, а браузер надсилає GET. Будь-яка інша відповідь означає, що щось не доїхало.

Що показав браузерЩо це означаєЩо робити
405 Приймач на місці й працює Нічого, ідіть далі
404 Теки за цією адресою немає Залили не в корінь сайту. Знайдіть теку з index.php і перенесіть cg туди
403 Сервер закрив доступ Перевірте права (тека 755, файли 644) і власника файлів. На деяких хостингах заважає open_basedir пула
500 PHP упав Потрібен PHP 7.4 або новіший. Точну причину покаже лог помилок у панелі хостингу
Текст PHP-коду на екрані PHP у цій теці не виконується Хостинг віддає файл як текст. Зазвичай це статичний хостинг або заборона PHP у підтеці
Порожня біла сторінка Файл відкрився, але відповіді немає Найчастіше перед відкривним тегом у файлі з’явився зайвий символ під час заливки. Перезалийте файл у бінарному режимі

Далі — дві перевірки на самому сайті:

  1. Відкрийте https://vash-sajt.com/cg/cg-tracker.safe.js — має віддатися текст скрипта, а не 404.
  2. Відкрийте будь-яку сторінку сайту з міткою ?gclid=test-cg в адресі і в інструментах розробника на вкладці «Мережа» знайдіть запит collect.php до вашого ж домену.
  3. За десять хвилин візит з’явиться в журналі панелі з оцінкою й причиною: детектор перераховує візити кожні 10 хвилин, миттєвого вердикту не буває.

Перший тиждень акаунт працює в режимі спостереження: система показує, кого б позначила як сміття, але нічого не блокує. Список поганих IP вивантажується файлом — у кабінет Google Ads його поки завантажує людина, автоматичне відправлення виключень ще в розробці.

Куди саме вставляти

Самописний сайт і шаблонізатори

Правило одне: файл, де стоїть закривний </body>, має бути спільним для всіх сторінок. Тоді блок вставляється один раз і працює всюди. Якщо підвал у кожної сторінки свій — спершу винесіть його в окремий файл, інакше половина сторінок лишиться без лічильника.

Самописний сайт на PHP

Шукайте footer.php, bottom.php або кінець layout.php — той файл, який підключається в кожну сторінку останнім. Блок краще покласти окремим файлом і підключити одним рядком: так його видно при пошуку і не треба лізти в розмітку підвала.

    <?php include __DIR__ . '/parts/sadalclik.php'; ?>
</body>
</html>

Laravel, Blade

Спільний каркас лежить у resources/views/layouts/app.blade.php. Теку cg розпаковуйте в public — у Laravel коренем сайту є саме вона, а не корінь проєкту.

    @include('partials.sadalclik')
</body>
</html>

Symfony, Twig

Базовий шаблон — templates/base.html.twig. Решта так само: окремий файл з блоком і один рядок перед закриттям body.

    {% include 'partials/sadalclik.html.twig' %}
</body>
</html>

Сайти на React, Vue і Next: блок ставиться в кореневий HTML-шаблон збірки. Переходи між екранами без перезавантаження сторінки рахуються інакше, ніж звичайні візити — напишіть у бот @sadalclik_bot, підкажемо під вашу збірку.

Якщо на сайті увімкнений кеш сторінок або оптимізатор HTML, після встановлення очистіть кеш і подивіться вихідний код готової сторінки: деякі оптимізатори переносять скрипти й склеюють їх в один файл. Блок має лишитися цілим і на своєму місці.

Що питають про цей спосіб

Оновив тему — тег зник. Це нормально?
Так і буває: оновлення перезаписує файли теми разом з вашими правками. Тому для WordPress та інших CMS ми радимо або дочірню тему, або Google Tag Manager. Після кожного оновлення шаблону перевіряйте вихідний код сторінки пошуком по слову cg-tracker.
Чи можна поставити блок у <head>?
Працювати буде: атрибут async не затримує відмальовування. Але перед </body> надійніше — на момент запуску сторінка вже зібрана, і лічильник одразу бачить її цілком, а не наполовину.
У мене немає FTP, лише панель хостингу. Вийде?
Так. Файловий менеджер у cPanel, ISPmanager чи в панелі будь-якого українського хостингу вміє завантажити й розпакувати архів. FTP — просто звичний спосіб, а не обов’язковий.
Сайт на Tilda, Wix чи іншому конструкторі — підійде цей спосіб?
Ні. Туди не можна покласти PHP-файл, отже приймачу немає де жити. Для конструкторів лишається Google Tag Manager, і приймач тоді доведеться розмістити на іншому вашому домені.
Я і сам можу зібрати список поганих IP і вбити його руками. Навіщо платити?
До 500 адрес на кампанію — можете. Це стеля Google Ads: усе, що вище неї, мовчки перестає діяти, а сам кабінет про це не попереджає. Сміттєві мережі виїдають цей ліміт за кілька тижнів, після чого список треба чистити й перезбирати — руками це робота на кожен день.
Скільки бачить Google, якщо я і так плачу за кліки?
Google визнає недійсною лише частину кліків і не пояснює, які саме. Наш детектор на тих самих кампаніях позначає помітно більше і показує причину по кожному візиту словами.

Повернутися до огляду встановлення Усі запитання

Подивіться на свій трафік

Акаунт створюється безкоштовно, без картки — платна підписка сама не вмикається. Ми нічого не блокуємо, просто показуємо, хто до вас приходить.