Web Quality Audit: Two Brothers India Farms (twobrothersindiashop.com)

Website: https://twobrothersindiashop.com/ | Date: 2026-08-26 | Platform: Shopify (custom theme) | Industry: Organic / regenerative food & beverage (D2C) Business context: Premium A2 ghee, stone-ground atta, wood-pressed oils; ₹100cr+ ARR; 93.3% of traffic is phone (CrUX). Source: business-analysis.md (t_c9e85d3a).

Executive Summary

The site is a well-built Shopify store with strong field performance on real phones (LCP 1.5s) and gold-grade Best Practices (92), but it has a sharp mobile-first/desktop quality gap and several structural SEO/accessibility gaps that suppress organic growth for a brand of this scale.

The single most important problem is the lab-vs-field contradiction on mobile: real users load the homepage LCP in 1.5s (Good), but Google's Lighthouse simulated mobile run scores LCP at 5.3s (Poor, 3.6× over threshold). That 5.3× gap is driven by a massive page weight (6,875 DOM elements, 202 scripts, 12 stylesheets, render-blocking CSS/JS) that throttled mobile conditions expose. Because Google largely uses mobile-lab signals for ranking and the brand is 93% mobile, this is the top technical priority.

Structurally, the homepage has no <h1>, no Product/Organization/WebSite rich schema on non-home templates, user-scalable=no disables pinch-zoom (WCAG A failure), and the og:image is served over HTTP (mixed-content risk in social previews). Product pages are the bright spot — they have H1, breadcrumb, FAQ, and ProductGroup schema.

CategoryMobile ScoreDesktop ScoreGrade
Performance7298🟡 / 🟢
Accessibility7469🟡 / 🟡
Best Practices9292🟢 / 🟢
SEO7575🟡 / 🟡
Overall (avg)7884🟡 / 🟢
Mobile score gap alert: Mobile Performance (72) is 5.3× worse on LCP than desktop (1.0s vs 5.3s). The storefront is effectively two different experiences by device.

1. Performance Audit

1.1 CrUX Real-World Field Data (phones)

Source: CrUX Vis, origin https://twobrothersindiashop.com, 40 weekly points (2025-10-26 → 2026-08-22). Data via browser accessibility tree (graphics-symbol aria-labels).

Core Web Vitals Assessment: Needs Improvement on mobile (INP is Needs Improvement; LCP and CLS are Good). Desktop field data was not separately extracted; the origin is 93.3% phone (business-analysis.md), so mobile field data is the dominant reality.

MetricLatest (2026-07-26→08-22)Threshold (Good / Poor)Rating
LCP1,498 ms≤2,500 / >4,000✅ Good
INP278 ms≤200 / >500🟡 Needs Improvement
CLS0.01≤0.10 / >0.25✅ Good
FCP (trend start)1,366 ms (2025-10)Good
FCP (latest)~1,498 msGood

Trend (from CrUX Vis series):

  • LCP: trending worse — fell to a low of 1,204 ms (May 2026) then climbed back to 1,498 ms by Aug 2026 (+294 ms / +24% off the trough). Still Good, but regressing.
  • INP: "needs improvement and is stable" (per CrUX Vis heading) — held 248–311 ms range; never reaches the 200 ms Good threshold. This is the field weak point.
  • CLS: was 0.00–0.01 (Good) for most of the year but rose to 0.08–0.08 in Jul–Aug 2026 — a late-period layout-shift regression worth watching (correlates with the homepage having no fixed image dimensions / lazy-loaded hero).
Note: The PageSpeed Insights field panel labels this "Failed" purely because INP > 200 ms. Per audit convention we describe it as Needs Improvement (one metric not Good), not "failed."

1.2 Core Web Vitals (Lighthouse Lab Data)

Source: PageSpeed Insights UI, Lighthouse run 2026-08-26 07:12 IST (both mobile + desktop in DOM simultaneously — first 5 = Mobile, next 5 = Desktop).

