site-analytics
ASecuritySets 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 ...
- 1 star
- 0 votes
- 0 copies
- 1 view
- Added October 8, 2026
Works with
Security analysis
100/100Pro scans all 5 files and shows the line behind each finding
npx -y skills add shutckin/aivfx-content-kit --skill site-analytics --agent claude-codeAre you the author of site-analytics?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/shutckin-site-analytics)---
name: site-analytics
description: "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», «еженедельный отчёт»."
---
# Учёт: дошли ли люди до цели
> 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`.
## Когда включать
- Подключили или поменяли Метрику, пререндер, шаблон страниц.
- Цифры подозрительные: визитов меньше, чем кликов из поиска в Вебмастере.
- Появилась партнёрская ссылка, форма заявки, чат, кнопка мессенджера.
- Нужен еженедельный отчёт или ответ «что дал выкат».
## Порядок работы
1. Проверь счётчик живым визитом (раздел «Метрика»).
2. Перечисли цели страницы и заведи их в коде и в интерфейсе Метрики.
3. Партнёрские ссылки пропусти через свой переходник с журналом.
4. Раз в неделю собери отчёт по шаблону `templates/weekly-report.md`.
5. После каждого выката запиши дату и ожидаемый эффект, через неделю сверь.
## Метрика: работает ли счётчик
Как это было: в одном проекте с пререндером страниц в статику Метрика
месяцами не считала ничего. Код стоял, скрипт грузился, объект `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`:
1. Показы и клики из Вебмастера и Search Console, раздельно, с главными
странами.
2. Визиты Метрики и достижения каждой цели.
3. Клики по партнёркам из журнала: по страницам и местам.
4. Что выкатили за неделю (дата, что, какой ожидали эффект).
5. Что изменилось после прошлых выкатов, с учётом задержки панелей.
6. Одно решение на следующую неделю.
Цифры только из панелей и журналов, с датой снятия. Нет данных: пиши «не
снято», а не оценку.
## Типичные ошибки
- «Код Метрики на месте» вместо проверки запроса `watch`.
- Проверка с машины, где Метрика заблокирована, и вывод «сайт сломан».
- Событие в коде без цели в интерфейсе.
- Партнёрская ссылка напрямую, без переходника: кликов не видно вообще.
- Журнал кликов в общем логе, который ротируется за две недели.
- Вывод о выкате по данным за вчера.
- Логи nginx как число людей.
- Отчёт смешивает показы и клики в одно «трафик вырос».
## Чек-лист перед сдачей
- [ ] `yaCounter<ID>` создан, запрос `watch/<ID>` ушёл, эталон проверен тем
же способом.
- [ ] Опции init (`ssr` и подобные) проверены живым визитом и сравнением
с эталонной страницей, а не убраны вслепую.
- [ ] Все цели страницы шлются из кода и заведены в интерфейсе, тестовый
клик дошёл.
- [ ] Партнёрские ссылки идут через `/go/<партнёр>?from=<страница>.<место>`.
- [ ] Переходник отдаёт 302, `no-store`, `noindex`, неизвестное имя 404.
- [ ] Журнал кликов вне ротации, `clicks_report.py` отрабатывает без меток-
сирот.
- [ ] Для аудитории из РФ медиа проверены живым человеком из РФ.
- [ ] Еженедельный отчёт: показы, клики, цели, партнёрка, выкаты, решение.
## Что устаревает первым
Интерфейс Метрики и названия разделов, задержка данных в панелях, поведение
блокировок Cloudflare в РФ, признаки автоматизации, на которые реагирует
счётчик. Схема «проверяй живым событием» и «пиши клик на сервере» не
устаревает. Факты проверены на сентябрь-октябрь 2026, перепроверь перед
работой.
Files in this skill
- SKILL.md
- scripts/clicks_report.py
- scripts/go-redirect.nginx.conf
- templates/metrika-reference.html
- templates/weekly-report.md
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.