NANOBAG / SPEED & SEO REPORT — QA DASHBOARD
Report: Vishal Chandra · QA'd by Shubham Yadav · 10 Aug 2026, live site

QA verdict · nanobag.com

The report holds up — and the site is faster than it assumed.

Every claim in the 10 Aug Speed & SEO report was re-verified against live page source, plus the measurements the report couldn't take: a Chrome performance trace, Lighthouse, and CrUX field data. Most on-page findings are real and worth fixing. But the report's central caveat — "no field data exists" — is wrong: Core Web Vitals pass on both key pages, which reorders the rollout plan. Duplicate-URL and metadata work leads; the DOM-deduplication sprint is payload hygiene, not a rankings rescue.

Confirmed17claims verified in live source today
Corrected4right direction, wrong mechanism or count
Already done / stale4fixed before QA, or not reproducible
Missed by report7net-new findings from this QA pass
Core Web VitalsPASSLCP · INP · CLS, field p75, home + PDP
01

The missing measurements

The report inferred speed from page composition because its tooling couldn't run a trace. This QA ran the trace: Chrome DevTools, mobile emulation, Slow 4G, 4× CPU throttle — plus CrUX real-user data at p75.

Homepage All pass

Field data (CrUX p75, URL scope) · lab LCP 1432 ms
LCP2.14 s< 2.5 s
INP124 ms< 200 ms
CLS0.00< 0.1

Product page All pass

Field data (CrUX p75, URL scope) · lab LCP 1823 ms
LCP1.55 s< 2.5 s
INP175 ms< 200 ms
CLS0.00< 0.1

Where LCP time actually goes (lab trace)

Both pages lose most of their LCP to load delay — the browser discovers the LCP image late. The report's preload recommendation (#12) is the right fix; the download itself takes under 5 ms.

Homepage — hero video poster1432 ms
Product page — first gallery image, queued at 1.7 s1823 ms
TTFB Load delay (late discovery) Render delay Load duration ≈ 0 in both traces

Third-party main-thread cost, product page

Measured in the trace. The report flagged "GTM + Judge.me + consent" generically — the real story is the tag stack: GTM alone transfers 649 KB and burns ~1 s of main thread, and two containers load (WHXM36M + WNJCZ75Z).

Google Tag Manager983 ms
Clarity571 ms
Shopify521 ms
Facebook492 ms
cloudfront.net59 ms
1clicklabs.io58 ms
Bing Ads49 ms
Hotjar39 ms
Lighthouse · Home — SEO 92 · A11y 90 · Best Practices 54 Lighthouse · PDP — SEO 92 · A11y 91 · Best Practices 73 PDP HTML weight 1.18 MB · Home 354 KB TTFB (cold) · Home 243 ms · PDP 511 ms
Decision point, resolved.

The report said: "if mobile LCP > 2.5 s or INP > 200 ms, run the speed sprint (Stage 02) first." Measured: both pass. So Stage 01 — duplicate URLs and metadata — leads, and the DOM-deduplication work is sequenced as payload hygiene and headroom, not recovery. The one speed item promoted anyway: removing the legacy GTM container, which no measurement was needed to justify twice.

02

Claim-by-claim QA

Confirmed  Verified in live page source today

Stale second homepage at /pages/home

200, self-canonical, indexable. Still says "100,000+ customers" (live: 200,000+) and old CTA copy. Delete + 301 stands.

Product clones live & self-canonical

All clones self-canonicalise and sit in the products sitemap — signal splitting confirmed. Count corrected below.

og:title is "Nanobag - US" · twitter:site is "@"

Both verified. Root cause traced below. Empty handle comes from social-meta-tags.liquid:46 splitting an unset theme setting.

og:image served over http://

Verified on home + PDP. social-meta-tags.liquid:41 hard-codes the http: prefix — a one-character theme fix.

PDP H1 is the variant name "Standard Black"

Verified in served HTML. The commercially critical page has no keyword in its H1, and it changes with variant selection.

23 gallery images share alt="Nanobag - US"

Verified: 23 identical alts + 22 empty alts on the PDP. Same string appears as review titles — see root cause below.

Gallery double-render

