robots.txt.liquid, restore the dropped Disallow. ~1 hour.Evidence
For any non-US IP, within ~3s an "International shopper" modal covers title, price, rating, variants, and add-to-cart. It never auto-dismisses and persists on scroll (screenshots: clean buy box at 1.2s → fully obscured at 3–8s+). Exact intrusive-interstitial pattern Google penalizes on mobile.
Evidence
13 products in sitemap; collections link only /products/reusable-shopping-bags. Orphan clones (nanobag-int/-sg/-uk-1/-ca/-eu, nanobag-daypack-us, 6× *-meta-catalog) are 200 + self-canonical + indexable, several with the identical title "Folding Travel Bag | Reusable Tote Bag…" and 91–93% duplicated body content. ×14 locales ≈ 104 URLs. AI engines see ~7 conflicting "Nanobag" entities with different prices.
seo.hidden = 1 metafield on feed/regional clones (drops from sitemap + noindexes, stays purchasable for Meta catalog ads), or canonicalize to the primary PDP. Write unique per-product copy for real products (Daypack).Evidence/search?q=tote → 200, no noindex, self-referencing parameterized canonical. The new Shopify agentic-default robots.txt dropped the classic Disallow: /search. Multiplies across 15 locale prefixes.
robots.txt.liquid restoring Disallow: /search and Disallow: /*/search; add noindex meta to the search template.Evidence
Judge.me installed (data-shop-average-rating="4.82", data-shop-review-count="687" in HTML) but ProductGroup JSON-LD has no aggregateRating/review. No star rich results — the largest CTR lever available.
snippets/product-rating-schema.liquid using Shopify reviews.rating metafields with absolute @id matching native ProductGroup (snippet in the .md report). One method only; product-level ratings, never the store-wide 4.82.Evidence
Lab (Slow-4G, 4× CPU): home mobile LCP 7.84s, TBT 14.7s, 84 long tasks. HTML 1.4MB (home) / 2.7MB (PDP), 84–87% inline JS: 908KB catalog-dump app embed (3,097 variant JSON entries, every page), EasyGift 523KB, Zipify OCU 206KB, Shoplift 151KB (no active test). Sync jQuery+slick in head. 8 autoplay hero videos (3–6MB) starve the LCP poster. Both Hotjar AND Clarity running. TTFB 120ms and CLS pass — the problem is purely payload/main-thread.
preload="none" + intersection load) · drop one session recorder · delay pixels until first interaction. Re-run PSI with API key for field INP.Evidence/de-de and its PDPs: fully English <title> + meta description despite German body chrome; mixed English strings in body. Known market-cloned-sections root cause. Hreflang works perfectly — its relevance benefit is wasted on untranslated metadata across 14 markets.
Evidence
PDP's only H1 renders the selected variant ("Standard Black") while the title tag targets "Reusable Shopping Bags". Product title + ProductGroup JSON-LD name = "Nanobag - US"; variants = "Nanobag - US - Standard / Black". AI answers will literally cite "Nanobag - US".
Evidence
Homepage H1s: "Buy More and Unlock Free Gifts + Free Shipping", "As seen on", "Nanobag and our Quest…". The actual value proposition ("Extreme practicality…") is not an H1, and no H1 is visible above the fold.
Evidence/pages/about-us and /pages/about → 404. Founder story (Ursus Negenborn & Rune Kippervik) exists only as a homepage section. Post-Dec-2025 core update weighs entity pages heavily for e-commerce.
Evidence/collections/products shows "Tagline / Example heading / Give customers details about the banner image(s)…", no meta description. /pages/page = stale Winter Sale LP (it's June); /pages/home duplicates homepage intent. All 200 + self-canonical, in all 15 page sitemaps.
seo.hidden/noindex the ad landing pages or consolidate them.Evidence
Every Offer in both ProductGroups carries only price/priceCurrency/availability/url. returnPolicyCountry required since March 2025 for merchant listings.
Evidence
At ~1.2s the mobile hero area is empty with only the "Nomads Nation 2025" badge floating on nothing; the image appears ~5s+. Space is reserved (no CLS) but it reads as broken and inflates LCP.
fetchpriority="high" + preload hint; LQIP or background color matching the photo.Evidence
Homepage title 73 chars with brand twice; daypack title 97 chars, keyword-listy, identical across two product URLs, doesn't describe a daypack.
Evidencesnippets/breadcrumb-schema.liquid gated on page_type == 'collection'. Products and blog articles get no breadcrumb rich results.
Evidence{{ article | structured_data }} at sections/main-article.liquid:338 emits publisher "Nanobag Official Store" with no logo, unlinked to #organization; dateModified precedes datePublished.
"publisher": {"@id": "https://nanobag.com/#organization"}.Evidence
Policy mentions "downloadable software products"; cart promises "30 Days Free Returns" the policy never states. FAQ = 376 words (gate 800), "Don't hestitate", sitewide footer "Cookie Decleration".
Evidence
BuzzFeed/Forbes/Wired/Yanko "As seen on" logos unlinked; "1 tree planted per bag" (Eden People + Planet) unlinked; "LOVED BY 200,000+ CUSTOMERS" unsourced. No third-party material certifications (OEKO-TEX, GRS, bluesign) anywhere.
Evidence
56 PNG vs 2 WebP on home; 32–36 imgs/page missing width/height (CLS risk); product LCP image fetched at width=1850 (138KB) on a 412px viewport (~1.7× oversized); several alts read "Load video:".
format=webp to Shopify CDN URLs, width/height on theme image snippets, fix the sizes attribute on the main product image, alt text for non-decorative images.Evidence
First extractable <p> on every page = "Free Shipping on Orders 3+ Bags". Avg paragraph 23 words; ~1 passage site-wide in citation range; zero question headings outside FAQ; "Nanobag Comparison Table" has 0 <table> elements in 2.7MB HTML. Reddit r/onebag already hosts "Nanobag vs Sea to Summit vs Peak Design" threads.
Evidence/pages/go-nanobag-eu ("Redirecting you…", no title) in all 15 page sitemaps; nanobag-eu listed twice in da-dk/en-dk product sitemaps; an app bumps all product lastmod daily (all 13 identical timestamps) so Google can't prioritize recrawl.
seo.hidden = 1 on the redirect page; check nanobag-eu's market/catalog publications; identify the app rewriting products daily.Evidence
Ten "Go to item" buttons measure 6×6px; reviews link only 22px tall. Minimum 24px, recommended 44–48px.
Note/de-de/ and /products/…/ serve 200 without redirecting; canonicals consistently point to non-slash versions. Optional 301 normalization; keep internal links slash-free.
Note
http://www → https://www → https://apex. Platform-typical, negligible.
Note
Largely platform-constrained on Shopify; raise via Cloudflare zone settings if DNS-proxied. Positives: x-frame-options DENY, nosniff, clean 301s.
Note
Both render naturalWidth=0 on every capture — failed requests on the critical path, consistent with the known fragmented tracking stack. Remove or repair in GTM/theme.
Note
Inactive form button visible to screen readers; duplicated nav text. hidden/display:none the dead button; aria-hidden the decorative copy.
Note
Add canonical product URLs per model, FAQ/blog links, materials detail (diamond ripstop, 0.05mm); make llms-full.txt genuinely expanded.
Note
"— Simon", "— Leanna" with no verification, while Judge.me holds 612 verified reviews. Swap in Judge.me-sourced verified reviews.
Note
One H3 amid H2 siblings; "10 Simple Habits" vs H1 "10 Daily Habits"; one post 1,326 words vs 1,500 gate; blog index H1 is just "Blogs".
Note
Optional — Bing/Yandex/Naver freshness. Third-party app or Cloudflare Worker if desired.