Illustrative case study

A fictional business. The figures are a modelled scenario, not a client result.

A pop-up case study · 6 chapters

Zarnitsa Toys

Wooden toy maker & web shop · Varna, Bulgaria

How a wooden-toy workshop fixed a crawling nightmare and doubled pre-Christmas sales

HeadlineLCP 6.2s → 1.9s

Retail & E-commerce · Signal plan · Core Web Vitals · Image optimisation · Faceted navigation · Crawl budget

/1.9s

1The challenge

A lovely workshop, buried under 38,000 filters

Faceted filters spawned 38,000 junk URLs, mobile LCP sat at 6.2s and Google was crawling filter combinations instead of new products.

Zarnitsa hand-turns beech and lime-wood toys in a Varna workshop and sells about 640 of them online. Customers loved the filters — shop by age, wood, colour, price. Googlebot loved them too, and spent its visits wandering every combination instead of the new Christmas range.

On phones, the page every parent landed on took over six seconds to show its hero picture. With roughly 70% of Q4 sessions on mobile, that cost sales in the weeks that matter most.

Junk URLs indexed

38,000

for 640 real products

Mobile LCP

6.2s

Days to index a new toy

19

Googlebot hits on filter URLs

86%

2The diagnosis

We cut the site out of card to see its crawl tree

Six findings from a full crawl, 90 days of server logs and field Core Web Vitals data. Flip the tree to see what pruning does.

  1. 01Faceted navigationHigh

    Four filters, infinite URLs

    Age × material × colour × price, plus ?sort= and ?view=, combined freely. Every combination was a crawlable, indexable URL with no canonical — 38,000 near-duplicates of 640 products.

  2. 02Crawl budgetHigh

    Googlebot lost in the filters

    Server logs showed 86% of Googlebot hits landing on parameter URLs. New Christmas lines took 19 days on average to be discovered.

  3. 03Core Web VitalsHigh

    A 6.2s hero on mobile

    The LCP element was a 2.4 MB PNG of the workshop, lazy-loaded by mistake and queued behind a render-blocking carousel script and two web-font files.

  4. 04Image optimisationMedium

    Product photos straight off the camera

    3,900 product images averaged 1.1 MB, with no width/height attributes (CLS 0.31) and no responsive sizes, so phones downloaded desktop originals.

  5. 05Crawl budgetMedium

    Dead toys still in the sitemap

    Discontinued products returned soft 404s; the XML sitemap listed 2,300 filter URLs and 180 retired products.

  6. 06Faceted navigationMedium

    Internal links fed the problem

    Filter chips were plain links, so every category page linked out to dozens of parameter URLs and passed equity into them.

TrainsBlocksPuzzlesBabyGifts/

Product or category page Filter / sort URL

3The strategy

Four paper cuts, one faster shop

The work ran on our Signal plan: technical first, because no amount of new content helps if Google is too busy crawling ?colour=red&sort=price to find it.

Each tactic is a fold in the book: cut away what Google should never see, then make what is left load fast.

Faceted navigation

Fold the filters flat

  • Kept 22 facet pages with real demand (e.g. ‘wooden toys for 1 year olds’) as static, indexable URLs with their own copy.
  • Every other combination: canonical to the parent, noindex, and filter chips switched to buttons so they stop generating links.
  • Parameter order normalised so ?age=1&material=beech never duplicates ?material=beech&age=1.

Crawl budget

Prune the crawl tree

  • robots.txt disallows ?sort=, ?view= and multi-select price ranges once noindex had been seen.
  • Sitemaps split into products, categories and journal, refreshed nightly; retired toys 301 to their successor or 410.
  • Weekly log-file review to confirm Googlebot shifted onto product and category URLs.

Core Web Vitals

Lighten the launch

  • Hero image preloaded with fetchpriority=high, lazy-loading removed from anything above the fold.
  • Carousel script deferred and replaced with a CSS scroll-snap strip; fonts subset to Cyrillic + Latin and self-hosted.
  • Third-party chat widget loaded on interaction only, cutting main-thread blocking by 1.2s.

Image optimisation

Re-cut every picture

  • All 3,900 images re-encoded to AVIF/WebP with responsive srcset — average weight 1.1 MB → 84 KB.
  • Explicit width and height everywhere, taking CLS from 0.31 to 0.03.
  • Descriptive Bulgarian alt text and file names for Google Images, a real traffic source for toys.

46 months, page by page

From audit to Christmas rush

  1. Month 1

    Logs & audit

    Crawled 41,200 URLs, parsed 90 days of server logs, mapped every filter combination and its demand.

    LCP 5.1s31,200 junk

  2. Month 2

    Facets folded

    Canonical + noindex rules shipped; 22 demand-led facet pages written; chips became buttons.

    LCP 3.8s17,400 junk

  3. Month 3

    Hero relaunched

    LCP image preloaded, carousel removed, fonts subset. Mobile LCP crossed under 3s.

    LCP 2.9s6,900 junk

  4. Month 4

    Images re-cut

    3,900 product photos re-encoded with srcset; CLS fixed; Google Images traffic began to climb.

    LCP 2.3s2,100 junk

  5. Month 5

    Tree pruned

    robots.txt rules and clean sitemaps; Christmas lines indexed within 2 days of launch.

    LCP 2.0s760 junk

  6. Month 6

    Christmas peak

    LCP held at 1.9s under peak load; gift-guide categories ranked in time for December.

    LCP 1.9s410 junk

5The results

And then the rocket took off

2.5s · good

Pull the tab · audit baseline

6.2s

Mobile LCP · Poor

StartM1M2M3M4M5M6
Junk URLs
38,000
Bot on products
14%
Crawl errors
1,240
  • Mobile LCP

    6.2s → 1.9s

  • Indexed junk URLs

    38,000 → 410

  • Q4 organic revenue

    +118%

  • Crawl errors

    -94%

Modelled scenario for a fictional business — not a client result. Rankings and traffic are never guaranteed; see our Terms.

Mobile LCP, month by month
good ≤ 2.5s0s2s4s6s6.2Start5.1M13.8M22.9M32.3M42.0M51.9M6
Indexed junk URLs: 38,000 → 410
  • Start38,000
  • M131,200
  • M217,400
  • M36,900
  • M42,100
  • M5760
  • M6410
Q4 organic revenue (modelled, BGN)
41.3k
Q4 last year
90.0k
Q4 this year
Where Googlebot spends its time

14%

Before · on products

1,240 crawl errors

87%

After · on products

74 crawl errors

Rankings that came out of the fold

Google.bg positions before and after, modelled
KeywordMonthly searchesBeforeAfter
дървени играчкиwooden toys4,400243
монтесори играчкиMontessori toys3,600315
дървен влак за децаwooden train for kids1,300182
коледни подаръци за децаChristmas gifts for kids8,100—7
играчки за 1 годишно бебеtoys for a 1 year old2,900424
дървени кубчетаwooden blocks1,000151
магазин за играчки варнаtoy shop Varna72091

The end · or your first chapter

Get a plan like this

Signal: crawl control, Core Web Vitals and image work for shops that have outgrown their filters.

← Back to all case studies