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

Website: https://twobrothersindiashop.com/ | Date: 06 August 2026 | Platform: Shopify (custom Marmeto theme, t/796) | Industry: Premium organic food / A2 ghee D2C (India)


Executive Summary

Two Brothers Organic Farms runs a content-rich, feature-dense Shopify storefront with strong editorial quality and brand authenticity. Real-user field data is broadly healthy — LCP and CLS are "Good" on mobile — but INP (interactivity) lags in the "Needs Improvement" band, and lab performance on mobile is severe (LCP 19.2s under throttled conditions), pointing to a render-blocking / script-weight problem that field data masks on fast connections. The biggest easy-win opportunities are structural, not visual: the site ships no structured data (JSON-LD) anywhere, and homepage + collection pages have no <h1> heading — both are high-impact, low-effort SEO fixes. Accessibility is workable (74) but fails text-resize/zoom and has thin alt text on hero imagery.

Overall this is a well-built, trustworthy brand site whose main weaknesses are technical SEO completeness and mobile render performance, not content quality or brand fit.

CategoryMobile ScoreDesktop ScoreGrade
Performance63(fast: LCP 0.8s)🟡
Accessibility74🟡
Best Practices92🟢
SEO75🟡
Content / Brand FitStrong🟢
Overall🟡
Mobile vs desktop gap: Desktop lab is excellent (LCP 0.8s, SI 0.9s) vs mobile LCP 19.2s — a ~24× gap (only ~20ms TBT, so this is a render/resource-delay problem, not CPU).

1. Performance Audit

1.1 CrUX Real-World Field Data (mobile, dominant 91.4%)

Source: https://cruxvis.withgoogle.com/#/ (origin twobrothersindiashop.com)

Core Web Vitals Assessment: Needs Improvement on mobile. The CrUX "Core Web Vitals Assessment: Failed" on PageSpeed reflects that INP is not "Good"; loading and visual-stability pass.

Latest 28-day period (2026-07-05 → 2026-08-01):

MetricValueRatingThreshold (Good/Poor)
LCP1,268 ms🟢 Good≤2,500 / >4,000
INP331 ms🟡 Needs Improvement≤200 / >500
CLS0.09🟢 Good (borderline)≤0.10 / >0.25
  • LCP is good and stable (~1.2–1.3s over the last year; drifts only slightly with heavier promo homepage).
  • INP is the sole failing metric — has sat ~300–560ms across the past year, currently 331ms. CrUX labels Interactivity "needs improvement and is stable."
  • CLS at 0.09 is Good but right at the 0.10 boundary and trending up (was 0.01–0.04 six months ago → 0.09 now). Monitor — layout drift from promo bars/banners is creeping.
  • CrUX device split (per traffic-estimation.md): 91.4% phone, 8.56% desktop, ~0% tablet → optimize for mobile first.

1.2 Core Web Vitals (Lighthouse Lab Data)

Source: https://pagespeed.web.dev/ (Lighthouse 13.4.1, emulated Moto G Power / Slow 4G)

MetricMobileDesktopGood/Poor
FCP4.7 s0.8 s>3,000 = Poor
LCP19.2 s0.8 s>4,000 = Poor
TBT20 ms10 ms≤200 = Good
CLS0.000.001≤0.10 = Good
Speed Index4.7 s0.9 s>5,800 = Poor

Mobile FCP and LCP are Poor in the lab despite field data being "Good" — the lab's slow-4G + low-end device reveals a load path that fast real-world connections hide. TBT/CLS are fine; the problem is when the first content and LCP element become renderable, not main-thread jank.

1.3 LCP Phase Breakdown (Mobile)

  • TTFB: 60 ms (excellent — server/Cloudflare response is fast)
  • Element render delay: 1,360 ms (visible for LCP candidate)
  • Remaining ~17.8s is resource-load delay + duration: the LCP element (hero slide image) is discovered late — Lighthouse flags "LCP request discovery: optimize by making the LCP image discoverable from the HTML immediately, and avoiding lazy-loading." Combined with render-blocking CSS/JS, the browser doesn't start the hero image until long after HTML arrives. A fv-loading-icon preloader overlay (seen in the element trace) also delays content render.

