Sec. 01 — Overview · for the DTC Ecommerce Ops & Insights Specialist role
Evidence page · sampled 2026-09-20The stack is right. The signals aren't.
PetSafe already runs the toolchain the job description asks about — Gatsby on Netlify, headless Shopify, Sanity, Klaviyo, Algolia, Triple Whale, GTM, Bazaarvoice — I can see every one of them loading on petsafe.com. What's missing is the plumbing that turns that stack into trustworthy data and repeatable launches: zero structured data on the homepage, a sitemap URL that serves HTML instead of XML, no llms.txt, and every product page shipping the same 15-word templated meta description. Every figure below is dated and reproducible.
application/ld+json blocks on the petsafe.com homepagecurl petsafe.com/ | grep -c 'application/ld+json' → 0 in 428,751 bytes · [E1]
/sitemap.xml returns the Gatsby homepage HTML, not an XML sitemapcurl petsafe.com/sitemap.xml → 360,985 bytes, first 500 chars begin <!DOCTYPE html> · [E2]
/llms.txt — missing AI-ingestion signalcurl -I petsafe.com/llms.txt → HTTP/2 404 · [E3]
"Buy the [name] in the official PetSafe® store for your pet." · [E4]
Structured data is silent on the front door
Homepage carries no JSON-LD; interior product pages carry ProductGroup, BreadcrumbList and hand-curated FAQPage. The gap is only at the top of the funnel.
/p/extreme-weather-aluminum-pet-door/ZPA19-16853/ returned 2 JSON-LD blocks (Product+Breadcrumb, FAQPage) · [E5]
Sitemap and llms.txt need owners
curl https://www.petsafe.com/sitemap.xml returns 200 with Content-Type: text/html. A specialist who owns URL taxonomy owns this — the fix is one build-time step.
The stack for Tableau is already emitting events
GTM is live, Klaviyo is firing, Shopify is behind the cart, Triple Whale is watching spend, Bazaarvoice is collecting reviews. Tableau dashboards described in the JD can be built on top of what's already flowing, not from scratch.
2026-09-20 · HTML-source grep on the homepage — see stack node counts on the next page and [E6]What I looked at
About 90 minutes with public artifacts only — the pages, HTTP headers, robots.txt, sitemap and llms.txt endpoints, the JSON-LD on 5 real product pages across doors, GPS, and microchip categories, and the raw HTML of petsafe.com/. No login, no confidential data. Every claim on this site names a reproducible source; the Evidence Log at the bottom of this page shows the exact commands.
Role fit
The JD splits the role into four buckets: project management, data & Tableau, Shopify ops, and measurement. This review walks through one artifact — the DTC storefront — in those four voices, plus a fifth section (The 1,000-Page Fix) with a live interactive tool that repairs a specific problem I found on every product page. I've been the "keep it moving" person for a 14,000-SKU Shopify migration at Universal Wholesale and I run this same pattern across storefronts today.
Evidence log
Every claim on this page, with its date, source, and a command you can rerun.
- [E1] Homepage carries zero JSON-LD blocks.
curl -sSL https://www.petsafe.com/ -o home.html && grep -c 'application/ld+json' home.html→0. Sampled 2026-09-20 23:20 UTC. Home HTML: 428,751 bytes. - [E2]
/sitemap.xmlreturns HTML, not XML.curl -sSL https://www.petsafe.com/sitemap.xml | head -c 500→ begins<!DOCTYPE html><html lang="en-us"><head><meta charSet="utf-8"/>…. Total body 360,985 bytes. Sampled 2026-09-20 23:20 UTC. - [E3]
/llms.txtreturns 404.curl -sSLI https://www.petsafe.com/llms.txt→HTTP/2 404. Sampled 2026-09-20 23:20 UTC. - [E4] Every sampled product page ships the same 15-word templated meta description. 5 URLs checked on 2026-09-20 23:22 UTC:
/p/extreme-weather-aluminum-pet-door/ZPA19-16853/,/p/wall-entry-pet-door/ZPA00-16201/,/p/extreme-weather-sliding-glass-pet-door/ZPA17-17176/,/p/gps-dog-tracker-bundle/PTK00-18293/,/p/microchip-cat-door/PPA19-16145/. All return<meta name="description" content="Buy the [product name] in the official PetSafe® store for your pet.">. See Sec. 05 — The 1,000-Page Fix. - [E5] Product pages carry meaningful JSON-LD. Same 5 URLs on 2026-09-20 23:22 UTC each returned 2 JSON-LD blocks: block 0 is a
@graphcontaining aProductGroupwith variants; block 1 is a@graphcontaining aBreadcrumbListand a hand-curatedFAQPage. TheProductGroup.descriptionfield is 1,914–3,626 characters on the products I sampled. - [E6] Stack fingerprints in
petsafe.com/HTML source, sampled 2026-09-20 23:20 UTC. Case-insensitive grep counts:cdn.shopify.com= 12;sanity= 149;klaviyo= 4;algolia= 3;triplewhale= 5;bazaarvoice= 5;gtm.js= 2.generatormeta tag readsGatsby 5.16.1; response headers includeserver: Netlify. - [E7] robots.txt (sampled 2026-09-20 23:20 UTC, 1,569 bytes) correctly disallows
?sort=,?page=,?limit=,?bvstate=,/cart,/cart.json,/search,/account/,/klaviyo-form/,/preview/. BlocksAmazonProductDiscoverybotoutright. This is the one thing on the front door that's already clean.