Research
We scanned 703 Shopify storefronts. Here's what their public product data looks like.
Optaru · September 2026 · Published 13 September 2026 · Last updated 13 September 2026
Summary
We read the public product catalogue of 703 Shopify storefronts. 585 served their data; 118 refused or were not Shopify. Across the 585 we found 21,815 sentences of 15–30 words published word-for-word by two or more unrelated stores.
Then we did a deeper pass on 20 of those stores, counting every product image. 26,640 images. Not one had alt text. Not one store at 90%, or 99%. Twenty stores out of twenty, at 100%.
That last number is the one we did not expect, so it is the one we checked hardest.
Method
Every Shopify storefront publishes /products.json— the same catalogue data the store’s own theme reads. No login, no scraping of rendered pages, no crawling behind a paywall. We requested it once per store, at most one request per 1.5 seconds, capped at 1,000 products per store.
For each store we counted:
- product images whose alt-text field is empty
- product descriptions under 120 characters
- descriptions repeated inside the same store
- sentences of 15–30 words appearing on a different store's catalogue
- Latin characters mixed with another script inside a title (a copy-paste fingerprint)
- URL handles over 70 characters or 8 hyphens
We publish no store names, no domains, and no links. Counts, dates and price ranges only.
Finding 1 — The alt-text field is empty everywhere
20 stores, 26,640 product images, zero populated alt-text fields.
The stores ranged from 48 products to 750. Handmade pottery, denim, ultralight backpacking gear, religious jewellery, cast glass, water filters, teddy bears, organic tea. American brands and imported catalogues alike. Small independents and companies with national retail distribution. The variable did not matter.
A caveat we want to state plainly: this measures the alt field stored in Shopify — the one the merchant controls and the one that travels with the image. Many themes fall back to alt="{{ product.title }}" when that field is empty, so the rendered page is often not literally blank. But a product title is a label, not a description. “Cast Glass Bowl — Amber” tells an image model nothing about what is in the picture, and it is identical across every photo of that product.
So the honest version of this finding is: the descriptive layer merchants own is unused, industry-wide. Not underused. Unused.
Finding 2 — 21,815 sentences are shared between unrelated stores
A sentence of 15–30 words appearing word-for-word on two catalogues that have no corporate relationship has one likely origin: a supplier sent both of them the same file.
The breakdown:
| Category | Clusters |
|---|---|
| Product copy | 13,092 |
| Same parent company | 6,292 |
| Promotional text | 1,558 |
| Template boilerplate | 483 |
| Policy text | 237 |
| Leaked internal text | 153 |
The 6,292 “same company” clusters are legitimate — one business running several regional domains. We separate them so they don’t inflate the number.
The remaining 13,092 product clusters are the interesting ones. One sentence we found appears on eight independent storefronts. Nobody rewrote it. Nobody noticed.
Finding 3 — The same words, at 2× to 5× the price
Because we record the price of every product carrying a shared sentence, we can watch identical copy sell at very different numbers.
A grease cleaner described in the same 28 words sells from $9.99 to $27.99 across seven stores. A children’s play frame: $25.99 to $65.99. A car seat cover: $36.99 to $79.99.
The description is doing none of the work of justifying the price, because it is the same description. Whatever makes the $65.99 version worth $65.99 is not written down anywhere on the page.
Finding 4 — 153 stores are leaking someone else’s internal text
The category we did not expect to need.
One example: ten unrelated storefronts tell their customers to contact support at an email address on a domain none of the ten own. They copied a supplier’s product description and shipped the supplier’s helpdesk address with it.
We are not publishing the address or the stores. But if a supplier’s contact details can survive a copy-paste into ten live storefronts, so can anything else that was in that file.
What this means for a store owner
Search engines do not penalise duplicate product descriptions. They deduplicate them — one page is chosen to represent the group and the others are filed away. If your description is shared with seven competitors, you are in a lottery for a single slot. We publish the findings as they turn up.
The newer problem is the answer engines. When someone asks an AI assistant for a recommendation in your category, it needs text that says something specific about your product. Supplier copy says the same specific thing about seven stores at once, so it identifies none of them. Empty alt fields mean your photographs — usually the most expensive asset in the store — contribute nothing at all.
The fix is not technical. It is that somebody has to write the words.
Limitations
- /products.json returns up to 250 products per page and we cap at 1,000 per store, so the largest catalogues are sampled, not read whole. Truncated stores are marked as such in our data.
- 118 of 703 domains could not be read: 403s, 404s, expired certificates, non-Shopify platforms. A storefront that blocks the endpoint is absent from this dataset, not exonerated by it.
- Sentence matching is exact. Lightly reworded supplier copy does not register, so 21,815 is a floor, not a ceiling.
- Detecting that two stores share a sentence says nothing about who wrote it first. Both may have received it from the same supplier. We make no claim about who copied whom, and we never will.
Reproduce it
Every number here comes from a public endpoint any merchant can request for their own store. If you want the check run for you, ours is free and reads nothing but that endpoint: optaru.com
Questions, corrections, or a store you’d like removed from our dataset: info@optaru.com
Scan your store — free
Run the same check on your own catalogue, then let Optaru rewrite what it finds. The free plan covers 3 complete products — no credit card.
Scan your store — free