Organic revenue (12 mo)
€41k€227k
A fictional business. The figures are a modelled scenario, not a client result.
Case file BP-1400 · Ecommerce SEO
Bistritsa Parquet — Hardwood flooring retailer · Sofia
+€186k
organic revenue · modelled over 14 months
1,390 boards laid · 14 months
01 · The challenge
Bistritsa Parquet stocks around 1,400 flooring SKUs in its Sofia showroom: oak in a dozen grades, herringbone and chevron blocks, SPC vinyl, laminate, and the oils and underlays that go with them. Online, shoppers found them by filtering, and that was the problem.
Every filter produced a parameter URL that robots.txt kept out of Google. Products that lived only behind those filters simply did not exist to search. With no product feed, the free Shopping tab, where flooring buyers compare price per square metre, was closed to them too.
Underside of the catalogue · one square per SKU
02 · Diagnosis
1,020 product URLs were reachable only through ?filter= parameters, which robots.txt blocked.
FixStatic facet landing pages for combinations with demand; products linked from them.
No Merchant Center account and no product feed, so zero eligibility for free listings.
FixERP-driven feed, nightly, with GTIN, price per m² and stock.
Product pages carried no Product or Offer markup; price and stock were invisible to Google.
FixProduct + Offer JSON-LD generated from the same feed fields.
Every variant page set its canonical to the category root, collapsing 600 SKUs into 38 URLs.
FixSelf-referencing canonicals; variants consolidated only where content was identical.
Infinite scroll with no paginated fallback: page two onwards was never crawled.
FixCrawlable ?page= links behind the scroll, in the HTML.
38 category pages shared one 40-word template description.
FixUnique copy per category answering the questions buyers search.
Showroom address only inside an image; Business Profile categorised as a generic Store.
FixAddress in text, Store schema, Flooring store as primary category.
Category LCP of 5.8 s on mobile from uncompressed 4 MB swatch photographs.
FixResponsive AVIF swatches and lazy loading below the fold: LCP 1.9 s.
03 · Strategy
Built on our Commerce SEO plan. Herringbone only holds if every board locks into the last: the feed feeds the schema, the schema feeds Merchant Center, and the facet pages give all of it somewhere to land.
Board 01
One feed, built nightly from the ERP, becomes the single source of truth for Merchant Center, on-page schema and the catalogue itself, so price and stock never disagree.
Board 02
Filters stay for shoppers, but only the 112 combinations people actually search ("oak herringbone 14 mm", "grey SPC click") get a static, indexable URL with its own copy.
Board 03
Product, Offer and AggregateOffer markup carries price per m², pack coverage and availability, which makes the pages eligible for rich results and merchant listings.
Board 04
Verified account, shipping and returns policy and enriched attributes put 1,312 SKUs into the free Shopping tab and product knowledge panels.
паркет рибена кост
flooring-marketplace.bg
Паркет рибена кост — каталог
parket-world.bg
Паркет рибена кост — каталог
homedepot-bg.com
Паркет рибена кост — каталог
Bistritsa Parquet: position 48 · page 5
паркет рибена кост
Products · free listings
Oak 14/3 natural
€38/m²
Oak smoked 15/4
€44/m²
Oak white oil
€41/m²
bistritsa-parquet.bg › herringbone
Herringbone parquet in Sofia — 46 oak patterns
★ 4.8 · From €38/m² · In stock · Showroom in Lozenets
04 · Timeline
Survey
Measure the room · M01–M02
30 days of server logs: Googlebot spent 71% of hits on filter URLs it was then told not to index.
Every wood × finish × width combination scored against Bulgarian search demand; 112 earned a page.
Subfloor
Level the subfloor · M03–M05
Static, self-canonical URLs for the 112 combinations; the long tail stays noindex, follow.
Nightly export of 1,400 SKUs with GTINs, m² pricing, stock and colour attributes.
Account verified, shipping and returns set, free listings approved for 1,312 SKUs.
Laying
Lay the boards · M06–M09
Product, Offer and AggregateOffer markup with price per m² and pack coverage.
Variant canonicals pointed at themselves; infinite scroll got a crawlable ?page= fallback.
38 categories rewritten with installation, underfloor-heating and room-fit guidance.
Store schema, address in text, Business Profile recategorised as Flooring store.
Finish
Oil and buff · M10–M14
Material, pattern, thickness and wear-layer attributes added; disapprovals down to 0.6%.
Seasonal pricing pushed without touching the core feed or the ERP.
Twelve installation guides now pass internal links to the category they explain.
A pattern hub with layout calculator, linked from every herringbone SKU.
Feed monitoring, facet rules and schema tests documented for the in-house team.
05 · Results
Pick a category to read its board; switch periods to watch the grain grow. Herringbone and chevron, the category with the most hidden facet pages, moved furthest.
Modelled scenario for a fictional business — not a client result. Rankings and traffic are never guaranteed; see our Terms.
Board 01 · Oak engineered · €12.4k → €58.6k · ×4.7
TOTAL · 8 CATEGORIES€227k
€41k€227k
3801,390
05.2k
246
| Query | Vol / mo | Before | After | Landing page |
|---|---|---|---|---|
| паркет Софияparquet Sofia | 2,900 | 31 | #2 | Category |
| дъбов паркетoak parquet | 1,600 | 27 | #3 | Category |
| винилов паркет SPCvinyl SPC flooring | 1,300 | 22 | #5 | Category |
| паркет рибена костherringbone parquet | 880 | 48 | #1 | Pattern hub |
| трислоен паркет ценаengineered parquet price | 720 | >100 | #4 | Facet page |
| ламиниран паркет 8 ммlaminate 8 mm | 590 | 35 | #6 | Facet page |
| масло за паркетparquet oil | 480 | 41 | #3 | Category |
| подложка за паркетparquet underlay | 390 | 29 | #4 | Category |
| орехов паркетwalnut parquet | 320 | >100 | #2 | Facet page |
| паркет шевронchevron parquet | 260 | >100 | #1 | Pattern hub |
Commerce SEO · Ecommerce SEO
A catalogue Google can see, a feed it trusts, and listings shoppers can compare. We start with the audit.