Key takeaways
- Rubric A is the buy path: add-to-cart, variants, stock, price, media, a buy control that survives scroll, and a way to ask a question.
- Rubric B is AOV: PDP offers, quantity breaks, cart goals, delivery, proof, drawer, intent popup, urgency.
- Rubric C is hygiene at the buy box — stacked widgets, primaries, protection, trust badges, JSON-LD vs catalogue. D is post-purchase Next — not a fail.
- The status word follows the 0–100 score. The line beside it names which rubric missed. Ranked misses stay capped so you act.
- Install the owner of the top miss if it is an app row. Fix the theme if it is a theme row.
The CRO Audit for Shopify stores checks a live product page in order: can they buy, then does the basket grow, then is the buy box fighting itself, then a post-purchase note that does not count as a fail. It is a filter, not an encyclopedia — three scored rubrics plus Next, so a merchant can act the same day.
How we score is the basis: Ninety9’s product-page rubric, not a conversion forecast. What the audit actually is is the definition. This post is the layers.
How the rubric is ordered
Buy path first. If add-to-cart is missing, the rest of CRO is fan fiction. AOV second, once the page can sell. Hygiene third, so stacked widgets do not hide a working button. Post-purchase last, as Next, not a fail.
The report status is a score band (Solid, Strong, Uneven, Patchy, Thin, and so on). The short line beside it names which rubric missed — Fail in Rubric A is still a buy-path week even if four AOV rows also failed. The sheet shows every row; the big word is how the number scored. Ranked misses stay capped at seven plus one post-purchase note so you act.
Run a store or a product URL in the CRO Audit for Shopify stores. Paste a domain if you want a bestseller. Paste a /products/ URL if you already know which page is leaking.
Rubric A — can they buy?
If add-to-cart is missing, the rest of CRO is fan fiction.
The crawl looks for a real buy control, variant choice that does not dead-end, stock that matches what the page claims, a price that is not a fake compare-at, enough media to justify the ask (three or more photos, or a video / 3D viewer), a control that still exists after the shopper scrolls — sticky bar or a drawer that counts as “still there” — and a way to ask a question (email, phone, contact page, or a chat widget). Header and footer on that product page count.
These are mostly theme jobs. The report will not pretend an app install fixes a $0.00 price.
Worked example: the featured image is fine, but add-to-cart sits below the fold on a phone and there is no sticky bar. Rubric A fails. Week one is a theme ticket, not a bundle app.
Rubric B — does the basket grow?
Once the page can sell, the question is whether it asks for more.
- A product-page offer (frequently bought together, bundle, add-on) — Addly owns the miss if the theme is silent. A theme FBT block can pass this check without Addly.
- Quantity or volume breaks — also Addly; a theme FBT block does not satisfy this.
- A cart goal (free shipping, gift, threshold) — Goalify.
- Delivery promise, proof, urgency that is not a fake countdown, shipping protection — Addy territory when they belong in the cart.
- A cart drawer after add, and an intent popup on add or exit — Addy and Monet respectively.
The crawl uses public product HTML, /products/{handle}.js, /cart, and when Chromium is available a real add-to-cart so the drawer is not a ghost in the theme JSON. Screenshots after add-to-cart exist because drawers and popups often exist only after the click. Static HTML misses them.
Rubric C, then after they pay
Stacked widgets that fight each other. Too many primaries. Protection in the cart. Trust badges (payment icons, seals) on the product page — header and footer count. JSON-LD that disagrees with the catalogue — a shopping-feed problem, not a missing buy button. That is rubric C — hygiene at the buy box.
Post-purchase is Next, not fail (rubric D). The audit never reaches the thank-you page. Reviso is named so you know the job exists. It does not count against health.
Checkout is Shopify-hosted and not a public product page. The audit stops at the cart. Payment methods and Shop Pay are out of scope.
What is deliberately missing
SEO titles. Alt text as a ranking factor. Blog internal links. Accessibility as a 50-item WCAG dump. Those can be real work. They are not this rubric.
Analytics. The audit cannot see add-to-cart rate. It can see whether the button exists.
Discounts and checkout. Private codes and Shop Pay are not in the public HTML we are allowed to fetch without logging in.
A pass means the signals the rubric can see are present. Copy, photography, offer and ads still decide conversion.
How to read a miss
Each finding is a constraint or an AOV miss, with an owner when an app owns the job. Install the owner of the top miss if it is an app row. Fix the theme if it is a theme row. Do not average them into “we need more apps.”
Seven ranked misses plus one post-purchase note is enough to pick the next hour of work. A 40-row SEO newspaper does not get a theme ticket.
How to run the audit is the click-path. The rubric is short so the next action fits in a standup, not a workshop.
Paste a domain if you want a bestseller. Paste a /products/ URL if you already know which page is leaking. Then do the top row — theme or app — and stop stacking installs.
Frequently asked questions
What is this score based on?
Ninety9’s product-page rubric — defaults we apply the same way on every public Shopify PDP. It is not a conversion-rate prediction, and it will not fit every store or situation. How we score.
Why isn't checkout in the audit?
Checkout is Shopify-hosted and not a public product page. The audit stops at the cart. Payment methods and Shop Pay are out of scope.
Why only seven findings?
A 40-row SEO newspaper does not get a theme ticket. Seven ranked misses plus one post-purchase note is enough to pick the next hour of work.
Does a pass mean the page is good?
It means the signals the rubric can see are present. Copy, photography, offer and ads still decide conversion.
Can a theme FBT pass the offer check?
Yes. If the live HTML already sells an add-on or bundle, the offer check can pass without Addly. Quantity breaks are a separate check.
Why screenshots after add-to-cart?
Drawers and popups often exist only after the click. Static HTML misses them. Chromium clicks add, waits, then scores what appeared.