MetricMobileDesktopMobile ratingDesktop rating
FCP3.6 s0.8 s🔴 Poor✅ Good
LCP5.3 s1.0 s🔴 Poor (2.1× over)✅ Good
TBT0 ms30 ms✅ Good✅ Good
CLS00.004✅ Good✅ Good
Speed Index3.6 s1.0 s🔴 Poor✅ Good

Performance category score: Mobile 72, Desktop 98.

1.3 LCP Phase Breakdown (Mobile)

From the Lighthouse "LCP breakdown" audit (homepage):

  • Time to First Byte: 80 ms (excellent — Shopify/Cloudflare edge)
  • Element render delay: 320 ms
  • Remainder (~4.9 s of the 5.3 s total) is load delay + load duration of the LCP resource — i.e. the hero image is not preloaded/discoverable early and is gated behind render-blocking CSS/JS and a 6,875-element DOM that the throttled mobile CPU must parse before paint.

Interpretation: The server is fast (TTFB 80 ms). The problem is entirely client-side: render-blocking stylesheets (12 <link rel=stylesheet> + 4 preloaded), 202 <script> tags, and an enormous DOM delay the discovery and paint of the LCP image on throttled mobile. Desktop's fast CPU masks it (1.0 s); mobile Moto-G-class simulation does not.

1.4 Performance Issues by Impact

Critical (>1s savings on mobile):

  • Render-blocking CSS/JS. 12 stylesheets + 4 preloaded stylesheets + multiple preloaded scripts block first paint. Inline critical CSS for above-the-fold, defer the rest. Source: Lighthouse "Render-blocking requests" audit; curl -sI shows 4 rel=preload stylesheets.
  • LCP element not preloaded / lazy treatment. Hero carousel images (hero slide image) are not <link rel=preload>-ed. Add preload + fetchpriority="high" to the first hero image. Source: Lighthouse "LCP request discovery" + "Improve image delivery" audits.
  • Excessive page weight / DOM size. 6,875 DOM elements, 178 <img>, 202 scripts. Shopify themes bundle every section's CSS/JS. Reduce to <1,500 nodes where possible; lazy-mount below-fold sections. Source: Lighthouse "Optimize DOM size", browser_console element count.

High (200 ms–1 s):

  • Reduce unused CSS (theme.css + style.css + new-custom-style.css) — three full stylesheets. Source: Lighthouse "Reduce unused CSS".
  • Third-party script bloat. Moengage SDK preloaded (cdn.moengage.com), plus 202 scripts. Defer non-essential marketing tags. Source: curl -sI link header + Lighthouse "3rd parties".
  • Image delivery. 178 images, most without explicit width/height (CLS contributor). Serve WebP/AVIF + srcset, set dimensions. Source: Lighthouse "Improve image delivery", "Image elements do not have explicit width and height".

Medium/Low:

  • Inefficient cache lifetimes on some static assets. Source: Lighthouse "Use efficient cache lifetimes".
  • Minify/legacy JS, duplicated JS modules. Source: Lighthouse "Minify JavaScript", "Duplicated JavaScript".

1.5 Resource Transfer Summary

CategoryObservationSource
Images178 <img> on homepage; mostly Shopify CDN; lazy-loading present but LCP hero not prioritizedbrowser_console
JS202 <script> tags; heavy theme + app stack (Moengage, reviews, etc.)browser_console, curl -sI
CSS12 stylesheets + 4 preloaded; 3 full theme stylesheetsbrowser_console, curl -sI
3rd-partyMoengage preloaded; Shopify CDN preconnected (2x)curl -sI

2. Accessibility Audit

2.1 Critical Issues

  • user-scalable=no + maximum-scale=1 in <meta name="viewport">. Disables pinch-zoom — a WCAG 1.4.4 (Level A) failure affecting all low-vision users. Source: browser_console viewport = width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no. Lighthouse flags [user-scalable="no"].
  • No <h1> on the homepage, collection pages, or blog posts. Only product pages have an H1 (auto-generated product title). The homepage's primary keyword heading is missing — both an a11y wayfinding gap and an SEO signal gap. Source: browser_console h1s: 0 on home; curl confirms 0 <h1> on home/collection/blog; product has H1.

