“Strong storefront, but the back kitchen is on fire.”
Zutilo looks like it got dressed up for market day and then forgot the produce in the back room. The storefront is polished enough to fool you for a second, but the moment you poke around, the wires, wrappers, and weird little glitches start falling out of the cabinets.
https://zutilo.com/
screenshot
TECHNICAL SUMMARY
The good news: SEO is basically a gold star, with a strong score, proper crawlability, canonical setup, robots access, and clean structured data across four JSON-LD blocks. The bad news: performance and UX are where the kitchen disaster starts — largest contentful paint lands at 6.0s, interactive time drags to 10.0s, and there are 11 broken assets plus 2 console errors, including a React error and a 401 from the auth endpoint. You’re shipping 1,630 KiB with 327 KiB of unused JavaScript hanging around like a guest who never leaves, and the page also takes a redirect detour from the root URL to /en before it even starts being useful.
🔥Your largest contentful paint hits 6.0s, which is long enough to regret the click and consider lunch.
💀
Fast enough to load, slow enough to test everyone’s patience.
→
Split the homepage into route-based chunks so the hero doesn’t drag the entire pantry onto first paint.
→
Remove or defer the 327 KiB of unused JavaScript, especially anything not needed before the first interaction.
→
Compress and serve critical imagery in modern formats, then preload only the main hero asset instead of feeding the browser the whole buffet.
02
SEO
95
SEO Score100Redirect Count1Canonical MatchMatched to /enSchema Blocks4
🔥SEO is strutting around with a 100 score like it paid for the venue, and honestly, fair enough.
💀
Search engines get a clean, well-labeled menu while users take the scenic route.
→
Keep the canonical locked to the final language URL and make sure the root redirect stays a single clean hop.
→
Add Product schema on item/detail pages so listings can earn richer search presentation instead of whispering into the void.
→
Audit the two console errors and the 401 on /api/v1/auth/me so rendering and crawl signals don’t get randomly punched in the face.
03
DESIGN
80
Total Headings70Images38Missing Alt Text0Broken Assets11
🔥You’ve got 70 headings on one page, which is less a hierarchy and more a family reunion with everyone talking at once.
💀
The visual system is mostly competent, but the asset pile keeps tripping over itself.
→
Reduce heading spam by collapsing repeated H3 groups into cleaner H2-led sections with a tighter information hierarchy.
→
Fix the 11 broken assets before tuning polish, because nothing says “premium marketplace” like missing furniture in the room.
→
Trim the font stack from 14 families to a deliberate system so typography stops feeling like a kitchen drawer full of random utensils.
04
COPY
98
Word Count1,420Sentence Count122CTA Count3Duplicate CTA Text2x “Get Started”
🔥Your H1 says “Local Largest Buy & Sell Platform” while the title says “Local Buy & Sell Marketplace in Gujarat,” so the brand is already arguing with itself in public.
💀
The copy is fluent, polished, and still somehow forgettable in all the important places.
→
Rewrite the H1 so it matches the title and uses one crisp value proposition with Gujarat or local marketplace, not both fighting for the mic.
→
Replace one of the duplicate “Get Started” CTAs with a more specific action like “Browse Listings” or “Sell an Item.”
→
Cut the generic above-the-fold copy and replace it with one concrete trust line, one category benefit, and one local proof point.
05
UX
67
FCP1.8sLCP6.0sConsole Errors2Broken Assets11
🔥The page throws a React error #418 and a 401 from /api/v1/auth/me, which is a lovely way to greet people with both confusion and rejection.
💀
The interface looks usable until it starts tripping over its own cables.
→
Fix the React #418 path first, because runtime errors turn nice UI into decorative nonsense.
→
Stop fetching authenticated user data on load when /api.zutilo.com/api/v1/auth/me returns 401 unless the user is actually logged in.
→
Stabilize the failed /en/items/... requests and ensure critical content is server-rendered or gracefully cached before the browser starts improvising.