The krillswarm.com Jekyll site had GA4 (gtag.js) loading and firing
page_view, but no instrumentation on any conversion click — download
tiles, install-script copy buttons, store links — so there was no data on
which CTAs convert. Separately, the social-share preview (og:image /
twitter:image) pointed at an SVG avatar, which most social scrapers
(Facebook, X, LinkedIn) silently refuse to render.
Two distinct gaps. (1) No click-event layer existed at all — the only
analytics include emitted the GA4 config and nothing more. (2) The
social_preview_image was set to an SVG; SVG is not a valid social-card
format. A subtler trap sits behind the fix: _includes/media-url.html
prepends the cdn: host (cms.krill.systems) to any relative image
path, but a value containing :// is returned verbatim. So a relative
/assets/img/... path would resolve to the CDN (where the Pages-hosted
asset does not exist), not to krillswarm.com.
Added one production-gated, delegated document click listener in
_includes/analytics/firebase.html that maps href patterns and the
.copy button class to GA4 download / copy_install_cmd /
outbound_click events with transport_type: 'beacon'. Because it is
delegated and lives in the shared include, it covers the home hero and
every category/post link with no per-page markup. Replaced the SVG card
with a generated 1200x630 PNG (plus a square 512px logo for JSON-LD),
referenced by an absolute https://krillswarm.com/... URL to bypass
the CDN-prefix behavior, and emitted og:image:width/height/type/alt.
Also: noindex on internal lesson pages, robots Disallow for raw
superpowers/ docs, reconciled a dangling Twitter sameAs, and added
missing page descriptions.
media-url.html that must resolve
to the Pages host rather than the CDN, use an absolute URL (the
://-contains short-circuit), or the asset silently 404s on the CDN.og:image must be a raster (PNG/JPG) at 1200x630 — never SVG. Validate
a deployed URL through opengraph.xyz / the platform card validators
before assuming social previews work.