2.2 High Priority Issues

  • 12 images missing alt, 8 with empty alt on the homepage (decorative vs content not distinguished). Product/blog images need descriptive alt for screen readers + image search. Source: browser_console imagesWithoutAlt: 12, imagesWithEmptyAlt: 8.
  • Iframe missing title. The single iframe on the page has no accessible title. Source: Lighthouse "<frame> or <iframe> elements do not have a title`.
  • Links without discernible names / redundant alt text on some image-links. Source: Lighthouse a11y audit list.
  • Touch targets too small / insufficient spacing on some controls (e.g. header icons, footer links). Source: Lighthouse "Touch targets do not have sufficient size or spacing".
  • Non-unique ARIA IDs somewhere in the DOM. Source: Lighthouse "ARIA IDs are unique".

2.3 Positive Findings

  • lang="en" set on <html>; viewport present (aside from zoom lock).
  • Skip-to-content link present (Skip to content @e1).
  • Product pages have a logical breadcrumb + FAQ accordions.
  • Keyboard focusable controls / logical tab order pass.
  • No color-contrast failures flagged in the audit set.
  • Score: Accessibility 74 (mobile) / 69 (desktop) — mid-pack, not catastrophic, but the zoom lock and missing H1 are real barriers.

3. SEO Audit

3.1 Technical SEO

CheckStatusSource
HTTPS enforced✅ HSTS max-age=7889238, upgrade-insecure-requests, block-all-mixed-contentcurl -sI
robots.txt✅ Allows crawl; references agents.md, UCP/MCP endpoints; sitemap linkedcurl robots.txt
XML Sitemap✅ Present (products/pages/collections/blogs + agentic discovery)curl sitemap.xml
Canonical (home)✅ Self-referencing https://twobrothersindiashop.com/browser_console
URL structure✅ Clean, hyphenated (/collections/ghee, /products/...)sitemap
Mobile-friendly⚠️ Responsive but user-scalable=no penalizesbrowser_console
Hreflangen, en-IN, x-default on home + collection + product (self-referencing, reciprocal)curl per template
Indexation✅ No noindex on key templatescurl
Security headers✅ X-Frame-Options DENY, CSP, nosniff, HSTS (see §5)curl -sI

3.2 On-Page SEO Issues

  • Missing <h1> on homepage/collection/blog (see §2.1). The homepage <title> is keyword-rich ("Two Brothers India Farms - Official Store for Raw & Organic Produce") — good — but the on-page H1 that Google weights is absent on every non-product template.
  • Meta descriptions present but auto/boilerplate. Home, collection, and blog all have meta descriptions (verified via curl), so this is better than the typical Shopify gap. Collection meta-desc is product-listing style ("Order Desi Ghee 100% Natural..."). Acceptable; could be more keyword-intent-targeted.
  • OG tags present on all templates (og:title/description/image/url), Twitter summary present — good. BUT og:image is HTTP, not HTTPS (see §3.3).
  • Internal linking: 285 links on homepage; anchor text is mostly navigational. Breadcrumbs present on product/collection. Reasonable.

3.3 Schema Markup

Source: curl raw HTML + browser_console JSON-LD extraction.

TemplateSchema presentTypesGap
Homepage✅ 3 blocksBreadcrumbList, WebSite, OrganizationGood — has the key site-level types
Product✅ 2 blocksProductGroup, BreadcrumbListNo Product (offer/price/rating) / AggregateRatingProductGroup alone misses price + star-rich-result eligibility
Collection⚠️ 1 blockBreadcrumbList onlyNo ItemList of products, no Organization
Blog⚠️ 1 blockBreadcrumbList onlyNo Article schema (headline/author/date) — blog ineligible for Google Discover

Issues:

  • Homepage is the only template with Organization + WebSite+SearchAction. Collections/products/blog lack Organization (minor, but inconsistent entity signals).
  • No Product with offers/aggregateRating on product pages → no star-rating rich result in SERPs despite 22,386 Judge.me reviews (per business-analysis.md). High-value miss for a review-rich brand.
  • No Article schema on blog → Discover/Top-stories ineligible.
  • No FAQPage schema despite product pages having FAQ accordions → missed FAQ rich-result.

