From 844b07a68f097416739dfcc9e957b31a47b8a1bb Mon Sep 17 00:00:00 2001 From: Wen Taichi Date: Tue, 8 Jul 2025 10:52:49 +0800 Subject: [PATCH] fix(goatcounter): properly count SPA page hits (#2035) 1. Should not create new instance after count.js, as it already setup an instance. 2. Script block would be removed when navigating with SPA, and it cause count.js can not find endpoint by query. The solution is to set endpoint manually. --- quartz/plugins/emitters/componentResources.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/quartz/plugins/emitters/componentResources.ts b/quartz/plugins/emitters/componentResources.ts index 5fdc5c27..61e2ba85 100644 --- a/quartz/plugins/emitters/componentResources.ts +++ b/quartz/plugins/emitters/componentResources.ts @@ -135,15 +135,19 @@ function addGlobalPageResources(ctx: BuildCtx, componentResources: ComponentReso `) } else if (cfg.analytics?.provider === "goatcounter") { componentResources.afterDOMLoaded.push(` + const goatcounterScriptPre = document.createElement('script'); + goatcounterScriptPre.textContent = \` + window.goatcounter = { no_onload: true }; + \`; + document.head.appendChild(goatcounterScriptPre); + + const endpoint = "https://${cfg.analytics.websiteId}.${cfg.analytics.host ?? "goatcounter.com"}/count"; const goatcounterScript = document.createElement('script'); goatcounterScript.src = "${cfg.analytics.scriptSrc ?? "https://gc.zgo.at/count.js"}"; goatcounterScript.defer = true; - goatcounterScript.setAttribute( - 'data-goatcounter', - "https://${cfg.analytics.websiteId}.${cfg.analytics.host ?? "goatcounter.com"}/count" - ); + goatcounterScript.setAttribute('data-goatcounter', endpoint); goatcounterScript.onload = () => { - window.goatcounter = { no_onload: true }; + window.goatcounter.endpoint = endpoint; goatcounter.count({ path: location.pathname }); document.addEventListener('nav', () => { goatcounter.count({ path: location.pathname });