12 requests at width=1080 + 49 at width=400 in PDP source. The srcset consolidation (#06) is justified.

All six variants' highlight icons ship at once

54 references to the highlight icon set in one page load. Server-render only the selected variant's block (#08).

5760px homepage banner

Verified: Freebie_Banner_1.webp?width=5760 requested on the homepage; nothing renders near that size.

Press logos repeatedly rendered, oversized

Forbes ×8, BuzzFeed / Grommet / Kickstarter ×11 references each on the homepage. Consolidation (#10, #11) justified.

Icon light/white PNG pairs

Verified — duplicate colourway PNGs per icon (4 + 8 references). SVG + CSS recolour is the right call (#15).

Compare module renders twice

Two "Compare Nanobag" instances in PDP source (60 compare_nanobag refs). Note: this block is inside the live IntelliGems A/B test — don't touch mid-test.

Blog lives at /blogs/blogs/…

Verified in the blog sitemap. Low priority, bundle with other work (#31).

aggregateRating truly missing

The report said "validate". Validated: the ProductGroup JSON-LD has no rating node and Judge.me injects none — 4.84★ / 669 reviews earning zero SERP stars. Promoted to P0.

og:price ≠ displayed price

13.95 vs $15.95 displayed (SG clone: 12.95). Real and verified — but the mechanism is corrected below.

Review count 669

Matches the report (number_of_reviews: 669 in Judge.me widget data).

Corrected  Right finding, wrong mechanism or count

og:price isn't "stale" — it's the cheapest variant

social-meta-tags.liquid:37 uses product.price, which is the minimum variant price (Micro, $13.95; SG's min is $12.95). Not a hard-coded relic — but the fix direction stands: bind to the selected/featured variant.

Six clones, not four

The report lists eu / uk-1 / int / sg. Also live and self-canonical: nanobag-ca and nanobag-daypack-us, plus 6 robots-blocked meta-catalog products — 14 product URLs in the sitemap for ~2 real products. Redirects are already planned as staged market waves (consolidation plan v2.0, gated on the IntelliGems test).

GTM: two containers, and it's the top perf lever

The report confirmed only WHXM36M. Live source loads WHXM36M and WNJCZ75Z — 649 KB and ~983 ms of main thread combined. Removing the legacy container is the single biggest speed win available.

Schema mostly exists already

The report's table says "add Organization, WebSite; validate Product". All three are live and server-rendered: Organization, WebSite, and ProductGroup with offers on all 110 variants (price, availability, GTIN, SKU). The genuine gaps: aggregateRating and FAQPage markup.

Already done / stale  Fixed before this QA, or not reproducible

/pages/folding-bag-faq already 301s

Redirects to /pages/faq today. Register item #05 is done — verify it drops out of the index in GSC.

"No field data exists" — false

CrUX has URL-level p75 data for both key pages, and every vital passes. This is the report's most consequential error: it drives its own stage ordering.

robots.txt & sitemap were never unreachable

Both fetch fine. Bonus finds: /search is disallowed (good), and the product clones are confirmed in the sitemap (bad).

Trust-badge strip ×4 — not reproducible

Zero hits for SecureCheckout / 1TreeforEveryBag assets in today's PDP source. Either removed since the report's check or seen on a different template. Dropped pending re-observation.

Missed by the report  Net-new from this QA pass

Root cause: the product's admin title is "Nanobag - US"

One field feeds og:title, all 23 image alts, and the visible review titles. Renaming the product title fixes three findings at once — but it feeds channel listings and app integrations, so rename deliberately, not casually.

Popup app H1 leak on every page

<h1 class="zpa-crm-popup-title">{!= form_name !}</h1> — an unrendered popup-app template shipped as a real H1 sitewide (flagged in the June audit, still live). App-owned markup; fix in the app embed, not the theme.

Locale pages: translated body, English metadata

Danish/Swedish/Polish/German/French body content renders correctly, but <title> and meta description are English on all 13 non-English locales. The existing translationsRegister kit covers this — the SEO title/description keys were never registered.

PDP HTML is 1.18 MB

A 227 KB inline OneClickUpsell/Loop script, 126 KB variants JSON, 102 KB pixel loader, 64 KB JSON-LD. Mostly app/platform-owned — track it, don't chase it.

Core Web Vitals pass — the plan reorders

The report's rollout hinged on unmeasured vitals. Measured: all pass. Indexation + metadata work leads; DOM dedup becomes headroom.

Utility collections are indexable

eg-gift-app (the free-gift app collection), sellable-bags, nanobag-1 sit in the sitemap. Hide via the seo.hidden metafield.

Meta-catalog products: contradictory signals

The 6 -meta-catalog feed products are robots-blocked yet listed in the sitemap — expect "indexed though blocked" noise in GSC.

Lighthouse minors

Video thumbnails missing alt, unnamed video-btn links, small Judge.me pagination touch targets, one contrast fail (logo-bar__mobile-label), console 403s.

03

Quick wins vs. the real work

What we can ship from our side this week, and what genuinely takes time. Anything touching the PDP template waits for the IntelliGems test to end; the clone redirects follow the consolidation plan's market waves.

Staged in dev — 10 Aug 2026. Nothing touched on live.

The theme-side quick wins are implemented on the dev branch (Nano-Bag-Final/dev theme): all three social-meta-tags fixes, the aggregateRating schema (verified against live Judge.me metafields: 4.84★ / 669), legacy GTM container WHXM36M removed, PDP LCP preload, the 5760px banner cap, and the video alt/label accessibility fixes. Theme check passes with no new offenses. Pending on live: everything — promotion happens after dev-theme QA, and admin-side items (page deletion, redirects, metafields, product rename) are separate calls. Look for the In dev chip in the register below.

SEO — quick wins

Minutes to ~1 hour each · ship this week
  • Three one-line fixes in social-meta-tags.liquid — https on og:image (line 41), real twitter:site or drop the tag (line 46), og:price bound to the selected variant (line 37). One snippet, one push. Impact every share, scraper and feed carries the right price and a secure image. Know re-scrape both PDPs in Facebook Sharing Debugger — $15.95 and https shown.
  • aggregateRating schema — small theme snippet reading the server-rendered Judge.me data (4.84★ / 669). Highest value per line of code on this list. Impact product SERPs become eligible for review stars — typically a measurable CTR lift. Know Rich Results Test passes today; stars + "Review snippets" report in GSC within 1–2 weeks.
  • Delete /pages/home + 301 to / — Shopify admin: delete page, add URL redirect. Kills the stale duplicate homepage. Impact one homepage in the index; no public page contradicting live claims. Know the URL flips to "Redirect" in GSC Pages and drops from site: results within days.
  • Hide utility collections — seo.hidden metafield on eg-gift-app, sellable-bags, nanobag-1. Admin-only, no theme change. Impact junk pages stop competing for crawl budget and queries. Know they leave the collections sitemap immediately and the index over 1–2 weeks.
  • Locale meta titles/descriptions — run the existing translationsRegister kit with the SEO title/description keys. 13 locales stop serving English metadata. Impact native-language titles in 13 markets' SERPs — the main CTR lever for the EU push. Know curl each locale shows a translated <title>; GSC CTR by country trends up over 2–4 weeks.

Performance — quick wins

Small edits · big levers
  • Remove legacy GTM container WHXM36M — one theme.liquid edit. 649 KB + ~1 s of main thread across two containers. Verify WNJCZ75Z covers conversion tags first. Impact the single biggest speed lever on the site — roughly half the tag weight and main-thread cost gone. Know re-trace shows GTM well under 350 KB / 500 ms; GA4 purchase events keep flowing after removal.
  • Preload the homepage hero poster — link rel=preload + fetchpriority=high. Not a visual change; safe during the test. Impact attacks the 894 ms load delay = 62% of homepage LCP. Know lab LCP drops toward ~1 s on re-trace; CrUX p75 trends down over the next 28-day window.
  • Cap the 5760px freebie banner — srcset with a sane ceiling. One section edit. Impact hundreds of KB off the homepage for zero visual difference. Know DevTools network panel shows the banner requested at ≤1600px.
  • Accessibility minors — alts on video thumbnails, aria-label on video-btn links, the logo-bar contrast fix. Cheap points, real usability. Impact closes every Lighthouse image-alt and link-name fail on both key pages. Know Lighthouse a11y ≥ 95 on re-run (from 90/91).

SEO — needs time & effort

Coordination, content work, or test-gated
  • Clone consolidation (6 products → canonical) — the #1 ranking gain, already planned as staged market waves. Gated on the IntelliGems test ending; touches pricing, gifts, feeds per market. Impact every link and ranking signal lands on one URL instead of splitting seven ways. Know GSC: clone impressions migrate to the canonical; non-brand rankings climb over 4–8 weeks post-wave.
  • Rename the product's admin title from "Nanobag - US" — the rename is minutes; checking what it ripples into (Amazon/Meta/TikTok feeds, review widget titles) is the work. Fixes og:title + 23 alt texts + review titles in one move. Impact three findings closed with one field. Know share previews show the real name; Merchant Center / channel feeds stay green after the change.
  • Keyword H1 on the PDP — replace the variant-name H1, demote variant to a label. PDP template — after test end. Impact the money page finally has its keyword in the primary heading. Know rendered H1 no longer changes with variant; target-term positions in GSC over 4 weeks.
  • Gallery alt-text rewrite — per-image descriptive alts. Content writing, not code. Impact image-search visibility plus real screen-reader usability. Know GSC Search type = Image impressions trend up; Lighthouse image-alt passes.
  • Popup-app H1 leak — find which app injects the {!= form_name !} H1 and fix or disable its embed. Investigation first; app-owned markup. Impact removes a junk H1 with template garbage from every page's heading outline. Know view-source on any page shows no zpa-crm-popup H1.
  • FAQPage schema, blog handle rename, off-page track — mention reclamation, PR, marketplace defense. Ongoing, partly external. Impact FAQ rich results + authority consolidating on one domain. Know GSC enhancements report for FAQ; referring domains count in Ahrefs/Semrush quarter over quarter.

Performance — needs time & effort

Template rebuilds, asset production, decisions
  • PDP dedup sprint — gallery srcset (12×1080 + 49×400), per-variant Product Highlights, Compare-module single render. All PDP template work — frozen until IntelliGems ends, then one sprint. Impact roughly halves PDP image requests and cuts page weight by well over half. Know before/after trace: request count, transferred bytes, lab LCP — all in one re-run of this QA.
  • Press logos + icon migration to SVG — consolidate to one render, re-export assets at display size. Asset production plus section edits. Impact dozens of oversized PNG requests become a handful of KB-sized vectors. Know homepage request count and image bytes in the network panel drop visibly.
  • Video click-to-play below the fold — preload=none, poster-first. Needs behaviour QA across markets. Impact zero video bytes on initial load — video only costs when a shopper asks for it. Know trace shows no .mp4 requests before interaction.
  • Tag diet round two — Clarity 571 ms, Facebook 492 ms, Hotjar. Marketing decision on what stays, not a code problem. Impact main thread back for interaction — protects the passing INP as features get added. Know third-party main-thread total under 1 s in a re-trace; INP p75 stays under 200 ms.
  • PDP HTML weight (1.18 MB) — 227 KB OneClickUpsell inline, 126 KB variants JSON. Mostly app-owned; track it, escalate to the app vendors if it grows. Impact faster parse and first render on the money page. Know curl -w size of the PDP HTML tracked release over release — flag anything above 1.2 MB.
04

Fix register, re-prioritised

All 31 original items with their QA status, plus 6 added by this pass. Theme edits land on the Shubham branch; anything touching the PDP waits for the IntelliGems test to end; clone redirects follow the consolidation plan's market waves.

Priority Status
#ActionPriQA statusQA note
01Baseline Lighthouse + PSI, mobile and desktopP0DoneThis QA is the baseline: trace + Lighthouse + CrUX above.
02Fix og:price — bind to selected variant priceP0In devStaged 10 Aug on the dev branch: selected_or_first_available_variant price in social-meta-tags.liquid.
03Delete /pages/home; 301 to /P0ConfirmedLive, self-canonical, stale claims ("100,000+").
04301 product clones to primary productP0AmendedSix clones, not four (+ca, +daypack-us). Execute via consolidation plan v2.0 market waves, gated on IntelliGems test end.
05301 /pages/folding-bag-faq → /pages/faqP0DoneAlready redirects. Confirm index drop in GSC.
06Single srcset for gallery — stop 1080+400 double requestP0Confirmed12×1080 + 49×400 in source. PDP template — wait for test end.
07Trust-badge strip: render once, CSS loopP0DroppedAssets not present in today's PDP source; re-observe before acting.
08Render only selected variant's Product HighlightsP0Confirmed54 icon refs across 6 variant sets in one load.
09Cap the 5760px homepage banner; WebP everywhereP0In devStaged 10 Aug: image-with-text-overlay fallback src capped at 1920px (srcset unchanged).
N1Add aggregateRating (4.84★ / 669) to product schemaP0In devStaged 10 Aug: nb-pdp-head snippet renders Product JSON-LD from Judge.me's reviews.rating metafields (verified live: 4.84 / 669). Validate with Rich Results Test on the dev preview.
N2Remove legacy GTM container WHXM36MP0In devStaged 10 Aug: both theme blocks removed (WNJCZ75Z loads via custom pixel and is untouched). Before promoting: verify WNJCZ75Z covers conversion tags; watch GA4 purchases after go-live.
10Consolidate press-logo sections to one renderP1Confirmed8–11 references per logo on /.
11Re-export press logos as SVG/WebP at display sizeP1ConfirmedSource widths up to 2775px for ~130px logos.
12Preload LCP image; eager + fetchpriority=highP1In devPDP staged 10 Aug: head preload mirroring the gallery srcset (the img was already eager+high — discovery in 1.18 MB HTML was the delay). Homepage hero poster still pending.
13preload="none" on video; click-to-play below foldP1Not re-checkedPlausible; verify video request behaviour in a trace before edit.
14De-duplicate Compare module; drop 2048px imagesP1Confirmed×2 verified — but block is inside the live IntelliGems test. Frozen until test end.
15Replace light/white PNG icon pairs with SVGP1ConfirmedPairs verified on /.
16Reserve heights (announcement bar, gift block, reviews)P2AmendedCLS is 0.00 field and lab — demoted to monitoring.
17GTM audit — async, consent-gate, delete dead tagsP0AmendedUpgraded to P0 and folded into N2: container removal first, then tag diet (Clarity 571 ms, Facebook 492 ms, Hotjar).
18Keyword H1 on product; variant as labelP1ConfirmedH1 renders "Standard Black". Title shim / PDP template — after test end.
19Fix og:title; drop "- US"/"- SG" suffixesP1AmendedRoot cause is the product admin title itself — one careful rename also fixes alts + review titles (check channel feeds first).
20Differentiated alt text on gallery; fix empty altsP1Confirmed23 identical + 22 empty alts verified.
21Force https on base og:imageP1In devStaged 10 Aug in social-meta-tags.liquid.
22Fix empty twitter:siteP1In devStaged 10 Aug: tag now renders only when the Twitter setting is filled in.
23Verify redirect chains (www→apex, http→https)P1Not re-checkedQuick curl check when doing #21.
24Validate + complete schemaP1AmendedOrganization, WebSite, ProductGroup + 110 offers already live. Real gaps: aggregateRating (→ N1) and FAQPage on /pages/faq + collections.
25Verify Compare-module spec alignment visuallyP1Not re-checkedReport's own framing was "verify first" — still open.
26Reconcile FAQ carrier claims with UK fulfilmentP1Not re-checkedExternal (Trustpilot) claim; sensible regardless.
27Re-verify sitemap excludes retired URLsP2ConfirmedClones are currently IN the sitemap; re-check after redirects land.
28Unlinked brand-mention reclamationP2Not re-checkedOff-page; unaffected by this QA.
29Digital PR — crowdfunding + tree-planting angleP2Not re-checkedOff-page; unaffected by this QA.
30Marketplace brand defense (Amazon, Walmart)P2Not re-checkedOff-page; unaffected by this QA.
31Rename blog handle away from /blogs/blogsP2ConfirmedVerified; bundle with other redirect work.
N3Kill the popup-app H1 leak ({!= form_name !})P1NewSitewide junk H1 from a popup app embed. Fix in app settings / embed, not theme.
N4Register locale meta title/description translationsP1New13 locales serve English metadata over translated bodies. Existing translationsRegister kit covers it.
N5Hide utility collections (eg-gift-app, sellable-bags, nanobag-1)P2Newseo.hidden metafield.
N6Fix a11y minors: video alts, video-btn names, tap targets, contrastP2In devStaged 10 Aug: video-btn aria-labels + poster alts in the video sections. Logo-bar contrast is an editor colour setting (not code); Judge.me tap targets are app-owned.