feat(mera): подключить счётчик Яндекс.Метрики 112563104 к публичному контуру
All checks were successful
CI Trade-In / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 13s
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m55s
CI / openapi-codegen-check (pull_request) Successful in 2m35s
CI / backend-tests (pull_request) Successful in 6m48s

Обвязка аналитики стояла на сайте с #3436, но собирала ноль: все четыре
переменные NEXT_PUBLIC_YM_ID/GA_ID/YANDEX_VERIFICATION/GOOGLE_VERIFICATION
уходили в сборку пустыми, а пустая строка по контракту фронта убирает тег
целиком. Владелец завёл счётчик 112563104 — вписан литералом в ОБА блока
build-args деплоя (основной и retry без кеша): пропустить второй значит
получить сборку без счётчика ровно в тот прогон, когда битый buildcache
уронит первый.

Номер счётчика не secret: он и так уходит в разметку каждой страницы, а
литерал в диффе можно проверить глазами.

Добавлен ssr:true в init. Страницы публичного контура рендерятся на сервере,
и без флага Метрика считает первый хит по состоянию DOM на момент
гидратации, а не по отданной сервером разметке. Флаг выставлен и в самом
счётчике на стороне Метрики.

ВЕБВИЗОР ОСТАЁТСЯ ВЫКЛЮЧЕН, хотя в счётчике владелец его включил. Он пишет
ввод в поля формы, а на /estimate человек вводит адрес своей квартиры;
раздел 9 политики конфиденциальности запись действий не объявляет. Включать
следует одним заходом с двумя правками: фраза про запись действий в п. 9.1
privacy/page.tsx и маскировка полей адреса и телефона через ym-hide-content
/ data-ym-disable-keys.

GA4 и коды верификации поисковых консолей остаются пустыми — не заведены.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VQ8jqr4SFirX5tFLwdSrXh
This commit is contained in:
bot-backend 2026-09-15 19:21:15 +03:00
parent dbf46228fb
commit 5be5fc005f
2 changed files with 18 additions and 10 deletions

View file

@ -511,21 +511,24 @@ jobs:
# NEXT_PUBLIC_APP_VERSION/BUILD_SHA/BUILD_DATE — build-time (Next.js
# инлайнит NEXT_PUBLIC_* в статику, runtime env их не подхватит,
# см. frontend/Dockerfile комментарий у соответствующих ARG).
# NEXT_PUBLIC_YM_ID/GA_ID/YANDEX_VERIFICATION/GOOGLE_VERIFICATION —
# ПОКА ПУСТЫЕ: владелец ещё не завёл счётчики Метрики/GA4 и
# мета-теги верификации поисковых консолей. Пустая строка = скрипт
# счётчика НЕ рендерится вообще (контракт фронта, см. тот же
# Dockerfile-комментарий). Когда номера появятся — вписать
# литералом сюда И в retry-блок ниже (оба обязательны, иначе
# ретрай без кеша уедет без счётчика), и это ТРЕБУЕТ пересборки
# образа (build-time bake, не runtime-правка на проде).
# NEXT_PUBLIC_YM_ID — счётчик Яндекс.Метрики публичного контура,
# заведён владельцем 15.09.2026. Литерал, а не secret: номер
# счётчика и так уходит в разметку каждой страницы, прятать нечего,
# а secret'ом его нельзя проверить глазами в диффе.
# NEXT_PUBLIC_GA_ID/YANDEX_VERIFICATION/GOOGLE_VERIFICATION —
# ПОКА ПУСТЫЕ: ресурс GA4 и права в поисковых консолях ещё не
# заведены. Пустая строка = соответствующий тег НЕ рендерится
# вообще (контракт фронта, см. тот же Dockerfile-комментарий).
# ЛЮБОЕ из этих значений вписывать литералом СЮДА И в retry-блок
# ниже — оба обязательны, иначе ретрай без кеша уедет без счётчика.
# Требует пересборки образа: build-time bake, не runtime-правка.
build-args: |
NEXT_PUBLIC_BASE_PATH=/trade-in
NEXT_PUBLIC_API_BASE_URL=/trade-in
NEXT_PUBLIC_APP_VERSION=${{ needs.changes.outputs.app_version }}
NEXT_PUBLIC_BUILD_SHA=${{ needs.changes.outputs.build_sha }}
NEXT_PUBLIC_BUILD_DATE=${{ needs.changes.outputs.build_date }}
NEXT_PUBLIC_YM_ID=
NEXT_PUBLIC_YM_ID=112563104
NEXT_PUBLIC_GA_ID=
NEXT_PUBLIC_YANDEX_VERIFICATION=
NEXT_PUBLIC_GOOGLE_VERIFICATION=
@ -552,7 +555,7 @@ jobs:
NEXT_PUBLIC_APP_VERSION=${{ needs.changes.outputs.app_version }}
NEXT_PUBLIC_BUILD_SHA=${{ needs.changes.outputs.build_sha }}
NEXT_PUBLIC_BUILD_DATE=${{ needs.changes.outputs.build_date }}
NEXT_PUBLIC_YM_ID=
NEXT_PUBLIC_YM_ID=112563104
NEXT_PUBLIC_GA_ID=
NEXT_PUBLIC_YANDEX_VERIFICATION=
NEXT_PUBLIC_GOOGLE_VERIFICATION=

View file

@ -86,6 +86,10 @@ export function AnalyticsScripts() {
(1) отдельная фраза про запись действий в п. 9.1
`privacy/page.tsx`, (2) маскировка полей ввода адреса и
телефона через `ym-hide-content` / `data-ym-disable-keys`. */}
{/* `ssr:true` страницы публичного контура рендерятся на сервере,
и без этого флага Метрика считает первый хит по состоянию DOM на
момент гидратации, а не по отданной сервером разметке. Флаг
выставлен и в самом счётчике на стороне Метрики. */}
<Script id="ym-init" strategy="afterInteractive">
{`
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
@ -95,6 +99,7 @@ export function AnalyticsScripts() {
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(${Number(YM_ID)}, "init", {
ssr:true,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,