analytics: add the Yandex.Metrika counter to all four landings

Counter 112352796 goes into the <head> of every landing's index.html, ahead
of the Vite entry, so the hit fires before React mounts. The pages are plain
SPAs served off disk by nginx (Express only answers /api/*), so the static
head is the only place it needs to be.

One counter serves all four domains, which means reports mix them and every
domain has to be listed in the counter's own settings or its hits get
filtered — noted in deploy/README.md along with the conversion tracking that
is still missing: src/lib/lead.ts pushes a plain custom dataLayer event,
which Metrika's ecommerce: 'dataLayer' does not read.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Yuriy Panov
2026-09-09 00:24:33 +06:00
co-authored by Claude Opus 5
parent 9736024e60
commit e7385e8898
5 changed files with 156 additions and 3 deletions
+8 -3
View File
@@ -240,6 +240,11 @@ Also enable reg.ru VPS snapshots — a full-image restore beats rebuilding under
Not a concern at landing-page traffic; nginx `limit_req` is the second layer.
- **No CI.** Deployment is a manual `exo-deploy`. A GitHub Actions job that SSHes and
runs it is a natural follow-up once the flow is proven.
- **Still open before launch** (not deployment blockers): no analytics snippet is
installed although `src/lib/lead.ts` pushes `dataLayer` events; and the forms show
implicit 152-ФЗ consent text with no link to a published privacy policy.
- **One Metrika counter for four domains.** All four landings carry the same
Yandex.Metrika counter (`112352796`) in `index.html`, so reports mix the domains and
every domain has to be listed in the counter's settings, or its hits get filtered.
- **Still open before launch** (not deployment blockers): conversions are not wired to
Metrika goals — `src/lib/lead.ts` pushes a plain custom `dataLayer` event, which
Metrika's `ecommerce: 'dataLayer'` does not read, so a JS goal or an explicit
`ym(..., 'reachGoal', ...)` call is still needed; and the forms show implicit 152-ФЗ
consent text with no link to a published privacy policy.