diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index d95ccea..ac3b4bc 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -50,6 +50,7 @@ jobs:
run: pnpm build
env:
BASE_PATH: /easy-png-tools
+ PUBLIC_GA_ENABLED: "true"
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
diff --git a/docs/backlog.md b/docs/backlog.md
index c48580a..9f281bf 100644
--- a/docs/backlog.md
+++ b/docs/backlog.md
@@ -127,9 +127,8 @@
- [ ] дистрибуция: закрепить репо, alternative.to, Product Hunt, Reddit/HN (S4c)
- [ ] GSC: подключить домен, отправить sitemap, мониторинг индексации (S4a)
- [ ] GA4: cookieless-конфигурация, отключить рекламные audiences и signals,
- `anonymize_ip` — сейчас в `web/src/app.html` голый `gtag('config')` (S4b)
-- [ ] GA4: отсечь попадания с локальных и preview-сборок — тег стоит в
- prerender-оболочке и грузится на каждой странице, нужен флаг окружения
+ `anonymize_ip` — сейчас в `web/src/routes/+layout.svelte` голый
+ `gtag('config')` (S4b)
## Платформа (API/PWA)
diff --git a/docs/plan-seo.md b/docs/plan-seo.md
index 0467b5e..04565a1 100644
--- a/docs/plan-seo.md
+++ b/docs/plan-seo.md
@@ -280,9 +280,10 @@
мониторинг индексации и запросов. Бесплатно и обязательно.
- [ ] **[S4b]** Довести GA4 до решения §0: cookieless-конфигурация, отключённые
рекламные audiences и signals, `anonymize_ip`, запрет на передачу
- параметров с данными картинки. Плюс отсечь мусорные попадания:
- prerender-оболочка грузит тег и на локальных сборках, их нужно отсекать
- флагом окружения. GA/ЯМ как замена счётчику не рассматриваем.
+ параметров с данными картинки. Мусорные попадания уже отсечены: тег
+ подключается только при `PUBLIC_GA_ENABLED=true` (выставлен в
+ deploy-workflow, `+layout.svelte`). GA/ЯМ как замена счётчику не
+ рассматриваем.
- [ ] **[S4c]** Дистрибуция: закрепить GitHub-репо (README со скриншотами),
подача на alternative.to (страница против конкурента), Product Hunt,
тематические Reddit/HN-треды. Бэклинки — главный дефицит для конкуренции.
diff --git a/web/src/app.html b/web/src/app.html
index f7efb16..2ed93b2 100644
--- a/web/src/app.html
+++ b/web/src/app.html
@@ -4,20 +4,6 @@
-
-
-
+
+ {/if}
diff --git a/web/static/ga.js b/web/static/ga.js
new file mode 100644
index 0000000..38d4703
--- /dev/null
+++ b/web/static/ga.js
@@ -0,0 +1,6 @@
+window.dataLayer = window.dataLayer || [];
+function gtag() {
+ window.dataLayer.push(arguments);
+}
+gtag("js", new Date());
+gtag("config", "G-MEQJ7JHRQQ");
diff --git a/web/vite.config.ts b/web/vite.config.ts
index 51ea882..03daf8c 100644
--- a/web/vite.config.ts
+++ b/web/vite.config.ts
@@ -11,6 +11,8 @@ const base: "" | `/${string}` =
: (`/${rawBase.replace(/^\/+/, "").replace(/\/+$/, "")}` as `/${string}`);
export default defineConfig({
+ // PUBLIC_* попадают в import.meta.env — флаги окружения вроде GA.
+ envPrefix: ["VITE_", "PUBLIC_"],
ssr: {
noExternal: ["@lucide/svelte"],
},