МЕРА B2C: Яндекс.Метрика и GA4 + открытие сайта для поисковой индексации #3436
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3436
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/mera-analytics-seo"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Зачем
Статьи МЕРЫ опубликованы с UTM-метками, но посмотреть, приходил ли по ним кто-нибудь, было нечем: веб-аналитики на публичном контуре не было вовсе.
По ходу вскрылось, что второй половине запроса — «толкнуть в выдаче повыше» — мешает не оптимизация, а флаг: всё дерево
mera-publicотдавалоrobots: noindex, nofollow, а/robots.txtи/sitemap.xmlвозвращали 404. Флаг остался с этапа, когда домен был закрыт; в коде рядом стоял комментарий «снять вместе с открытием домена». Домен открыт с августа.Что внутри
Счётчики
Метрика и GA4 монтируются только в
mera-public/layout.tsxи никогда в корневомapp/layout.tsx— иначе счётчик уехал бы в закрытый контур (/v2,/admin,/scrapers,/history), где анонимных посетителей нет, а приватные маршруты сотрудников есть.Идентификаторы приходят build-time (
NEXT_PUBLIC_YM_ID,NEXT_PUBLIC_GA_ID) — канон Dockerfile'а этого проекта. Пустое значение = тег не рендерится вовсе. Оба build-arg'а прописаны в ОБОИХ блоках CI, включая retry-сборку без кеша.Вебвизор выключен намеренно. Он пишет ввод в поля, а на
/estimateчеловек вводит адрес своей квартиры; раздел 9 политики этого не раскрывает. В коде рядом записано, что понадобится для включения: фраза в п. 9.1 + маскировка полей.Цели воронки
Десять целей:
cta_estimate,address_input_start,address_picked,free_result_ok|thin|none,calc_error,validation_error,suggest_failed,paid_teaser_shown.Кнопок «Проверить квартиру» восемь штук в разных компонентах, все — обычные
<a>черезPublicLink. Вместо восьми копийonClick— один делегированный слушатель наdocument: девятая кнопка подключится сама.Цель «оплата успешна» не заведена: вызова checkout во фронте нет вовсе,
PAYMENTS_ENABLEDвыключен, страницы возврата не существует. Вешать пока не на что — вместо неё прокси-цель на показ платного тизера.Индексация
Снят
noindex, добавленыapp/robots.tsиapp/mera-public/sitemap.ts,metadataBase, canonical на короткие адреса,openGraph, JSON-LDArticleна главной статье, места под коды подтверждения Вебмастера и Search Console.robots.txtиsitemap.xmlразведены по двум разнымhandleв Caddy не от хорошей жизни: у Nextrobots.txt— конвенция корняapp/, а sitemap живёт в сегменте маршрута, и формы путей не совпадают.152-ФЗ
Раздел 9 «Файлы cookie и веб-аналитика» в политике (обработчики названы поимённо — этого требует ч. 3 ст. 6) плюс уведомляющий, не блокирующий баннер с запоминанием в
localStorage.Гейт «названий площадок в публичной копии быть не должно» получил узкое исключение ровно на аналитические словосочетания в политике; голое «Яндекс» как площадка остаётся запрещённым и там.
Попутный баг: 301 со слэшем терял UTM
Замер на живом проде 10.09.2026:
Матчер
@meraShortSlashсобирал цель из regex-захвата пути и не переносил параметры. Код ответа оставался 301, поэтому смоук проблему не видел. Мессенджеры и автолинкификаторы дописывают слэш сами — атрибуция терялась именно на трафике по опубликованной ссылке. Починено тем же приёмом, что у соседних матчеров; в смоук добавлена проверка буквальногоLocation.Гейты
isPublicPathи периметр-тест узнали про новые машинные адресаrobots: "noindex"handleв site-блоке не появляется без объявления — раньше эту дверь гейт не видел вовсеПроверено
tsc --noEmitиeslint --max-warnings=0— чистоnpm run buildпроходит;/robots.txtи/mera-public/sitemap.xmlотдаются по нужным адресамmc.yandex.ruиgoogletagmanagercaddy validate— конфиг валиденcheck-mera-public-isolation.mjs— изоляция от B2B не нарушенаvitest runзелёный, кроме двух тестовLoginPage, которые падают точно так же на нетронутом дереве (pre-existing, не из этого PR)Не доведена локально контрольная сборка с подставленными тестовыми номерами счётчиков: машину занимали посторонние процессы, три попытки умерли не начав. Обратная проверка (пустые ID → внешних запросов ноль) сделана на полноценной сборке.
После мержа
Владельцу нужно завести счётчик в Яндекс.Метрике и ресурс в GA4, вписать номера в
build-argsв.forgejo/workflows/deploy-tradein.yml(места подготовлены и подписаны) и передеплоить. До этого момента счётчики не подключаются, а всё остальное — индексация, sitemap, cookie-баннер, починенный UTM — работает сразу.Отдельно после деплоя: переобход в Вебмастере и Search Console, иначе снятый
noindexбудет висеть в кэше поисковиков неделями.🤖 Generated with Claude Code
https://claude.ai/code/session_01CiUFZ3rmTNpp3DRajUo8KQ