1.4 Performance Issues by Impact

Critical (potentially >1s savings each):

  • Render-blocking CSS + JS — est. 1,130 ms savings. Blockers: critical-css.css (11.2 KiB/630ms), theme.css (43.7 KiB/2,210 ms), custom-announcement-bar.css, new-custom-style.css (6.7 KiB), style.css (12 KiB), plus JS component-3.0.96.js, preload_asset.js, global-script.js, and the MoEngage web SDK (47.2 KiB / 1,850 ms) fetched render-blocking. → Inline critical CSS for above-the-fold, defer non-critical sheets, defer non-blocking scripts, and load the MoEngage SDK async so it can't block first paint.
  • LCP hero image not discovered early / lazy-loaded. → Preload the first hero slide (<link rel="preload" as="image">), never lazy-load the LCP element, and ensure it's referenced in static HTML (not only after JS).

High (200ms–1s):

  • Reduce unused CSS — est. 39 KiB. theme.css is ~88% unused (38.6 KiB of 43.7 KiB). → Purge unused section styles.
  • Script/third-party weight. 201 scripts loaded; >4 preconnect connections (Lighthouse warning). MoEngage ships 3 SDK files (47+34+2 KiB). → Consolidate/adjust preconnects to ≤3 origins; assess whether all MoEngage SDK files are needed on every page.

Medium/Low:

  • Minify CSS (est. 10 KiB), Font display (est. 20 ms), Forced reflow (~80 ms of layout work), large DOM (6,922 elements), inefficient cache TTL on some 3rd-party assets (14 KiB savings).

1.5 Resource Transfer Summary

  • ~1.2 MB total (visual estimate from page: CSS 264 KiB across ~12 stylesheets, image-heavy media, and 3rd-party JS). Image-heavy hero/banners ship at up to 2000px widths. Image optimization for mobile (srcset/WebP/AVIF, correct sizes) is worth auditing.

2. Accessibility Audit (Lighthouse 74)

2.1 Critical Issues

  • maximum-scale=1.0 in viewport meta — users cannot pinch-zoom on mobile. WCAG 1.4.4 Resize Text (AA) / reflow failure. → Remove maximum-scale / user-scalable=no.

2.2 High Priority Issues

  • Images missing alt: homepage has 14 images with no alt attribute + 8 with empty alt="" on content images. → Fix.
  • Generic/weak alt text on hero slides: hero carousel images use alt="hero slide image" — meaningless to screen readers and image search. → Descriptive per-slide alt (e.g., "A2 Gir cow cultured ghee bilona churn").
  • Missing page <h1> (homepage & collection pages) — also an SEO issue (see §3) and a screen-reader wayfinding gap.

2.3 Positive Findings

  • Skip-to-content link present ✔
  • <html lang="en"> set ✔
  • Product pages have a proper single <h1> + breadcrumb + labelled star-rating buttons ✔
  • Form inputs have labels; ARIA used in many interactive widgets ✔
  • Link/button semantics mostly correct (291 links, 204 buttons, only 1 iframe)

3. SEO Audit (Lighthouse 75)

3.1 Technical SEO

CheckStatusDetail
canonicalsSelf-referencing on home, product, collection
meta descriptionsPresent on homepage, product & collection (this site is better than typical Shopify — collections are set)
robots.txt🟡Default Shopify (allows all, incl. account/orders/checkout); no Sitemap: directive
XML sitemapPresent + indexable; products (148), collections, pages, blogs
hreflangen, en-IN, x-default present
HTTPS / mixed contentHTTPS enforced; minimal CSP includes upgrade-insecure-requests
structured data (JSON-LD)None anywhere (see 3.3)
heading structureNo <h1> on homepage or collections
indexation / noindexNo stray noindex found; no redirect chains on key templates