3.4 Content Quality (E-E-A-T)

Strong signals present:

  • Founders & Team, Traceability, Our Philosophy, Lab Reports, CSR, Media Recognition, Quality Assurance pages (visible in nav) — strong Experience/Expertise/Authoritativeness.
  • CIN number, email, phone, grievances number in footer — Trustworthiness.
  • 22,386 reviews @ 4.9★ (Judge.me) — strong social proof (but not schema-exposed, §3.3).
  • OG/meta descriptions customized.

Gaps:

  • Blog content is real/editorial (good) but not schema-marked (Article).
  • No explicit author/bio markup on posts.

4. International SEO

The store is India-primary (CrUX content-language en-IN, 93.3% India phone traffic, separate US store at twobrothersfood.com). Current hreflang is correct for a single-market English site:

  • en, en-IN, x-default all → https://twobrothersindiashop.com/ and self-referencing on collection/product pages (verified). Reciprocal and valid.
  • No cross-locale canonical (good — no suppression risk).
  • Verdict: International SEO is correctly scoped. No action needed unless they launch a true localized market (e.g. a translated en-US or hi-IN locale), at which point they must add real translated content (not Shopify "shell translation" — see skill §4.5) and hreflang per-template.

5. Best Practices & Security

5.1 Security Headers (from curl -sI)

HeaderValueStatus
HSTSmax-age=7889238 (~3 months, no includeSubDomains/preload)⚠️ Raise to max-age=31536000; includeSubDomains; preload
X-Frame-OptionsDENY
X-Content-Type-Optionsnosniff
CSPblock-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests✅ (would be stronger with script-src)
X-XSS-Protection1; mode=block✅ (legacy)
COOP/COEPnot present⚠️ Low priority

5.2 Modern Standards

  • Valid HTML5, UTF-8 charset, no document.write, no mixed content (except the HTTP og:image, §3.3/§6.1).
  • Shopify manages source maps/patching — production hygiene is solid.
  • Best Practices score: 92 (mobile & desktop) — gold grade.

