MOUSA·BATARSEH Independent DTC ops review · PetSafe Brands · 2026-09-20

Sec. 01 — Overview · for the DTC Ecommerce Ops & Insights Specialist role

Evidence page · sampled 2026-09-20

The 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.

0
application/ld+json blocks on the petsafe.com homepage
2026-09-20 23:20 UTC · curl petsafe.com/ | grep -c 'application/ld+json' → 0 in 428,751 bytes · [E1]
HTML
/sitemap.xml returns the Gatsby homepage HTML, not an XML sitemap
2026-09-20 23:20 UTC · curl petsafe.com/sitemap.xml → 360,985 bytes, first 500 chars begin <!DOCTYPE html> · [E2]
404
/llms.txt — missing AI-ingestion signal
2026-09-20 23:20 UTC · curl -I petsafe.com/llms.txt → HTTP/2 404 · [E3]
15
Words in the meta description on every product page — the same template, verbatim
2026-09-20 23:20 UTC · 5 product pages sampled; each returns "Buy the [name] in the official PetSafe® store for your pet." · [E4]
Signals

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.

2026-09-20 · homepage grep returned 0; product page /p/extreme-weather-aluminum-pet-door/ZPA19-16853/ returned 2 JSON-LD blocks (Product+Breadcrumb, FAQPage) · [E5]
Operations

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.

2026-09-20 · see [E2] and [E3]
Insights

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.

Scope petsafe.com · homepage + 5 product pages Method curl, page source, robots, sitemap, llms.txt, JSON-LD parse Stack seen Gatsby 5.16.1 / Netlify / Shopify / Sanity / Klaviyo / Algolia / Triple Whale / Bazaarvoice / GTM Independent — not affiliated with PetSafe Brands

Evidence log

Every claim on this page, with its date, source, and a command you can rerun.

  1. [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.
  2. [E2] /sitemap.xml returns 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.
  3. [E3] /llms.txt returns 404. curl -sSLI https://www.petsafe.com/llms.txt → HTTP/2 404. Sampled 2026-09-20 23:20 UTC.
  4. [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.
  5. [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 @graph containing a ProductGroup with variants; block 1 is a @graph containing a BreadcrumbList and a hand-curated FAQPage. The ProductGroup.description field is 1,914–3,626 characters on the products I sampled.
  6. [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. generator meta tag reads Gatsby 5.16.1; response headers include server: Netlify.
  7. [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/. Blocks AmazonProductDiscoverybot outright. This is the one thing on the front door that's already clean.