Deep Audit Case Study: The Sales a DTC Brand Loses on Its Product Pages
Third in our monthly series. We've done a law firm and a dental group. This month we're on ecommerce heading into the holidays — and doing something different. For a store, the homepage isn't where you make money; the product page is. So we pointed a Deep Audit at a single product page and read every finding that costs a sale.
Auditing the homepage of an ecommerce store tells you almost nothing about whether it sells. We pointed the audit at one product page instead and it came back 3.92 on AI readability, 2.34 on SEO — with two crawlability findings a homepage audit would have reported as fine.
Our subject is Beardbrand, a mid-sized DTC grooming brand on Shopify. We audited one product page — their beard brush — because that is where the money is.
The output
Deep Audit — https://www.beardbrand.com/products/beard-brush
==============================================================
LAI Score: 3.51/5 (good) confidence 61.29%
AI 3.92/5 SEO 2.34/5 Local n/a
Tasks scored: 5962 (passed 1958, warned 2267)
Section scores (0-5):
S1 Technical Foundation & Rendering 4.37
S2 Crawlability & Site Architecture 2.49
S3 Content Quality & Entity Semantics 4.26
S4 Core Web Vitals & Performance 2.78 ← conversion killer
S5 Technical SEO & Index Control 3.61
S6 Schema, Local, Trust & E-E-A-T 2.30 ← weakest
S7 Security & Privacy 4.44
S8 Multimodal Content & Media 3.46
S9 Off-Site Signals & Reputation 3.49
The same pattern we keep finding — strong content, weak machine-readable SEO — but on a product page the consequences are more direct.
| Finding | What it means | What it costs |
|---|---|---|
S6 6.8.01 No Review schema |
Product reviews on the page aren't marked up | No star rating in Google results |
S4 4.9.01/02 Organization schema, no sameAs |
Brand entity is thin | Weaker brand trust signal |
S4 4.2.01 212KB inline JS across 61 blocks |
Heavy scripts block rendering | Slow product page |
S4 CWV = 2.78 |
Poor Core Web Vitals | Conversion risk |
S2 2.5.02 sitemap has 0 URLs |
Product URLs not in a discoverable sitemap | Crawlers can't reliably find products |
S2/S5 2.1.01 No robots.txt found |
No crawl directives detected | Crawl budget wasted |
S2 2.7.02 Text-to-HTML 4% |
96% markup/script | Thin crawlable signal + slow |
S6 6.7.01 No FAQPage |
Product Q&A not marked up | Miss AI answer citations |
S3 3.10.01 No llms.txt |
No AI-crawler guidance | Weaker answer-engine presence |
Fix 1 — The one that shows stars: Product + Offer + AggregateRating
The highest-ROI change on any product page. A result showing ★ 4.8 gets more clicks than a bare link, and that requires review markup. Build against Google's product structured data guide and the review snippet requirements.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Beard Brush",
"image": "https://www.beardbrand.com/beard-brush.jpg",
"description": "Boar's hair beard brush for styling and distributing oils.",
"sku": "BB-BRUSH-01",
"brand": { "@type": "Brand", "name": "Beardbrand" },
"offers": {
"@type": "Offer",
"price": "25.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://www.beardbrand.com/products/beard-brush"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "612"
}
}
</script>
Generate this from catalog data, not by hand. On Shopify that means editing
the product template so price, availability, sku, and the real review
aggregate are injected for every product automatically. The ratings must be real
and shown on the page —
fabricated AggregateRating
is a manual-action risk.
A caveat on the star payoff: rich results are never guaranteed. Valid markup makes you eligible; Google decides per query whether to show it. Treat this as removing a blocker, not as buying a feature.
Fix 2 — Get availability and price right, per variant
The most common product-schema mistake is stale availability. If a product is
out of stock but your schema says InStock, you lose trust and risk the
markup being ignored. Wire these to live inventory:
availability:InStock/OutOfStock/PreOrder/BackOrderprice+priceCurrency: from the variant being viewedpriceValidUntil: for sale prices
For multi-variant products, emit an Offer per variant, or AggregateOffer
with lowPrice/highPrice so the result shows an accurate range.
Fix 3 — Speed is conversion: the 2.78 Core Web Vitals
This page ships 212KB of inline JavaScript across 61 script blocks
(4.2.01), which is why Section 4 sits at 2.78.
- Audit third-party apps. Shopify stores accumulate review widgets, upsell
apps, chat, and pixels — each injecting script. Remove what you don't use;
deferthe rest. - Don't block the add-to-cart path. Product image, price, and buy button render first. See optimizing LCP.
- Trim inline JS into deferred bundles.
We break the ratio and performance work down in fixing a low text-to-HTML ratio, including why the ratio is a symptom rather than a ranking factor.
Worth stating plainly: the "every 100ms costs X% conversion" statistics you have seen are drawn from other companies' sites and do not transfer to yours. Faster is better and Core Web Vitals are a confirmed ranking input, but if you want a conversion number for your store, measure it.
Fix 4 — Make every product discoverable
S2 2.5.02 (sitemap has 0 URLs) and the missing robots.txt (2.1.01) are a
crawlability problem. Shopify generates /sitemap.xml automatically — confirm
it is populated, referenced from
/robots.txt,
and submitted in Search Console. If a custom theme or app is interfering, that is
the fix. Products that aren't crawled can't rank.
This is the finding that justifies auditing product pages rather than the homepage: a sitemap reporting zero URLs is invisible from the front door.
Fix 5 — Product Q&A as FAQPage, plus llms.txt
6.7.01 and 3.10.01. Shoppers ask the same things — how long does it last, is
it for coarse hair. Mark that Q&A up as FAQPage.
With one correction to the standard advice: Google
deprecated the FAQ rich result
and stopped showing it in Search as of May 7, 2026. Any guide telling you
FAQPage wins FAQ rich results is out of date. It is still worth shipping —
AI shopping assistants parse it — but expect answer-engine citations, not a
Google SERP feature.
Then ship an llms.txt so those assistants know
where your categories, guides, and policies live. It is a proposed convention
rather than a standard any vendor has committed to honoring — cheap to ship,
not a guaranteed channel.
Fix 6 — Organization sameAs and WebSite
4.9.01/02, 6.4.01. The brand has Organization schema but no sameAs — add
links to verified social and marketplace profiles so answer engines can confirm
the entity. Add WebSite schema for the sitelinks search box.
What this wins back — honestly
No fabricated after-score, and no revenue projection — we can't see their traffic, margins, or competitors.
- Fix 1 is the difference between a bare listing and one eligible to show ★ 4.8 on every product that already ranks.
- Fixes 2–3 protect conversion once the shopper lands.
- Fix 4 determines whether products are in the race at all.
The schema work is a template change, not per-page labor — do it once and it applies to the catalog. That is the real economics of ecommerce SEO: one fix, thousands of products.
What it will not fix is a product nobody searches for, or a brand with no authority behind it. Structured data makes an existing demand signal legible; it does not create demand.
Run it on your own product pages
Audit the products that make you money, and your best-selling competitor's:
curl -X POST "https://seoscoreapi.com/site-audit" \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"url": "https://yourstore.com/products/best-seller"}'
Fix the product template once and re-audit to confirm the stars, price, and availability validate. See our Q4 readiness checklist for the full pre-holiday pass.
See plans and pricing → — Pro and Ultra include 20 and 100 Deep Audits a month plus batch auditing, so you can score every top product and re-audit the catalog.
Next month: another mid-sized store, and the schema that decides whether your products win the holiday-gift searches.