3.2 On-Page SEO Issues

  • Missing <h1> on homepage and collection pages. The homepage has zero <h1> (only 2 <h2>); /collections/ghee also has zero <h1> and no visible collection-title heading — the only h2 is the footer. This weakens on-page relevance signals and accessibility. → Add a keyword-bearing <h1> (home: e.g. "Organic A2 Ghee & Clean Pantry Staples | Two Brothers Organic Farms"; collection: description-based heading for /collections/ghee).
  • Weak hero alt text (see §2) — chasing image-search visibility for hero product content.
  • No search-result rich markup / sitelinks because WebSite+SearchAction schema is absent.
  • Title tags are reasonable lengths (homepage 67 chars, product 59, collection 63). OG tags present on home + product (og:type=product); note homepage og:image is declared over http:// (non-secure) — cosmetic.

3.3 Schema / Structured Data (❌ Critical Gap)

The site ships zero JSON-LD structured data everywhere we checked — homepage, product PDP, and collection all return 0 application/ld+json blocks. Missing:

  • Product schema (with offers, brand, aggregateRating, review) on 148 product pages — despite the UI proudly showing 4.9★ ratings and review counts, they are not marked up, so no star rich snippets in Google.
  • BreadcrumbList schema on all pages.
  • Organization / LocalBusiness (JewelryStore doesn't apply — use Organization with name, logo, url, sameAs, address, telephone, email) — the site has all this data in footer (CIN, phone, email).
  • WebSite + SearchAction on homepage (for sitelinks search box).
  • Article schema on blog posts; FAQPage for the product FAQ sections (the ghee PDP has an FAQ accordion that could power rich results).
Rated High — this is the single highest-ROI SEO gap: it's low-effort and enables star ratings, breadcrumbs, sitelinks, and FAQ rich results across a 148-SKU catalog with excellent existing review data.

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

  • Experience: founder story pages, farm/traceability, testimonials, team — very strong.
  • Expertise: glyphosate-free certification, lab reports, bilona/cultured methods.
  • Authoritativeness: media recognition page, Series B press, awards.
  • Trustworthiness: CIN (U01110PN2019TC182942), phone (7406753753), email (info@twobrothersindia.com), shipping/refund/privacy policies all in footer.
  • Content depth: blog with real editorial articles; content-to-commerce is strong.

4. International SEO

  • Site serves India as primary (content-language: en-IN); separate US store exists at twobrothersfood.com (different domain). No full multi-locale content duplication issue on this domain, so hreflang footprint is minimal but correct (en, en-IN, x-default).
  • Not a material issue for this audit; if international/export pages are added on this domain later, ensure hreflang is applied to product/collection pages too (not just home).

5. Best Practices & Security

5.1 Security Headers — Good

HeaderValueVerdict
HSTSmax-age=7889238 (≈91 days)✅ present; bump to ≥31,536,000 + preload
X-Content-Type-Optionsnosniff
X-Frame-OptionsDENY
CSPblock-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests;🟡 present but no script-src, style-src, or object-src 'none' — minimal protection against XSS/injection
COOP / CORPabsent🟡 nice-to-have

5.2 Modern Standards

  • Valid HTML5, UTF-8, HTTP/2 + HTTP/3 (alt-svc) via Cloudflare ✔
  • Best Practices score 92
  • No document.write sync-XSS red flags. 201 scripts is heavy but not a standards failure.

6. Content Quality Assessment

6.1 Image Quality & Authenticity — ✅ Excellent (no mismatch)

  • 0 AI-generated image filenames detected across the homepage (no Gemini/ChatGPT/Picsart/unnamed patterns). Images are real farm/product photography — this is the right call for a "farmer-first, soil-first" authenticity brand. Do not switch to AI stock.
  • Filenames are descriptive (e.g. CulturedGheeListing-02, KhapliAttaListing-09) ✔ — though they use underscores (hyphens are the SEO-preferred delimiter); minor.

6.2 UX / SEO Usability Issues

  • Missing collection H1 / visible page heading — collection pages render product grids with no descriptive page title heading (weak for both SEO and user wayfinding).
  • Hero carousel alt text generic (see §2).
  • Announcer uses 3 rotating promo messages (Big Farm Drop / Membership / Rakhi) — high-intent, fine, but ensure they don't shift layout (CLS already trending up).

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Add Product schema (with aggregateRating/review) + BreadcrumbList + Organization + WebSite/SearchAction JSON-LD sitewideRich results: stars, breadcrumbs, sitelinks, FAQLow-Med (theme.liquid + app)
2Add <h1> headings to homepage + all collection templatesOn-page relevance + a11yLow
3Fix hero image alt text + 14 missing / 8 empty alt on homepageA11y + image searchLow

🟡 Short-Term (This Month)

#IssueImpactEffort
4Reduce render-blocking: inline critical CSS, defer non-critical sheets/JS, load MoEngage SDK asyncMobile LCP/FCP (lab 19.2s/4.7s)Med-High
5Preload the LCP hero image; don't lazy-load it (LCP request-discovery audit)Mobile LCPLow
6Purge unused CSS (theme.css ~88% unused)Settings/templating cleanupMed
7Improve INP (331ms) + halt CLS uptrend (0.09): trim long-task scripts, size media, stabilise promo-animationsField CWVMed

🟢 Long-Term (This Quarter)

#IssueImpactEffort
8Tighten CSP (script-src, object-src 'none') & raise HSTS to preloadSecurity postureMed
9Trim 201 scripts / 6,922-element DOM; consolidate 3rd-party (3 MoEngage SDK files, >4 preconnects)Overall speed & INPMed
10Add Article schema to blog + FAQPage on product FAQsDiscover + rich resultsLow

Summary Score Card

CategoryScoreGrade
Performance (Mobile, lab)63/100🟡
Performance (Mobile, CrUX field)Passing LCP/CLS; INP NI🟡
Accessibility74/100🟡
Best Practices92/100🟢
SEO75/100🟡 (caps many easy wins)
Content Quality~90/100🟢
Security~85/100🟢
UX~82/100🟢
Overall🟡 Solid, with high-ROI SEO + mobile-render fixes ahead

Bottom line: A trustworthy, content-rich premium-organic store with strong brand fit, E-E-A-T and security. The defining opportunities are (1) add structured data for rich results across a 148-SKU catalog with real 4.9★ reviews, (2) fix the missing H1s on home/collections, and (3) cut render-blocking / defer third-party JS to close the lab-vs-field mobile performance gap and keep INP/CLS from regressing.


8. Sources

  • https://cruxvis.withgoogle.com/#/ — CrUX field CWV (LCP 1268, INP 331, CLS 0.09, mobile) + form factors (91.4% phone)
  • https://pagespeed.web.dev/ — Lighthouse 13.4.1 lab scores & metrics (Mobile 63 / A11y 74 / BP 92 / SEO 75), LCP breakdown, render-blocking/unused-CSS/insight audits
  • https://twobrothersindiashop.com/ — homepage DOM: 0 h1, 0 JSON-LD, 6,922 elements, 201 scripts, 14 missing/8 empty alt, viewport maximum-scale=1.0, hero alt "hero slide image"
  • https://twobrothersindiashop.com/products/amorearth-desi-cow-a2-ghee — product PDP: single h1, breadcrumb, FAQ; 0 JSON-LD (no Product schema)
  • https://twobrothersindiashop.com/collections/ghee — collection: 0 h1, meta desc present, canonical self-ref, 0 JSON-LD
  • https://twobrothersindiashop.com/robots.txt — default Shopify robots (no Sitemap directive)
  • https://twobrothersindiashop.com/sitemap.xml (et al.) — products (148), collections, pages, blog sitemaps; hreflang en/en-IN/x-default
  • curl -sI response headers — security header assessment
  • traffic-estimation.md (parent task) — CrUX device split 91.4% phone / 8.56% desktop
  • business-analysis.md (parent task) — brand context, catalog size (147 SKUs / 108 food URLs), reviews 4.6–4.9★, trust signals