site-analytics
Skill1 starsChanged 36 days agoMITView on GitHub
Sets up tracking for a content site in the Russian web: did people reach the goal. Verifies that Yandex Metrica counts a real visit, not just sits in the code, creates goals for affiliate link clicks, leads, chat opens and messenger jumps, adds a /go/<partner>?from=<page>.<place> redirect with its own nginx click log and a report from it, reconciles impressions, clicks, visits and goals across Yandex Webmaster, Search Console and logs, correcting for bots, panel lag, countries and Cloudflare in Russia, and builds a weekly what changed after the release report. Triggers: 'analytics not tracking', 'set up goals', 'affiliate click tracking', 'redirect tracking', 'weekly traffic report', 'did the deploy help'. Triggers (RU): «проверь Метрику», «счётчик не считает», «мало визитов», «заведи цели», «считать клики по партнёрке», «сколько переходов по ссылке», «отчёт по трафику», «что дал выкат», «откуда люди», «логи nginx», «еженедельный отчёт».
- Reads credentials
In this repository11 other files it gives its agents.
- ai-video-conceptSkill
- archive-footageSkill
- article-coverSkill
- blog-articleSkill
- film-lookSkill
- motion-graphicsSkill
- security-checkSkill
- shot-listSkill
- social-carouselSkill
- website-buildSkill
- youtube-thumbnailSkill
The file
Files
Учёт: дошли ли люди до цели
Instructions are in Russian. Respond in the user's language.
Зачем
Маленький сайт живёт на десятках визитов, и одна сломанная деталь учёта переворачивает выводы. Счётчик стоит, но молчит. Цель шлётся, но не заведена. Логи показывают «переходы из Google», а это боты. Панели показывают рост, а это показы, не люди. Скилл собирает учёт так, чтобы на вопрос «пришёл ли человек и сделал ли то, ради чего страница» был проверенный ответ.
Главное правило: учёт проверяется живым событием, а не наличием кода.
На чём работает
| Инструмент | Зачем здесь | Кто делает |
| Яндекс Метрика с целями | визиты и JS-события: клик по партнёрке, заявка, чат, мессенджер; цели заведены в интерфейсе | агент ставит код и проверяет живым визитом, цели в интерфейсе заводит владелец или агент в его браузере |
Свой переходник /go/ в nginx | серверный журнал кликов по партнёрским ссылкам с меткой страницы и места, scripts/go-redirect.nginx.conf | агент готовит конфиг, на сервер ставит по слову владельца |
scripts/clicks_report.py | отчёт по журналу переходника с отсевом ботов и повторов | агент |
| Google Search Console и Яндекс Вебмастер | показы, клики, позиции, страны; задержка в несколько дней | владелец даёт доступ, агент снимает цифры с датой |
| Логи сервера (nginx или аналог) | какие страницы вообще трогают; нижняя граница просмотров, не число людей | агент читает по SSH |
templates/weekly-report.md | недельный отчёт «что изменилось после выката» | агент, решение на неделю за владельцем |
Статьи, которые здесь замеряются, готовит blog-article (этап «замер через
неделю»), посты для соцсетей social-carousel.
Когда включать
- Подключили или поменяли Метрику, пререндер, шаблон страниц.
- Цифры подозрительные: визитов меньше, чем кликов из поиска в Вебмастере.
- Появилась партнёрская ссылка, форма заявки, чат, кнопка мессенджера.
- Нужен еженедельный отчёт или ответ «что дал выкат».
Порядок работы
- Проверь счётчик живым визитом (раздел «Метрика»).
- Перечисли цели страницы и заведи их в коде и в интерфейсе Метрики.
- Партнёрские ссылки пропусти через свой переходник с журналом.
- Раз в неделю собери отчёт по шаблону
templates/weekly-report.md. - После каждого выката запиши дату и ожидаемый эффект, через неделю сверь.
Метрика: работает ли счётчик
Как это было: в одном проекте с пререндером страниц в статику Метрика
месяцами не считала ничего. Код стоял, скрипт грузился, объект window.Ya
был. Виновата оказалась опция ssr: true в вызове ym(<ID>, "init", {...}).
Оговорка: в официальном коде счётчика этот параметр бывает штатным, и на
многих сайтах он ничего не ломает. В том проекте он выключал счётчик.
Заметили только потому, что Вебмастер показывал заметно больше кликов из
поиска, чем Метрика визитов.
Признак работы, а не наличия:
- в странице появился объект
window.yaCounter<ID>; - ушёл сетевой запрос на
mc.yandex.ru/watch/<ID>илиmc.yandex.com/watch/<ID>.
Быстрая ручная проверка в обычном браузере: открой страницу, в консоли
Object.keys(window).filter(k => k.startsWith('yaCounter')), во вкладке
Network фильтр watch. Пусто: счётчик не работает.
Сразу проверь параметры init: ssr, кастомные опции, которые скопировали из
чужого шаблона. Не убирай их вслепую: проверь живым визитом и сравни с
эталонной страницей, где счётчик точно работает. Если без опции счётчик
оживает, а с ней нет, тогда убирай.
Если Метрика заблокирована у тебя самого. Частая история: на машине
владельца стоит блокировщик рекламы, VPN или DNS-фильтр, и mc.yandex.* не
открывается ни в браузере, ни в curl. Тогда «не работает» врёт тест, а не
сайт. Что делать:
- Проверяй с другого устройства или сети: например, с телефона через мобильный интернет, обычным браузером.
- Браузер-робот (автоматический браузер для тестов) Метрика не считает, это нормально. Для такой проверки он не годится.
- Признак работы: появился объект счётчика (
yaCounter<ID>) и ушёл запросwatch. - Сначала эталон. Открой
templates/metrika-reference.html(одна пустая страница со стандартным кодом счётчика, подставь свой ID) тем же способом. Эталон молчит: сломан тест. Эталон работает, а сайт нет: сломан сайт. - Если включён фильтр своих визитов, в отчётах твой тест не появится.
Смотри запрос
watch, а не отчёт.
Повторяй проверку после каждого изменения шаблона, пререндера, политики безопасности (CSP) и после переезда на другой хостинг.
Цели: что считать
У каждой страницы есть действие, ради которого она существует. Считай его JS-событием и заводи цель:
| Событие | Идентификатор (пример) | Когда шлётся |
| Клик по партнёрской ссылке | partner_<имя> | клик по ссылке /go/<имя> |
| Заявка | lead_sent | после успешного ответа сервера, не по клику кнопки |
| Открытие чата | chat_open | открытие виджета |
| Переход в мессенджер | messenger_tg, messenger_wa | клик по ссылке в мессенджер |
Код события: ym(<ID>, 'reachGoal', 'partner_example', {from: 'page.place'}).
Цель обязательно заведи в интерфейсе Метрики (Цели, тип «JavaScript- событие», тот же идентификатор). Пока цели нет, события не попадают в отчёты целей, и задним числом их не вернуть. Как это было: событие клика по партнёрке слали из кода 11 дней, цель не создали, клики за это время потеряны для Метрики. Спас только серверный журнал.
После заведения сделай один клик сам (через рабочий выход в сеть) и проверь,
что в запросе watch есть твой идентификатор цели.
Заявку считай по ответу сервера, а не по нажатию: нажатие с ошибкой валидации это не заявка.
Свой переходник для партнёрских ссылок
Метрика теряет часть кликов (блокировщики, уход со страницы раньше отправки).
Поэтому клик по партнёрке пишет сервер. Все ссылки на сайте ведут не на
партнёра, а на /go/<партнёр>?from=<страница>.<место>:
<партнёр>короткое имя:example.<страница>slug статьи,<место>где ссылка стоит:facts(блок «коротко»),row(строка в тексте),side(боковая колонка),text.- Пример:
/go/example?from=plastikovye-kartinki.facts.
Сервер пишет клик в отдельный журнал и отдаёт 302 на партнёра. Готовый пример
конфига: scripts/go-redirect.nginx.conf. Что в нём важно:
- Отдельный журнал вне ротации общего лога. Общий лог nginx обычно живёт 14 дней и чистится. Журнал кликов клади в свой каталог, который не попадает под маску ротации, иначе через две недели история пропадёт.
Cache-Control: no-store. Иначе CDN или браузер закэширует 302, и повторные клики до сервера не дойдут.X-Robots-Tag: noindex, nofollowиDisallow: /go/в robots.txt, чтобы переходник не попал в индекс.- Неизвестное имя партнёра отдаёт 404, а не редирект куда попало.
- Партнёрскую ссылку держи в одном месте. Если она есть и в данных сайта, и в конфиге nginx, запиши это рядом с обоими, менять придётся в двух местах.
- В статьях ссылка с
rel="sponsored nofollow".
Отчёт по журналу:
python3 scripts/clicks_report.py clicks.log
python3 scripts/clicks_report.py clicks.log --days 7Журнал забери с сервера (scp или ssh ... cat), скрипт читает локальный
файл. Он отсеивает ботов и превью мессенджеров по браузеру, склеивает повторы
одного браузера с той же метки за 60 секунд и показывает клики по партнёрам,
страницам, местам на странице и странам. Код выхода 1, если есть клики без
метки from или с кривой меткой: значит, где-то на сайте ссылка стоит мимо
схемы, найди и поправь.
Панели поиска: Вебмастер и Search Console
- Отстают на несколько дней (на октябрь 2026, перепроверь). Не делай вывод о выкате по вчерашним данным. Сравнивай равные окна до и после, и только когда окно «после» уже закрыто данными.
- Показы это не люди. Рост показов в панели при нуле кликов ничего не меняет для заявок. В отчёте всегда пиши показы и клики раздельно.
- Страны смотри отдельно. Язык страницы не равен аудитории. Фильтр по странам в Search Console, регионы в Вебмастере.
- Проверяй все языковые версии. Как это было: на одной языковой версии статьи не оказалось ссылки, которая была на другой, и часть кликов ушла в пустоту. Ссылки, блоки и шаги сверяй во всех версиях, а не в одной.
- Клики из панели сверяй с визитами Метрики. Визитов сильно меньше кликов: первым подозревай счётчик (раздел выше).
Логи сервера: что они могут и чего нет
Логи годятся, чтобы понять, какие страницы вообще трогают. Как счётчик людей не годятся:
- Поддельные рефереры. Как это было: в логах 3-6 «переходов из Google» в
день, а это боты: одинаковый браузер, реферер ровно
https://www.google.com/без запроса, повтор одной страницы 2-3 раза за минуты, всегда одна языковая версия. Живых людей там почти не было. - Боты с именем поисковика. «Googlebot» в браузере это часто сканер,
который ходит по
/.envиwp-config.php. Считай только адреса из sitemap. - За CDN статика и часть HTML отдаются из кэша и до сервера не доходят. Проверка «браузер догрузил css» не работает, а число просмотров в логе это нижняя граница. IP в логе будут адресами CDN, а не посетителей.
- Утренние заходы с поиска на свои же страницы услуг часто делает сам владелец. Отметь свой браузер и устройство и вычитай.
Cloudflare и аудитория из РФ
Как это было: сайт за прокси Cloudflare открывался, а картинки и видео у людей в России были чёрные. По сообщениям на 2025-2026 годы операторы в РФ с июня 2025 пропускают к адресам Cloudflare только первые примерно 16 КБ соединения (перепроверь, ситуация меняется). Серверы проверки доступности и твой VPN этого не покажут.
- Проверяй живым человеком из РФ на домашнем и мобильном интернете: открылись ли картинки, видео, шрифты, отправилась ли форма.
- Для сайта с аудиторией в РФ: Cloudflare только как DNS (серое облако), защита от ботов на своём nginx.
- Медиа не грузится, значит и учёт врёт: человек ушёл, не дождавшись.
Еженедельный отчёт
Раз в неделю, в один и тот же день, по шаблону templates/weekly-report.md:
- Показы и клики из Вебмастера и Search Console, раздельно, с главными странами.
- Визиты Метрики и достижения каждой цели.
- Клики по партнёркам из журнала: по страницам и местам.
- Что выкатили за неделю (дата, что, какой ожидали эффект).
- Что изменилось после прошлых выкатов, с учётом задержки панелей.
- Одно решение на следующую неделю.
Цифры только из панелей и журналов, с датой снятия. Нет данных: пиши «не снято», а не оценку.
Типичные ошибки
- «Код Метрики на месте» вместо проверки запроса
watch. - Проверка с машины, где Метрика заблокирована, и вывод «сайт сломан».
- Событие в коде без цели в интерфейсе.
- Партнёрская ссылка напрямую, без переходника: кликов не видно вообще.
- Журнал кликов в общем логе, который ротируется за две недели.
- Вывод о выкате по данным за вчера.
- Логи nginx как число людей.
- Отчёт смешивает показы и клики в одно «трафик вырос».
Чек-лист перед сдачей
yaCounter<ID>создан, запросwatch/<ID>ушёл, эталон проверен тем же способом.- Опции init (
ssrи подобные) проверены живым визитом и сравнением с эталонной страницей, а не убраны вслепую. - Все цели страницы шлются из кода и заведены в интерфейсе, тестовый клик дошёл.
- Партнёрские ссылки идут через
/go/<партнёр>?from=<страница>.<место>. - Переходник отдаёт 302,
no-store,noindex, неизвестное имя 404. - Журнал кликов вне ротации,
clicks_report.pyотрабатывает без меток- сирот. - Для аудитории из РФ медиа проверены живым человеком из РФ.
- Еженедельный отчёт: показы, клики, цели, партнёрка, выкаты, решение.
Что устаревает первым
Интерфейс Метрики и названия разделов, задержка данных в панелях, поведение блокировок Cloudflare в РФ, признаки автоматизации, на которые реагирует счётчик. Схема «проверяй живым событием» и «пиши клик на сервере» не устаревает. Факты проверены на сентябрь-октябрь 2026, перепроверь перед работой.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

