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.
This commit is contained in:
Wen Taichi
2025-07-08 10:52:49 +08:00
committed by GitHub
parent 15f7f18a53
commit 844b07a68f

View File

@@ -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 });