Sec. 05 — The 1,000-Page Fix · a specific problem, cited on 5 real product pages
Evidence + prescription — every claim on this page names the URL and the date I sampled itThe copy is already written. It just isn't reaching the head.
Every PetSafe product page ships the same 15-word templated meta description:
"Buy the [product name] in the official PetSafe® store for your pet."
Meanwhile, the JSON-LD on the same page carries 1,500–3,600 characters of rich, benefit-focused product copy — copy that PetSafe already wrote, already stores in Sanity, already renders as machine-readable schema. That copy just never reaches <meta name="description">. Every product page's Google snippet, every social share preview, every AI answer citation, uses the template. Fix once in the Gatsby template. Ships every page.
<meta> tags below · [F1]
"Buy the [name] in the official PetSafe® store for your pet."
len(JSON-LD.description) on /p/gps-dog-tracker-bundle/PTK00-18293/ · [F2]
<meta name="description"> — swap the field it reads from Sanity
The Repair Bench
Pick a real PetSafe product below. Each column shows one option for the meta description on that page: what ships today, an automatic extract from the description already on the page, or a rewritten version hand-crafted to the 150-char sweet spot. The mock SERP result below the columns shows what Google would render for each. Every product's data on this page was pulled from the live URL on 2026-09-20 23:22 UTC.
Select a product…
—
—
Where in the stack this fix lives
Prescription · one field, one template line# Sanity schema — the product document already has these fields product { name: string description: portableText # ← rich copy, already written, currently only feeds JSON-LD seoDescription: string, 155 max # ← ADD THIS. Optional; falls back to auto-extract from `description`. ... } # Gatsby template — one line change in the <Helmet> block <meta name="description" content={ product.seoDescription # explicit override wins || firstSentence(product.description, 155) # auto-extract fallback || `Buy the ${product.name} in the official PetSafe® store for your pet.` # current template stays as last resort } />
This is the DTC Ops role, not a dev sprint
Sanity schema change: schema editor. Gatsby template change: one PR, one file, ~6 lines. Content: I write the first 20 seoDescription values for the top-selling products, and hand marketing/merch a template so they can write the rest at their own pace.
Success is provable in Search Console
Baseline the top 20 product URLs' CTR and impressions this month. Ship the change. Read Search Console at 30 and 60 days. If the fix works, CTR on those URLs moves; if it doesn't, we know before we've scaled it.
Bazaarvoice Reviews SEO is off
On the same product pages, the Questions widget carries data-bv-seo="true". The Reviews widget carries data-bv-seo="false". Reviews are the bigger data set and they're invisible to Google. Same category of fix; same order of magnitude of upside.
/p/extreme-weather-aluminum-pet-door/ZPA19-16853/
The line I keep coming back to
This fix ships once and improves every product URL PetSafe has. It uses copy PetSafe already paid to write. It doesn't touch strategy, brand voice, or roadmap priorities. It's exactly the shape of ticket the "elbow grease backlog" line in the JD was written about — and it's the kind of thing I'd pull off the shelf in my first 30 days.
Evidence log — Sec. 05
Real product data behind the Repair Bench. All sampled 2026-09-20 between 23:22 and 23:25 UTC.
- [F1a]
/p/extreme-weather-aluminum-pet-door/ZPA19-16853/·<meta name="description" content="Buy the Extreme Weather Aluminum Pet Door™ in the official PetSafe® store for your pet.">· JSON-LDdescriptionlength: 1,157 chars. - [F1b]
/p/wall-entry-pet-door/ZPA00-16201/·<meta name="description" content="Buy the Pet Door for Wall - Wall Entry Pet Door in the official PetSafe® store for your pet.">·h1appears twice on this page. - [F1c]
/p/extreme-weather-sliding-glass-pet-door/ZPA17-17176/·<meta name="description" content="Buy the Extreme Weather Sliding Glass Pet Door™ in the official PetSafe® store for your pet."> - [F1d]
/p/gps-dog-tracker-bundle/PTK00-18293/·<meta name="description" content="Buy the GPS Dog Tracker + Activity Monitoring in the official PetSafe® store for your pet.">· JSON-LDdescriptionlength: 3,626 chars. First 200: "Whether your dog is chasing squirrels at the park or napping under a shady tree in the backyard, you can stay connected to their adventures in real time. The PetSafe® GPS Dog Tracker brings together l…" - [F1e]
/p/microchip-cat-door/PPA19-16145/·<meta name="description" content="Buy the Microchip Cat Door in the official PetSafe® store for your pet.">· JSON-LDdescriptionlength: 1,914 chars. - [F2] Bazaarvoice SEO flags on
/p/extreme-weather-aluminum-pet-door/ZPA19-16853/:data-bv-show="questions" data-bv-seo="true"(Q&A is SEO-rendered);data-bv-show="reviews" data-bv-seo="false"anddata-bv-show="rating_summary" data-bv-seo="false"(reviews and rating summaries are NOT SEO-rendered). Same values expected across the catalog since the widgets are template-driven. - [F3] Google's rendered meta-description snippet typically caps around 155–160 chars on desktop and 120 on mobile; over-length descriptions are truncated. Sources: Google Search Central docs (public, permanent link) and my own recent SERP samples during snippet testing on other client sites.