mirror of
https://github.com/hanzoai/agency.git
synced 2026-10-26 05:24:32 +00:00
The head configured GA4 behind a gtag.js script tag, so a network that dropped Google's host held the load event hostage. Configure it inline and fetch gtag.js once the page has loaded, with a linker across the Hanzo domains a visit crosses, and the same GPC/DNT opt-out the site's own telemetry honors. The ID lived in both hanzo.yml and index.html. vite.config.ts now reads it from hanzo.yml into index.html. ScrollToTop sent its own page_view on every route change, on top of GA4's history listener, so each page counted twice. Drop it.
53 lines
2.6 KiB
HTML
53 lines
2.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Hanzo | AI-Powered Solutions</title>
|
|
<meta name="description" content="The human edge for AI. We build tomorrow's solutions with today's teams." />
|
|
<meta name="author" content="Hanzo AI, Inc." />
|
|
|
|
<!-- Absolute, because scrapers do not resolve relative og:image. -->
|
|
<meta property="og:type" content="website" />
|
|
<meta property="og:url" content="https://hanzo.agency/" />
|
|
<meta property="og:title" content="Hanzo | AI-Powered Solutions" />
|
|
<meta property="og:description" content="The human edge for AI. We build tomorrow's solutions with today's teams." />
|
|
<meta property="og:image" content="https://hanzo.agency/og-image.png" />
|
|
<meta property="og:image:width" content="1200" />
|
|
<meta property="og:image:height" content="630" />
|
|
<meta name="twitter:card" content="summary_large_image" />
|
|
<meta name="twitter:image" content="https://hanzo.agency/og-image.png" />
|
|
|
|
<!-- The Hanzo mark, from @hanzo/logo. The SVG carries its own
|
|
prefers-color-scheme rule; the ICO is opaque so it stays legible
|
|
on a dark tab strip, where a transparent black mark disappears. -->
|
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
|
<link rel="alternate icon" href="/favicon.ico" sizes="16x16 32x32 48x48" />
|
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
|
<!-- GA4. %GA% is hanzo.yml's analytics.googleAnalyticsId (vite.config.ts).
|
|
The first page view queues here, before the bundle; gtag.js is fetched
|
|
after `load`, since a script in the head holds the load event until its
|
|
host answers. Route changes are GA4's own history listener. Global
|
|
Privacy Control and Do Not Track opt out, as src/analytics.tsx does. -->
|
|
<script>
|
|
if (!navigator.globalPrivacyControl && navigator.doNotTrack !== '1') {
|
|
window.dataLayer = window.dataLayer || [];
|
|
function gtag(){dataLayer.push(arguments)}
|
|
gtag('js', new Date());
|
|
gtag('config', '%GA%', { linker: { domains: ['hanzo.agency', 'hanzo.ai', 'hanzo.id', 'pay.hanzo.ai', 'cal.hanzo.ai'] } });
|
|
addEventListener('load', function () {
|
|
var s = document.createElement('script');
|
|
s.async = true;
|
|
s.src = 'https://www.googletagmanager.com/gtag/js?id=%GA%';
|
|
document.head.appendChild(s);
|
|
}, { once: true });
|
|
}
|
|
</script>
|
|
</head>
|
|
|
|
<body>
|
|
<div id="root"></div>
|
|
<script type="module" src="/src/main.tsx"></script>
|
|
</body>
|
|
</html>
|