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

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

Способ для тех, у кого есть доступ к файлам сайта. Один блок перед </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 признаёт недействительной лишь часть кликов и не объясняет, какие именно. Наш детектор на тех же кампаниях помечает заметно больше и показывает причину по каждому визиту словами.

Вернуться к обзору установки Все вопросы

Посмотрите на свой трафик

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