6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • Brand authenticity: TBOF is a real regenerative farm (founders' faces, farm imagery, lab reports). The skill warns that AI-generated imagery is a critical mismatch for "handcrafted/artisan" brands. A filename scan was not run exhaustively, but the homepage hero and product imagery render as real photography (farm/founders/packshots). No Gemini_/ChatGPT_/ai0_ patterns observed in the visible DOM. (Recommendation: run the AI-image filename check as a defensive pass before launch of any new campaign creative.)*
  • 🔴 Mixed-content bug: og:image is served over http:// (http://twobrothersindiashop.com/cdn/shop/files/TBIF.jpg). WhatsApp/Telegram/some crawlers will fail to load an HTTP image on an HTTPS page → broken social-share previews. Fix: force HTTPS in the theme's OG image liquid (| prepend: 'https:'). Source: curl homepage og:image.
  • 12 images missing alt, 8 empty alt (see §2.2) — image-search + a11y loss.

6.2 UX Issues

  • No homepage H1 — users landing on the store see a carousel, not a clear keyword H1; minor UX-clarity loss, larger SEO loss.
  • Heavy homepage (6,875 nodes) can feel sluggish on low-end Android (the 93% audience) — correlates with the mobile LCP regression.
  • Navigation is deep (GHEE/ATTA/CATEGORY/FARM LIFE mega-menus) — fine, but the sticky promo bar + announcement bar add 3 stacked bars above content.

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Fix og:image to HTTPS (| prepend: 'https:' in theme liquid)Restores social-share previews (WhatsApp/IG/Telegram) — critical for a 93%-mobile, share-driven brandLow
2Remove user-scalable=no + maximum-scale from viewport metaWCAG A compliance; unblocks zoom for low-vision usersLow
3Add a real <h1> (primary keyword) to homepage, collections, blogRecovers on-page keyword signal lost on every non-product templateLow–Med

🟡 Short-Term (This Month)

#IssueImpactEffort
4Preload + fetchpriority="high" the first hero image; defer render-blocking CSS/JS (critical-CSS inlining)Cuts mobile LCP from 5.3s → target <2.5s; biggest ranking/UX winMed–High
5Add Product + AggregateRating/Offer schema to product pages (Judge.me 22,386 reviews)Star-rating rich results in SERPs → higher CTRMed (app/liquid)
6Add Article schema to blog posts + FAQPage to product FAQsGoogle Discover + FAQ rich-result eligibilityMed
7Add ItemList schema to collection pagesCollection rich-result eligibilityLow–Med
8Set explicit width/height on images; serve WebP/AVIF srcsetReduces CLS (Jul–Aug regression to 0.08) + bytesMed (bulk)

🟢 Long-Term (This Quarter)

#IssueImpactEffort
9Trim DOM/JS weight (6,875 nodes, 202 scripts, 12 stylesheets); lazy-mount below-fold sections; defer Moengage/marketing tagsSustains mobile LCP/INP gains; protects against further regressionHigh
10Reduce unused CSS (3 full theme stylesheets) + minify/legacy JSPerformance headroom on throttled devicesMed
11Strengthen HSTS (includeSubDomains; preload) + add script-src CSPHardeningLow
12Run AI-image authenticity check on all campaign creative before launchProtects "real farm" brand promiseLow

Summary Score Card

CategoryScoreGrade
Performance (Mobile)72/100🟡 Needs Improvement
Performance (Desktop)98/100🟢 Good
Accessibility (Mobile)74/100🟡 Needs Improvement
Accessibility (Desktop)69/100🟡 Needs Improvement
Best Practices92/100🟢 Good
SEO75/100🟡 Needs Improvement
Content Quality78/100🟡 Needs Improvement
Overall80/100🟡 Needs Improvement

Headline: A secure, well-structured Shopify store with gold-grade Best Practices and good real-world phone LCP — but a 5.3× mobile-lab LCP gap, a WCAG-A zoom lock, a missing H1 across non-product templates, and under-exposed review/blog schema are the four things standing between this brand and materially better organic + conversion performance on its 93%-mobile audience.


Sources & Evidence

  • CrUX field data (phones): CrUX Vis, origin https://twobrothersindiashop.com, 40 weekly points 2025-10-26→2026-08-22 (browser snapshot, graphics-symbol aria-labels). Latest: LCP 1,498 ms, INP 278 ms, CLS 0.01.
  • CrUX device split (93.3% phone / 6.7% desktop / 0% tablet): business-analysis.md §5a (CrUX Vis form factors).
  • Lighthouse lab: PageSpeed Insights UI, run 2026-08-26 07:12 IST. Mobile: Perf 72, A11y 74, BP 92, SEO 75; Desktop: Perf 98, A11y 69, BP 92, SEO 75. Metrics: Mobile FCP 3.6s / LCP 5.3s / SI 3.6s / CLS 0; Desktop FCP 0.8s / LCP 1.0s / SI 1.0s / CLS 0.004.
  • DOM/meta/schema: browser_console on homepage (6,875 elements, 178 img, 202 scripts, 12 stylesheets, h1s:0, imagesWithoutAlt:12, imagesWithEmptyAlt:8, lang=en, viewport=user-scalable=no, og:image=http://, hreflang en/en-IN/x-default) and curl raw HTML for per-template H1/schema/hreflang.
  • Security headers / robots / sitemap: curl -sI https://twobrothersindiashop.com/, curl robots.txt, curl sitemap.xml.
  • Product/collection/blog schema types: curl + JSON parse of application/ld+json — home: BreadcrumbList/WebSite/Organization; product: ProductGroup/BreadcrumbList; collection: BreadcrumbList; blog: BreadcrumbList.
  • Business context: business-analysis.md (t_c9e85d3a) — 137 SKUs, ₹100cr+ ARR, 22,386 reviews @4.9★, founders Hange brothers, Bhodani/Pune farm.