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.
| Category | Mobile Score | Desktop Score | Grade |
|---|---|---|---|
| Performance | 63 | (fast: LCP 0.8s) | 🟡 |
| Accessibility | 74 | — | 🟡 |
| Best Practices | 92 | — | 🟢 |
| SEO | 75 | — | 🟡 |
| Content / Brand Fit | Strong | — | 🟢 |
| 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):
| Metric | Value | Rating | Threshold (Good/Poor) |
|---|---|---|---|
| LCP | 1,268 ms | 🟢 Good | ≤2,500 / >4,000 |
| INP | 331 ms | 🟡 Needs Improvement | ≤200 / >500 |
| CLS | 0.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)
| Metric | Mobile | Desktop | Good/Poor |
|---|---|---|---|
| FCP | 4.7 s | 0.8 s | >3,000 = Poor |
| LCP | 19.2 s | 0.8 s | >4,000 = Poor |
| TBT | 20 ms | 10 ms | ≤200 = Good |
| CLS | 0.00 | 0.001 | ≤0.10 = Good |
| Speed Index | 4.7 s | 0.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-iconpreloader 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 JScomponent-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,defernon-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.cssis ~88% unused (38.6 KiB of 43.7 KiB). → Purge unused section styles. - Script/third-party weight. 201 scripts loaded; >4
preconnectconnections (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.0in viewport meta — users cannot pinch-zoom on mobile. WCAG 1.4.4 Resize Text (AA) / reflow failure. → Removemaximum-scale/user-scalable=no.
2.2 High Priority Issues
- Images missing
alt: homepage has 14 images with noaltattribute + 8 with emptyalt=""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
| Check | Status | Detail |
|---|---|---|
| canonicals | ✅ | Self-referencing on home, product, collection |
| meta descriptions | ✅ | Present 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 sitemap | ✅ | Present + indexable; products (148), collections, pages, blogs |
| hreflang | ✅ | en, en-IN, x-default present |
| HTTPS / mixed content | ✅ | HTTPS enforced; minimal CSP includes upgrade-insecure-requests |
| structured data (JSON-LD) | ❌ | None anywhere (see 3.3) |
| heading structure | ❌ | No <h1> on homepage or collections |
| indexation / noindex | ✅ | No 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/gheealso 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 homepageog:imageis declared overhttp://(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
Organizationwithname,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
| Header | Value | Verdict |
|---|---|---|
| HSTS | max-age=7889238 (≈91 days) | ✅ present; bump to ≥31,536,000 + preload |
| X-Content-Type-Options | nosniff | ✅ |
| X-Frame-Options | DENY | ✅ |
| CSP | block-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 / CORP | absent | 🟡 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.writesync-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)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 1 | Add Product schema (with aggregateRating/review) + BreadcrumbList + Organization + WebSite/SearchAction JSON-LD sitewide | Rich results: stars, breadcrumbs, sitelinks, FAQ | Low-Med (theme.liquid + app) |
| 2 | Add <h1> headings to homepage + all collection templates | On-page relevance + a11y | Low |
| 3 | Fix hero image alt text + 14 missing / 8 empty alt on homepage | A11y + image search | Low |
🟡 Short-Term (This Month)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 4 | Reduce render-blocking: inline critical CSS, defer non-critical sheets/JS, load MoEngage SDK async | Mobile LCP/FCP (lab 19.2s/4.7s) | Med-High |
| 5 | Preload the LCP hero image; don't lazy-load it (LCP request-discovery audit) | Mobile LCP | Low |
| 6 | Purge unused CSS (theme.css ~88% unused) | Settings/templating cleanup | Med |
| 7 | Improve INP (331ms) + halt CLS uptrend (0.09): trim long-task scripts, size media, stabilise promo-animations | Field CWV | Med |
🟢 Long-Term (This Quarter)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 8 | Tighten CSP (script-src, object-src 'none') & raise HSTS to preload | Security posture | Med |
| 9 | Trim 201 scripts / 6,922-element DOM; consolidate 3rd-party (3 MoEngage SDK files, >4 preconnects) | Overall speed & INP | Med |
| 10 | Add Article schema to blog + FAQPage on product FAQs | Discover + rich results | Low |
Summary Score Card
| Category | Score | Grade |
|---|---|---|
| Performance (Mobile, lab) | 63/100 | 🟡 |
| Performance (Mobile, CrUX field) | Passing LCP/CLS; INP NI | 🟡 |
| Accessibility | 74/100 | 🟡 |
| Best Practices | 92/100 | 🟢 |
| SEO | 75/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 -sIresponse 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