Files
agency/index.html
zeekay 2dda1f4299 Load GA4 after the page, from hanzo.yml's ID
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.
2026-09-28 10:38:15 -07:00

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>