Головна · Встановлення · Код прямо на сайті
Код прямо в шаблоні сайту
Спосіб для тих, у кого є доступ до файлів сайту. Один блок перед </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/.
- Завантажте архівПосилання на архів приходить у боті @sadalclik_bot разом з ключем акаунта. Архів прив’язаний до домену, який ви вказали при реєстрації.
- Знайдіть корінь сайтуПо FTP або у файловому менеджері хостингу це тека public_html, www чи htdocs — та, де лежить index.php вашого сайту. Для Laravel та інших систем з окремим публічним каталогом — тека public.
- Розпакуйте туди теку cgАдреса https://vash-sajt.com/cg/collect.php має відкриватися напряму. Якщо вийшло /public/cg/ або /site/cg/ — тека лежить не там.
- Виставте праваТеці 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 у підтеці |
| Порожня біла сторінка | Файл відкрився, але відповіді немає | Найчастіше перед відкривним тегом у файлі з’явився зайвий символ під час заливки. Перезалийте файл у бінарному режимі |
Далі — дві перевірки на самому сайті:
- Відкрийте https://vash-sajt.com/cg/cg-tracker.safe.js — має віддатися текст скрипта, а не 404.
- Відкрийте будь-яку сторінку сайту з міткою ?gclid=test-cg в адресі і в інструментах розробника на вкладці «Мережа» знайдіть запит collect.php до вашого ж домену.
- За десять хвилин візит з’явиться в журналі панелі з оцінкою й причиною: детектор перераховує візити кожні 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, після встановлення очистіть кеш і подивіться вихідний код готової сторінки: деякі оптимізатори переносять скрипти й склеюють їх в один файл. Блок має лишитися цілим і на своєму місці.
Що питають про цей спосіб
Оновив тему — тег зник. Це нормально?
Чи можна поставити блок у <head>?
У мене немає FTP, лише панель хостингу. Вийде?
Сайт на Tilda, Wix чи іншому конструкторі — підійде цей спосіб?
Я і сам можу зібрати список поганих IP і вбити його руками. Навіщо платити?
Скільки бачить Google, якщо я і так плачу за кліки?
Подивіться на свій трафік
Акаунт створюється безкоштовно, без картки — платна підписка сама не вмикається. Ми нічого не блокуємо, просто показуємо, хто до вас приходить.