Sec. 02 — Stack & Data Loop · GA4 · Shopify · Tableau
Half evidence · half prescription — each block below is labeledWhat's already firing on petsafe.com
A DTC Ops & Insights Specialist inherits, not builds from scratch. Before proposing dashboards, it's worth counting what's already emitting events. Numbers below are grep counts against the raw HTML of petsafe.com/ sampled 2026-09-20 23:20 UTC — reproducible one-liners in the evidence log at the bottom.
generator meta tag public. React Helmet drives per-page meta. 2026-09-20 · <meta name="generator" content="Gatsby 5.16.1">; response server: Netlifygrep -oiE 'sanity' home.html | wc -l → 149grep -oiE 'cdn\.shopify\.com' home.html | wc -l → 12; also confirmed by /cart.json disallow in robots.txt/klaviyo-form/ disallowed in robots — form endpoints are template routes. 2026-09-20 · grep -oiE 'klaviyo' home.html | wc -l → 4grep -oiE 'algolia' home.html | wc -l → 3grep -oiE 'triplewhale' home.html | wc -l → 5?bvstate= parameters (good). Reviews widget has data-bv-seo="false" — reviews aren't SEO-rendered. Fix on Sec. 05. 2026-09-20 · attr grep on a real product pagegtm.js loads. This is the injection point for a clean, documented event layer. 2026-09-20 · grep -oiE 'gtm\.js' home.html | wc -l → 2The data loop I'd trust
Prescription · what I would build once hiredThe JD asks for "trusted Tableau dashboards and consistent definitions for core DTC performance." Trust is built at the seams, not in the dashboard. Here's the loop I'd defend:
# The four seams that most often desync Shopify order ─▶ GA4 purchase # dedupe on order_id, not transaction_id GA4 session ─▶ Triple Whale # UTM taxonomy is the join key Klaviyo event ─▶ GA4 event # email_opened ≠ engagement — define once Algolia click ─▶ GA4 view_item # tie internal-search results to conversion # Then Tableau reads from one place — a modeled layer, not raw connectors Modeled layer ─▶ Tableau # definitions live in a shared metric dictionary
Metric dictionary before any new dashboard
"Conversion rate," "AOV," "new vs. returning" — each defined with the exact filter, window, and source of truth. One page, versioned, linked from every dashboard.
Shopify ↔ GA4 ↔ Triple Whale
A one-tab Tableau view that flags any day where the three sources disagree on order count by >3%. Silent 99% of the time; loud when something's actually broken.
Claude for exploration, humans for calls
The JD is explicit — approved AI tools "explore data exports, identify patterns or anomalies" but outputs are validated. I already use Claude this way for weekly SKU-health and search-console rollups.
The three gaps at the front door
Evidence · sampled 2026-09-20Front-door signal quality
-
Homepage schema. Zero
application/ld+jsonblocks onpetsafe.com/. RecommendOrganization+WebSite+BreadcrumbListas the baseline; brand-page schema per sub-brand. 2026-09-20 · [E1] on Overview SEO · owner -
Sitemap endpoint.
/sitemap.xmlcurrently returns 200 with an HTML body. Bing and AI crawlers will silently drop this. Repoint or generate an XML index at build time. 2026-09-20 · [E2] on Overview Ops · this sprint -
llms.txt. 404. A 40-line file naming the brand, product families, and canonical URLs materially improves how ChatGPT and Claude cite the site. Cheap, high-ROI. 2026-09-20 · [E3] on Overview Ops · this sprint -
Robots hygiene. Already clean —
?sort=,?page=,?limit=,?bvstate=,/klaviyo-form/,/cart.json, and/searchare all correctly disallowed. Someone has been careful here. 2026-09-20 · [E7] on Overview Confirmed good
Boundary check — from the JD
None of this is a strategy call. Site architecture, brand narrative, roadmap priorities stay with the channel owners. What I'd own is technical execution, QA, ticket-writing, dashboard maintenance, and honest reporting on whether we shipped what we said we'd ship.