E:LAB
← All cases
쇼핑·브랜드Flower e-commerce / flower brand

Flower e-commerce — title, meta, and schema structure cleanup

By Yang Kyoungchan ·

Not just a meta tidy-up — we rebuilt the structure so search engines could actually understand the shop.

Project

A flower brand that grew from a local shop into online retail. The products and photography were strong, but search engines weren't reading the site's information hierarchy, so visibility had plateaued.

In the first meeting, when I started looking through the site, the first thing that stood out wasn't a design or product photography issue. The content and the day-to-day operations were solid. The problem was a different question: how is the search engine seeing this site?

After flipping through five or six pages, it was clear the meta descriptions were inconsistent from page to page. Some pages had the company introduction copy verbatim, others were blank, and some had a 100-plus character chunk of body text awkwardly truncated. The first line that shows up in search results was doing something different on every page.

Opening up the HTML source on a product page surfaced a bigger problem. There was no Product structured data (JSON-LD) at all. In other words, the search engine had no explicit way to know these were even product pages. Without that, there's no eligibility for rich results — no chance of star ratings, prices, or availability appearing in search.

There was one more finding. The same product listings were showing up at both /category/bouquet and /tag/bouquet. From the search engine's point of view, that creates a "which one should I index?" problem. This is what people call duplicate content conflict, and both URLs end up losing in search.

The original scope was just an "SEO audit." But if we cleaned up only the meta and left the rest, the gains would leak out elsewhere. So I walked the client through the diagnosis, explained the priorities and the reasoning for the additional work. The work itself is one-time, but the effect compounds — it's more rational to fix the whole structure in one pass than to revisit it piecemeal later.

We started with consolidating the meta templates. All product page titles were normalised to a single format: '{product name} | {category} | {brand}', and meta descriptions were auto-generated by combining the product short description, price, and free shipping flag. The point was to build a structure where future pages can't easily drop the meta by accident.

Next we applied three JSON-LD schemas: Product, BreadcrumbList, and Organization. Product included SKU, brand, price, and availability, plus aggregateRating on products that had reviews — enough to make the pages eligible for star ratings and prices in search results. BreadcrumbList made the category-to-product path readable for search engines, and Organization reinforced the brand entity signal across the whole site.

The category/tag indexing conflict was resolved with canonical and robots meta. Every /tag page got a canonical pointing to the corresponding /category, plus noindex, so all signals consolidated on the /category side. OG tags and Twitter cards were unified around 1200×630 images, and the sitemap was rewritten as a dynamic handler so admin and draft pages are excluded automatically.

For about two to four weeks after launch we let the index settle, then checked indexing status and rich result eligibility in Search Console. The directly measurable changes were clear: every product page passed the schema validator as "eligible for rich results," pages with missing meta dropped to zero, and the duplicate /tag URLs were cleaned up. These are things we can verify directly, independent of external variables — which is exactly why we're comfortable putting them in a case study.

Finally, we handed off an operations guide so SEO would carry forward automatically when the client adds new products. It walks through which fields drive which output, how to submit index requests in Search Console for new releases — written at a level a non-specialist can follow. Leaving behind a structure the client can keep running on their own was the last step of the engagement.

Outcomes

Outcome points

  • 01
    Consistent meta across all product pages
  • 02
    Product / BreadcrumbList schema applied
  • 03
    Rich results eligible in search
  • 04
    Category indexing conflicts resolved
Problems

Problems found

  • Title and meta description formats varied page by page
  • No Product schema on product pages — ratings and prices never showed up in search results
  • Category and tag pages were both indexed, creating duplicate content conflicts
  • Missing OG tags broke link previews on social media
  • Sitemap included private pages, wasting crawl budget
Work items

Work performed

  • Redesigned the site-wide title and meta description template (brand / category / product hierarchy)
  • Added Product / BreadcrumbList / Organization JSON-LD
  • Set indexing policy between category and tag pages (canonical and robots meta)
  • Cleaned up OG and Twitter card meta
  • Regenerated sitemap and tidied robots.txt
  • Registered and verified Google Search Console, requested indexing
  • Delivered an SEO operations guide for ongoing content publishing
Edit log

