AI Visibility (AIO) Audit

Can AI agents read Nanobag correctly?

nanobag.com · 14 marketsAudited 24 Aug 2026Prepared by Shubham Yadav

Verdict: the llms.txt is decent brand copy, but it does not tell AI the catalog is segregated — and it actively points agents at the raw feed that exposes the segregation with zero explanation.

The file describes 6 clean product lines. The /products.json feed it links to returns 35 products: per-market duplicates (SG, CA, UK, EU, AU, Int, US), free-gift items, channel copies, and two live test products — including "Nanobag - USA", a 2×-weight test listing. An AI agent following the file's own pointer sees a contradictory catalog and has no way to know which product to recommend.

01Scorecard

AreaStatusSummary
llms.txt exists & well-formedPassLive at /llms.txt, clean markdown, specs, agent guidance, use cases.
Market segregation disclosedFailZero mention of markets, regional duplicates, or canonical handles.
Catalog hygiene for agentsFailFeed exposes 35 products incl. test items and free gifts, unexplained.
AI crawler accessPassNo blocks on GPTBot, ClaudeBot, PerplexityBot, Google-Extended.
Product structured dataPartialProductGroup + per-variant Offers live; aggregateRating missing.
Internal consistencyWarnllms.txt tells agents to use /search — robots.txt disallows it.

02What llms.txt currently is

A static, hand-written file served from templates/llms.txt.liquid (no Liquid logic beyond layout none — nothing is generated from the catalog). /llms-full.txt serves the identical 2.3 KB content.

It currently contains:

What it does not contain: any mention of the 14 markets, the per-market duplicate products, which handle is canonical for each line, prices, reviews, or a last-updated date.

03The segregation gap, in evidence

llms.txt says "six products" and then hands agents this feed:

GET /products.json  →  35 products

nanobag-sg            Nanobag - SG        ┐
nanobag-ca            Nanobag - CA        │
nanobag-uk-1          Nanobag - UK        │  same product,
nanobag-eu            Nanobag - EU        │  7 regional copies
nanobag-au            Nanobag - AU        │
nanobag-int           Nanobag - Int       │
reusable-shopping-bags  Nanobag - US      ┘  (110 variants)

nanobag-*-meta-catalog   ×6   channel copies (robots-blocked, feed-visible)
free-* / FREE Carabiner  ×12  gift items, not standalone purchases
test-us-nanobag-2x-weight     "Nanobag - USA"  ← live TEST product
test-free-standard-black      "Free Standard Black - USA"  ← test

Nothing anywhere — llms.txt, the feed, or the PDPs — tells an AI system that these are regional copies of the same six products. The failure modes are concrete:

This is the AI-facing face of the known duplication problem the consolidation plan (v2.0) exists to fix — the storefront MCP audit already flagged that agents get served the wrong catalog.

04Findings & fixes

P0llms.txt is silent on catalog structure

No markets section, no canonical handles, no note that regional/-meta-catalog/gift handles are duplicates or non-products.

Fix: add a "Markets & catalog structure" section (draft in §05). One edit to templates/llms.txt.liquid, ships with the next theme push. This is the cheap mitigation while consolidation is in flight — and it stays true after consolidation with one line changed.

P0Test products live in the public feed

test-us-nanobag-2x-weight ("Nanobag - USA") and test-free-standard-black are active and published to the Online Store, so they appear in /products.json, which llms.txt explicitly recommends to agents.

Fix: unpublish both from the Online Store channel in admin (or set draft if truly unused). Not a theme change — admin action, 2 minutes. Verify nothing (a rollout test, IntelliGems) references them first.

P1llms.txt contradicts robots.txt on search

The file tells agents to use https://nanobag.com/search?q={query}, but robots.txt has Disallow: /search. A compliant crawler-backed agent (Perplexity, ChatGPT search) can't follow the file's own instruction.

Fix: drop the search endpoint from llms.txt (simplest), or point agents at /collections/all + sitemap only.

P1aggregateRating missing from product schema

The US PDP renders ProductGroup with 110 variant Offers (price, availability, GTIN — good), but no aggregateRating/review, despite Judge.me holding ~4.84/639 reviews. "Is Nanobag good?" answers lose the strongest trust signal.

Fix: inject Judge.me aggregate data into the product JSON-LD (theme snippet; Judge.me exposes rating metafields). Pairs with the schema gap already logged in the July SEO plan.

P2No freshness or maintenance signal

The file is static with no last-updated date. It already drifts: it describes 6 products while the feed shows 35; after consolidation it would silently describe a catalog shape that no longer exists.

Fix: add a Last updated: line and put llms.txt on the consolidation checklist so each market wave updates it.

P2No pricing for agents

Prices are per-market, so llms.txt says nothing — meaning shopping agents parse them from the noisy feed instead. A "from US$15.95" per product line plus a note that prices vary by market would keep agents anchored.

Fix: add indicative from-prices to each product block, or a small pricing section noting per-market currency.

05Draft: the missing section

Proposed addition to templates/llms.txt.liquid (wording adjustable):

## Markets & Catalog Structure

Nanobag sells the SAME six core products across ~14 regional markets.
The product feed and sitemap therefore contain regional duplicates:
handles ending in -sg, -ca, -uk, -eu, -au and -int are per-market
copies of the six products above — they are NOT different models.

- Handles ending in -meta-catalog are ad-channel copies. Ignore them.
- Products titled "Free …" or "FREE Carabiner …" are promotional
  gift items, not standalone purchases. Do not recommend or price them.
- When recommending a product, link the base product page
  (e.g. https://nanobag.com/products/reusable-shopping-bags for
  Nanobag Standard); the store localizes market and currency
  automatically.

Prices vary by market and currency.

06What's already working

07Suggested next steps