fix: google analytics only on production

This commit is contained in:
2026-10-04 10:51:53 +05:00
parent 1db83d12ff
commit e1fc11cb54
7 changed files with 26 additions and 20 deletions
+1
View File
@@ -50,6 +50,7 @@ jobs:
run: pnpm build run: pnpm build
env: env:
BASE_PATH: /easy-png-tools BASE_PATH: /easy-png-tools
PUBLIC_GA_ENABLED: "true"
- name: Upload Pages artifact - name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3 uses: actions/upload-pages-artifact@v3
+2 -3
View File
@@ -127,9 +127,8 @@
- [ ] дистрибуция: закрепить репо, alternative.to, Product Hunt, Reddit/HN (S4c) - [ ] дистрибуция: закрепить репо, alternative.to, Product Hunt, Reddit/HN (S4c)
- [ ] GSC: подключить домен, отправить sitemap, мониторинг индексации (S4a) - [ ] GSC: подключить домен, отправить sitemap, мониторинг индексации (S4a)
- [ ] GA4: cookieless-конфигурация, отключить рекламные audiences и signals, - [ ] GA4: cookieless-конфигурация, отключить рекламные audiences и signals,
`anonymize_ip` — сейчас в `web/src/app.html` голый `gtag('config')` (S4b) `anonymize_ip` — сейчас в `web/src/routes/+layout.svelte` голый
- [ ] GA4: отсечь попадания с локальных и preview-сборок — тег стоит в `gtag('config')` (S4b)
prerender-оболочке и грузится на каждой странице, нужен флаг окружения
## Платформа (API/PWA) ## Платформа (API/PWA)
+4 -3
View File
@@ -280,9 +280,10 @@
мониторинг индексации и запросов. Бесплатно и обязательно. мониторинг индексации и запросов. Бесплатно и обязательно.
- [ ] **[S4b]** Довести GA4 до решения §0: cookieless-конфигурация, отключённые - [ ] **[S4b]** Довести GA4 до решения §0: cookieless-конфигурация, отключённые
рекламные audiences и signals, `anonymize_ip`, запрет на передачу рекламные audiences и signals, `anonymize_ip`, запрет на передачу
параметров с данными картинки. Плюс отсечь мусорные попадания: параметров с данными картинки. Мусорные попадания уже отсечены: тег
prerender-оболочка грузит тег и на локальных сборках, их нужно отсекать подключается только при `PUBLIC_GA_ENABLED=true` (выставлен в
флагом окружения. GA/ЯМ как замена счётчику не рассматриваем. deploy-workflow, `+layout.svelte`). GA/ЯМ как замена счётчику не
рассматриваем.
- [ ] **[S4c]** Дистрибуция: закрепить GitHub-репо (README со скриншотами), - [ ] **[S4c]** Дистрибуция: закрепить GitHub-репо (README со скриншотами),
подача на alternative.to (страница против конкурента), Product Hunt, подача на alternative.to (страница против конкурента), Product Hunt,
тематические Reddit/HN-треды. Бэклинки — главный дефицит для конкуренции. тематические Reddit/HN-треды. Бэклинки — главный дефицит для конкуренции.
-14
View File
@@ -4,20 +4,6 @@
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="text-scale" content="scale" /> <meta name="text-scale" content="scale" />
<!-- Google tag (gtag.js) -->
<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-MEQJ7JHRQQ"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-MEQJ7JHRQQ");
</script>
<script> <script>
(() => { (() => {
try { try {
+11
View File
@@ -31,6 +31,10 @@
let crumb = $derived(toCrumb(page.url.pathname)); let crumb = $derived(toCrumb(page.url.pathname));
// GA подключается только в production-деплое: флаг выставляется в
// deploy-workflow, локальные и preview-сборки тег не получают.
const gaEnabled = import.meta.env.PUBLIC_GA_ENABLED === "true";
function toCrumb(path: string): string { function toCrumb(path: string): string {
if (path === "/") return "/ " + t("header.home"); if (path === "/") return "/ " + t("header.home");
if (path === "/list-tools") return "/ " + t("header.catalog"); if (path === "/list-tools") return "/ " + t("header.catalog");
@@ -46,6 +50,13 @@
<svelte:head> <svelte:head>
<link rel="icon" href={`${resolve("/")}favicon.svg`} /> <link rel="icon" href={`${resolve("/")}favicon.svg`} />
{#if gaEnabled}
<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-MEQJ7JHRQQ"
></script>
<script src={`${resolve("/")}ga.js`}></script>
{/if}
</svelte:head> </svelte:head>
<main class="preview-root" data-theme={theme}> <main class="preview-root" data-theme={theme}>
+6
View File
@@ -0,0 +1,6 @@
window.dataLayer = window.dataLayer || [];
function gtag() {
window.dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-MEQJ7JHRQQ");
+2
View File
@@ -11,6 +11,8 @@ const base: "" | `/${string}` =
: (`/${rawBase.replace(/^\/+/, "").replace(/\/+$/, "")}` as `/${string}`); : (`/${rawBase.replace(/^\/+/, "").replace(/\/+$/, "")}` as `/${string}`);
export default defineConfig({ export default defineConfig({
// PUBLIC_* попадают в import.meta.env — флаги окружения вроде GA.
envPrefix: ["VITE_", "PUBLIC_"],
ssr: { ssr: {
noExternal: ["@lucide/svelte"], noExternal: ["@lucide/svelte"],
}, },