Specific edits

  • Product page head
    Added Product JSON-LD (sku, brand, offers.price, offers.availability, aggregateRating)
    Activates star ratings and price as rich results in search. Eligibility didn't exist before, so adding it alone unlocks visibility.
  • /category, /tag
    Set /tag canonical to its /category, added noindex in robots meta
    The same product was being indexed via two paths, splitting signals. Consolidates ranking signal onto one URL.
  • Site-wide head
    Unified OG meta (og:image 1200x630, og:type=product, twitter:card=summary_large_image)
    Fixes broken social previews. Direct impact on click-through rate.
  • robots.txt
    Disallow for /admin, /draft, /cart + explicit absolute Sitemap: URL
    Stops wasted crawl budget and lets Search Console auto-discover the sitemap.
  • sitemap.xml
    Switched static file to a dynamic handler — emits only public products and categories with lastmod
    Private pages are automatically excluded from indexing requests, and new products can't slip through unnoticed.
  • Footer (site-wide)
    Inserted Organization JSON-LD (sameAs linking SNS and shop pages)
    Tells search engines and AI clearly that these channels are one brand entity.
  • Title template
    All product pages unified on '{product} | {category} | {brand}'
    Search engines and shoppers can parse the page hierarchy instantly, and new products inherit the format automatically.
Before / After

Before / After

ItemBeforeAfter
Page meta descriptionsInconsistent formats, many missing or truncatedSingle template applied, zero missing
Product JSON-LDNot appliedApplied to every product (sku/brand/offers/aggregateRating)
BreadcrumbList JSON-LDNot appliedAuto-generated for category and product paths
OG / Twitter card metaMany missing, image ratios inconsistentUnified 1200x630 OG + summary_large_image across all pages
/tag duplicate indexingBoth /category and /tag indexed — conflict/tag canonical -> /category, noindex applied
URLs included in sitemapAdmin, draft, and cart URLs mixed inOnly public products and categories (dynamically generated)
Pages passing schema validators0All product pages pass
Timeline

Timeline

  1. 01
    Week 0 - Diagnosis
    • Ran a 24-item automated audit with our /check tool
    • Sorted findings into four priority areas: meta, schema, indexing, OG
    • Met with the client to walk through findings and explain the why

    Agreed on four priority areas and locked in the scope

  2. 02
    Weeks 1-2 - Structural work
    • Applied a single title and meta description template
    • Wrote and inserted Product / BreadcrumbList / Organization JSON-LD
    • Cleaned up OG / Twitter meta (unified 1200x630 images)
    • Confirmed all product pages pass schema validators

    Rich result eligibility activated; search engines now explicitly recognize product pages

  3. 03
    Week 3 - Indexing cleanup
    • Applied /tag canonical and noindex policy
    • Tidied robots.txt (blocked admin/draft/cart, added sitemap line)
    • Switched to a dynamic sitemap.xml handler outputting only public pages
    • Registered and verified Search Console, requested indexing

    Duplicate indexing conflict resolved, indexing began to stabilize

  4. 04
    Weeks 2-4 follow-up - Verification and operations guide
    • Monitored indexing status and rich result eligibility in Search Console
    • Delivered a guide so SEO is auto-applied on new product listings
    • Provided a checklist non-experts can manage

    Handed off a structure the client can run themselves

Summary

Summary

  • Search engines can now read the site properly
  • Rich result eligibility is in place
  • An SEO guide is in place for long-term operations
Review

Client review

Rating5.0 / 5

I came in without much SEO knowledge, but instead of just doing the task I asked for, they spotted structural issues a client would never notice and fixed them too. They walked me through things like meta information, how search exposure works, and how pages get recognized — concepts I'd find hard to follow — explaining why each one matters and what it would do for me. It didn't feel like 'handing off work', it felt like being managed with real understanding. They also clearly separated what was working now from what could be improved later, which gave me confidence that SEO would actually be managed over time, not just set once. For someone who doesn't know SEO well, you can hand it off and not worry. Strongly recommend especially for anyone trying to grow a site long-term.

  • Quality of work5.0
  • Helpful consultation5.0
  • Quick responses5.0

If you need similar work, start with the free audit or get in touch directly.