AI Visibility Audit
Score by category
Executive summary
- The store scores 68 out of 100 (grade C).
- Biggest catalogue gap: 6,298 of 6,357 products (99.1%) show no product type in the public feed.
- Product and Offer markup is on 3 of 3 sample product pages. Not found on any: MerchantReturnPolicy, OfferShippingDetails, AggregateRating.
- The shipping policy is present but only 8 words long.
- robots.txt blocks 0 of 12 named AI crawlers. Crawler access is not the problem here.
Fix this first
Ranked by severity, multiplied by products affected, divided by effort.
No store-level Organization markup found
MediumSmall jobNo standalone Organization (or OnlineStore) markup on the homepage or 3 sample product pages. Product pages only name the seller inside the Offer. Homepage JSON-LD types found: WebSite.
Organization markup states who runs the shop, with its logo, contact details and official profiles, so machines do not have to piece that together.
Fix: Add Organization JSON-LD to the homepage with your name, URL, logo and contact details. Use only details that also appear on your site.
Where: /
Google Search: Organization structured data · StoreOps workflow
Refund policy gives no return window
MediumSmall job254 words on /policies/refund-policy, but no return period such as '30 days' was found. It does mention 10 business days, 15 business days, which read as processing times; check the wording.
A clear number of days is the first thing a buyer or an assistant wants from a returns policy.
Fix: State how many days the buyer has to return an item, when that period starts and who pays for return postage.
Where: /policies/refund-policy
Shopify Help: store policies · Google Search: return policy structured data · StoreOps workflow
Shipping policy is thin
MediumSmall job/policies/shipping-policy is present but thin, at 8 words. It gives a timescale (2 - 3 business days). It does not mention: UK, Ireland, EU, Northern Ireland, returns (no cross-reference).
UK and Irish buyers often ask whether a shop delivers to them and what happens if an item comes back. A short policy leaves a buyer or an assistant to guess.
Fix: In Settings, then Policies, add a short line for each place you do and do not deliver to, including the UK, Northern Ireland, Ireland and the EU, with costs, times and any duty or VAT notes. Link to your returns policy. Use only facts you can confirm.
Where: /policies/shipping-policy
The rest of the fix list
| # | Fix | Severity | Effort | StoreOps workflow |
|---|---|---|---|---|
| 4 | Store not cited in AI answers (A01) | High | Medium | ai-prompt-visibility-test |
| 5 | Product images have no alt text (P04) | High | Medium | alt-text |
| 6 | Products have no barcode (P06) | Medium | Medium | eu-product-identifiers-check |
| 7 | Review markup missing from product pages (S03) | Low | Small | review-rating-markup |
| 8 | Return policy markup missing from product pages (S05) | Medium | Medium | delivery-returns-plain-text |
| 9 | Public feed shows no product type (P01) | Medium | Medium | product-data-completeness |
| 10 | Shipping markup missing from product pages (S06) | Low | Medium | google-shipping-profile-sync |
| 11 | llms.txt holds generic agent instructions, not a shop summary (C04) | Low | Small | llms-txt-structured-data-check |
| 12 | Products have no tags (P05) | Low | Medium | tag-cleanup |
| 13 | Variants have no SKU (P08) | Low | Medium | product-data-completeness |
| 14 | Products have no image (P03) | Medium | Medium | product-data-completeness |
| 15 | Descriptions are empty or very short (P02) | Low | Large | product-description-rewrite |
| 16 | Possible test or duplicate products are live (P11) | Low | Small | shopify-catalog-eligibility-check |
| 17 | Products share identical titles (P10) | Low | Medium | product-title-audit |
| 18 | Products have a variant priced at 0 (P13) | Low | Small | pricing-anomalies |
| 19 | Every variant is unavailable (P12) | Low | Small | product-data-completeness |
All other findings
A01 · Store not cited in AI answers
HighMedium jobThe store was not cited in 5 of 5 tested buyer questions. Claude web search (Anthropic), run 4 November 2026, as a proxy for AI assistants. It is not ChatGPT, Google AI Mode or Perplexity; results vary by run and location.
If an assistant does not surface the store for a buyer's question, the buyer may never see it. The result is a snapshot from one tool.
Fix: Fix the data findings first, then repeat these questions monthly and track the trend rather than any single result.
Shopify Help: agentic storefronts and ChatGPT · StoreOps workflow
P04 · Product images have no alt text
HighMedium jobSample only: 165 of 167 images (98.8%) have no alt text. Checked on 30 products spread evenly across the catalogue, because this field is not in products.json. This is not a full-catalogue count.
Alt text is the written description of an image. It helps people using screen readers and gives crawlers text they can read.
Fix: In the product's media, choose Add alt text. Describe what is in the image in a short plain phrase. Do not stuff keywords.
Examples: product-001, product-002, product-003, product-004, product-005, product-006, product-007, product-008, product-009, product-010
P01 · Public feed shows no product type
MediumMedium job6,298 of 6,357 products (99.1%) show no product type in the public feed. products.json does not expose Shopify's standard product category, so category could not be checked from public data.
Shopify says product types are not required, so this is not an error. Filled in, they still help with automated collections and filters, can feed Google's product_type attribute, and make the public catalogue easier for AI tools to read.
Fix: First check whether the standard Product category is already set in Shopify admin. Then add Type in bulk where it helps, starting with your biggest collections and one consistent list of types.
Examples: product-011, product-012, product-013, product-014, product-015, product-016, product-017, product-018, product-019, product-020
Shopify Help: product category and type · Shopify Help: product category · Google Merchant Center: product_type · StoreOps workflow
P03 · Products have no image
MediumMedium job41 of 6,357 products (0.6%) have no images.
Google Merchant Center requires an image for each product, so these items cannot appear in shopping results or be shown properly by assistants.
Fix: Filter Products by those with no media, add a clear image of the actual item, or unpublish the product until you have one.
Examples: product-030, product-031, product-032, product-033, product-034, product-035, product-036, product-029, product-037, product-038
Google Merchant Center product data specification · Shopify Help: product details · StoreOps workflow
P06 · Products have no barcode
MediumMedium jobSample only: 30 of 30 products (100.0%) have no barcode on any variant. Checked on 30 products spread evenly across the catalogue, because this field is not in products.json. This is not a full-catalogue count.
A GTIN helps Google identify a product made by another brand. Made-to-order or own-brand goods often have no GTIN, and that is allowed.
Fix: If you resell branded goods, copy the manufacturer's GTIN into the Barcode field. If you make the product yourself, leave it empty and tell Merchant Center it has no identifier. Never invent or buy codes to fill the gap.
Examples: product-011, product-001, product-002, product-003, product-004, product-005, product-006, product-007, product-008, product-009
Google Merchant Center: GTIN · Shopify Help: product details · StoreOps workflow
S05 · Return policy markup missing from product pages
MediumMedium jobReturn policy markup is missing on 3 of 3 sample product pages (the first 3 in products.json).
This states your return window in a form Google can read, so it does not have to interpret your policy page.
Fix: Add hasMerchantReturnPolicy to your Offer or Organization markup, or set returns in Merchant Center. The values must match your published policy.
Where: /products/product-011, /products/product-012, /products/product-065
Google Search: return policy structured data · Google Search: merchant listing structured data · StoreOps workflow
C04 · llms.txt holds generic agent instructions, not a shop summary
LowSmall job/llms.txt is present (760 words) but reads as platform-generated agent instructions rather than a description of this shop.
llms.txt is a proposal, not a ranking factor. This file gives agents instructions on how to shop, but says little about what makes this store different.
Fix: Optional and low priority. Check whether your platform lets you customise the file before spending any time on it.
Where: /llms.txt
llms.txt proposal · Shopify Help: agentic storefronts and ChatGPT · StoreOps workflow
P02 · Descriptions are empty or very short
LowLarge job107 of 6,357 products (1.7%) have an empty description or fewer than 50 words. 91 are empty and 16 are under 50 words.
AI tools and search engines can only repeat what the page says. A thin description gives them no size, material, use or delivery facts to quote.
Fix: Work through best sellers first. Add the real facts: what it is, size, material, how it is made and who it suits. Use only facts you can confirm.
Examples: product-039, product-040, product-041, product-042, product-043, product-044, product-045, product-046, product-047, product-048
Shopify Help: product details · Google Merchant Center product data specification · StoreOps workflow
P05 · Products have no tags
LowMedium job220 of 6,357 products (3.5%) have no tags.
Tags power automated collections and on-site filters. They are an internal tool, so this matters less than the visible product data.
Fix: Agree a short tag list, then add tags in bulk from the Products page. Only do this if you will use them for collections or filters.
Examples: product-011, product-012, product-013, product-014, product-015, product-021, product-022, product-023, product-024, product-025
P08 · Variants have no SKU
LowMedium job483 of 86,775 variants (0.6%) have no SKU. 119 products are affected.
SKUs are your own stock codes. They do not affect buyers directly, but they make bulk edits, feeds and stock matching far safer.
Fix: Export products to CSV, fill the Variant SKU column with a simple consistent pattern and re-import a small test batch first.
Examples: product-011, product-012, product-013, product-014, product-015, product-026, product-027, product-028, product-016, product-029
P10 · Products share identical titles
LowMedium job40 of 6,357 products (0.6%) share an exact title with another product. They fall into 18 groups.
When several products have the same name, buyers and machines cannot tell them apart, and they can compete with each other.
Fix: Review each group. Merge true duplicates into one product with variants, or add the detail that makes each title different.
Examples: product-051, product-052, product-053, product-054, product-055, product-056, product-057, product-058, product-059, product-060
Google Merchant Center product data specification · Shopify Help: product details · StoreOps workflow
P11 · Possible test or duplicate products are live
LowSmall job25 of 6,357 products (0.4%) have a title or handle that looks like a test, copy or placeholder.
Test items and copies make a catalogue look unreliable and can surface in search. The match is on words such as 'test', 'copy' or 'sample', so some may be genuine products.
Fix: Review the list by hand. Set anything that is not for sale to Draft. Do not delete in bulk from this list alone.
Examples: product-030, product-031, product-032, product-033, product-034, product-035, product-036, product-016, product-049, product-050
P12 · Every variant is unavailable
LowSmall job1 of 6,357 products (under 0.1%) have every variant unavailable.
Live product pages that cannot be bought are a dead end for a buyer who was sent there by an assistant.
Fix: Restock them, set them to continue selling if they are made to order, or unpublish them and redirect the URL.
Examples: product-064
Google Merchant Center product data specification · StoreOps workflow
P13 · Products have a variant priced at 0
LowSmall job3 of 6,357 products (under 0.1%) have at least one variant priced at 0.
A zero price is usually a mistake and can be rejected by shopping feeds. It may be intentional for a free add-on, so check each one.
Fix: Open each listed product, confirm the price and correct it, or hide the variant if it should not be for sale.
Examples: product-061, product-062, product-063
Google Merchant Center product data specification · StoreOps workflow
S03 · Review markup missing from product pages
LowSmall jobAggregateRating or Review markup is missing on 3 of 3 sample product pages. Review app code was found on the pages (judge.me). No review count was visible in the page HTML, so these products may simply have no reviews yet. Apps can also add markup with JavaScript, which this check does not run.
Review markup lets search engines read your rating. It is only valid when it reflects real reviews shown on that page.
Fix: If products have real reviews, turn on your review app's structured data setting, then test a reviewed product page. Never add ratings that are not on the page.
Where: /products/product-011, /products/product-012, /products/product-065
Google Search: review snippet structured data · StoreOps workflow
S06 · Shipping markup missing from product pages
LowMedium jobShipping markup is missing on 3 of 3 sample product pages (the first 3 in products.json).
This states delivery cost and time in a machine-readable way for shopping results.
Fix: Add shippingDetails to the Offer markup, or manage shipping in Merchant Center. The values must match what checkout charges.
Where: /products/product-011, /products/product-012, /products/product-065
Google Search: merchant listing structured data · StoreOps workflow
AI mentions
Claude web search (Anthropic), run 4 November 2026, as a proxy for AI assistants. It is not ChatGPT, Google AI Mode or Perplexity; results vary by run and location.
| Buyer question | Cited? | Recommended instead | Searches |
|---|---|---|---|
| What's the best way to turn a favourite family photo into a canvas print in the UK, and should I go for a 30mm or 40mm depth? | No | Printerpix, Photobox, Asda Photo, Morrisons Photo, Mixtiles | 2 |
| Can anyone recommend a UK company that makes handmade personalised canvas prints and delivers quickly? | No | Your Image 2 Canvas, Inkifi, Printerpix, Bags of Love, Canvasdesign.co.uk, The Canvas Printing Company, MYPICTURE, Value Canvas Prints | 2 |
| I'm looking for a gift for our 25th wedding anniversary. Are personalised banners or a custom canvas better, and where can I order one? | No | Not on the High Street (Hopsack & Olive canvas), Not on the High Street (Cherry Pete photo collage), eBay (personalised giant 25th Silver Wedding Anniversary poster banner), Argos (25th Anniversary banner), Zazzle UK, The Sign Shed, Tradeprint, Aura Print | 2 |
| What's the difference between a floating frame canvas and a standard stretched canvas, and which looks better for modern home decor? | No | Easyframe (UK), Print Panoramics (UK), Rossetti Art, Wallpics, Americanflat | 2 |
| Where can I buy strong brown parcel tape in bulk, 48mm or 75mm wide, with fast UK delivery for my small online business? | No | Mailcoms, Prontodirect (Brawny), Home Hardware Direct (Ultratape), Springpack (Reelbond Pro), Stikky Tape, Kingfisher Direct, ESE Direct, RAJA Packaging, 3M Scotch, The Safety Supply Company (Slingsby 75mm), Workplace Depot, Kaiserkraft | 3 |
Everything we checked
Passes as well as problems, so you can see what is already working.
Product data
| Check | Scope | Affected | Share |
|---|---|---|---|
| No product type in public feed | All | 6,298 of 6,357 products | 99.1% |
| No tags | All | 220 of 6,357 products | 3.5% |
| No images | All | 41 of 6,357 products | 0.6% |
| Title over 150 characters | All | 0 of 6,357 products | 0.0% |
| Possible junk or test products | All | 25 of 6,357 products | 0.4% |
| All variants unavailable | All | 1 of 6,357 products | under 0.1% |
| Price of zero | All | 3 of 6,357 products | under 0.1% |
| Empty or thin description | All | 107 of 6,357 products | 1.7% |
| Variants with no SKU | All | 483 of 86,775 variants | 0.6% |
| Duplicate titles | All | 40 of 6,357 products | 0.6% |
| Images missing alt text | Sample | 165 of 167 images | 98.8% |
| Products with no barcode | Sample | 30 of 30 products | 100.0% |
| Barcodes failing the GTIN check digit | None to test in the sample | ||
Structured data
| JSON-LD type | Homepage | Sample 1 | Sample 2 | Sample 3 |
|---|---|---|---|---|
| Product | — | Found | Found | Found |
| Offer | — | Found | Found | Found |
| AggregateRating | — | Not found | Not found | Not found |
| Review | — | Not found | Not found | Not found |
| Organization | Not found | Not found | Not found | Not found |
| BreadcrumbList | — | Found | Found | Found |
| MerchantReturnPolicy | — | Not found | Not found | Not found |
| OfferShippingDetails | — | Not found | Not found | Not found |
Review app code on sample pages: judge.me.
Policies and trust pages
| Page | Status | Words | Detail |
|---|---|---|---|
| Refund policy | Present | 254 | Return window: not found |
| Shipping policy | Present but thin | 8 | Names: none. Timescales: 2 - 3 business days. Returns cross-reference: no |
| Privacy policy | Present | 2,388 | |
| Terms of service | Present | 3,515 | |
| Contact page | Present | 26 | |
| FAQ page | Present | 797 |
AI crawlers in robots.txt
| Crawler | Operator | Purpose | Rule from | / | /products/ |
|---|---|---|---|---|---|
| GPTBot | OpenAI | Training | * group | Allowed | Allowed |
| OAI-SearchBot | OpenAI | Search | * group | Allowed | Allowed |
| ChatGPT-User | OpenAI | User fetch | * group | Allowed | Allowed |
| PerplexityBot | Perplexity | Search | * group | Allowed | Allowed |
| Perplexity-User | Perplexity | User fetch | * group | Allowed | Allowed |
| ClaudeBot | Anthropic | Training | * group | Allowed | Allowed |
| Claude-SearchBot | Anthropic | Search | * group | Allowed | Allowed |
| Google-Extended | Training | * group | Allowed | Allowed | |
| Applebot-Extended | Apple | Training | * group | Allowed | Allowed |
| CCBot | Common Crawl | Training | * group | Allowed | Allowed |
| Bytespider | ByteDance | Training | * group | Allowed | Allowed |
| meta-externalagent | Meta | Training | * group | Allowed | Allowed |
Discovery files
- sitemap.xml is a sitemap index with 12 child sitemaps, with 6,342 product URLs in 7 of 7 product sitemaps.
- robots.txt declares 1 sitemap line(s).
- llms.txt: present (760 words), generic platform text.
- llms-full.txt: present (760 words), generic platform text.
How the score was worked out
The score is a weighted average of the categories below, with no judgement calls. Anything that could not be checked is left out and the remaining weights are scaled up. Grades: A 85+, B 70–84, C 55–69, D 40–54, E below 40.
Product data (35 points)74/100
Weighted average of the share of products (or images/variants) passing each check.
| Component | Weight | Result |
|---|---|---|
| Product type in the public feed | 10 | 59 of 6,357 products pass |
| Description of 50+ words | 35 | 6,250 of 6,357 products pass |
| Has images | 20 | 6,316 of 6,357 products pass |
| Images have alt text | 10 | 2 of 167 images pass (sample) |
| Has tags | 10 | 6,137 of 6,357 products pass |
| Variants have SKUs | 10 | 86,292 of 86,775 variants pass |
| Has a barcode | 5 | 0 of 30 products pass (sample) |
Structured data (20 points)60/100
Points for each schema type found in JSON-LD on the sample pages.
| Component | Weight | Result |
|---|---|---|
| Product | 30 | 3 of 3 sample product pages |
| Offer | 20 | 3 of 3 sample product pages |
| AggregateRating or Review | 10 | 0 of 3 sample product pages |
| BreadcrumbList | 10 | 3 of 3 sample product pages |
| MerchantReturnPolicy | 10 | 0 of 3 sample product pages |
| OfferShippingDetails | 5 | 0 of 3 sample product pages |
| Organization (homepage or product page) | 15 | not found |
Policies & trust facts (15 points)70/100
Points for each policy fact found on the policy page itself (site navigation and footer are excluded).
| Component | Weight | Result |
|---|---|---|
| Refund policy published | 25 | published |
| Refund policy gives a day window | 15 | not found |
| Shipping policy published | 15 | published |
| Shipping policy has 50+ words | 5 | no (8 words) |
| Shipping policy names UK, Ireland, EU and NI | 10 | 0 of 4 named |
| Shipping policy gives timescales | 10 | found |
| Privacy policy published | 5 | published |
| Terms of service published | 5 | published |
| Contact or FAQ page | 10 | found |
AI crawler access & llms.txt (10 points)100/100
Share of AI crawler and path checks allowed by robots.txt (85 points) plus an llms.txt file (15 points).
| Component | Weight | Result |
|---|---|---|
| AI crawlers allowed | 85 | 24 of 24 crawler and path checks |
| llms.txt present | 15 | present |
Catalogue hygiene (10 points)97/100
Each check starts at full marks and falls in a straight line to zero at 10% of products affected.
| Component | Weight | Result |
|---|---|---|
| No junk or test products | 30 | 25 of 6,357 affected |
| No duplicate titles | 30 | 40 of 6,357 affected |
| Products available | 15 | 1 of 6,357 affected |
| No zero prices | 15 | 3 of 6,357 affected |
| Titles under 150 characters | 10 | 0 of 6,357 affected |
AI mentions (10 points)0/100
Share of tested questions where the store's domain or name appeared in the cited URLs or recommendations.
| Component | Weight | Result |
|---|---|---|
| Store cited | 100 | 0 of 5 questions |
Method and limits
- Public data only. There was no admin access, so nothing about orders, traffic or private settings was seen.
- products.json only shows products published to the Online Store sales channel. It does not expose Shopify's standard product category, so category could not be checked.
- Barcodes and image alt text are not in products.json. Where a count says 'sample', it comes from about 30 products spread evenly across the catalogue, not every product.
- Structured data was read from the raw HTML of the first three products in products.json. Markup added later by JavaScript, or used only on other pages, is not seen.
- robots.txt shows what a site asks crawlers to do. It does not show whether a firewall or CDN actually lets them through.
- Google Merchant Center was not checked, so feed status and disapprovals are unknown.
- AI results, where included, are a snapshot from one tool and vary by run and location.
- The score is a StoreOps measure of readiness. It is not a Google or OpenAI metric and does not predict sales or rankings.
Sources
- Google Merchant Center product data specification: https://support.google.com/merchants/answer/7052112
- Google Merchant Center: GTIN: https://support.google.com/merchants/answer/6324461
- Google Merchant Center: product_type: https://support.google.com/merchants/answer/6324406
- Google Search: merchant listing structured data: https://developers.google.com/search/docs/appearance/structured-data/merchant-listing
- Google Search: review snippet structured data: https://developers.google.com/search/docs/appearance/structured-data/review-snippet
- Google Search: Organization structured data: https://developers.google.com/search/docs/appearance/structured-data/organization
- Google Search: return policy structured data: https://developers.google.com/search/docs/appearance/structured-data/return-policy
- Shopify Help: agentic storefronts and ChatGPT: https://help.shopify.com/en/manual/online-sales-channels/agentic-storefronts/chatgpt
- Shopify Help: store policies: https://help.shopify.com/en/manual/checkout-settings/refund-privacy-tos
- Shopify Help: image alt text: https://help.shopify.com/en/manual/online-store/images/alt-text
- llms.txt proposal: https://llmstxt.org/
StoreOps Prompts — AI Visibility Audit, 4 November 2026. Every figure comes from public data collected on that date.