Driving a 48% increase in organic revenue by eliminating 4 million dead-weight URLs
Four million URLs in the index and 2,301 SKUs earning all of the revenue. Thirteen months of crawl-space reduction, directive repair and a rebuilt store-page tier took organic revenue up 48% and transactions up 70%.
- +48%
- organic revenue
- +70%
- organic transactions
- 4M → 12K
- URLs in the index
- 3,571
- low-value SKUs retired

01 — The challenge
Four million URLs in the index and 2,301 SKUs doing all the work.
Fire & Flower is a national cannabis retailer running a large ecommerce catalogue alongside 86 physical stores. When I picked up the account, Google had roughly four million URLs of that site in its index. Around 7,600 products sat in the sitemap. Google Analytics could attribute every dollar of online revenue to 2,301 SKUs.
The index was about three hundred times larger than the part of the site that earned anything, and Googlebot was spending its time accordingly.
Most of it traced back to a handful of platform rules.
- Infinite product duplication. As long as a valid product ID sat in the slug,
/products/anything-you-like-148576returned a 200 with a self-referencing canonical, and Google had already indexed some of those in place of the real page. - Filter and sort parameters multiplied every category.
- noindex, nofollow sitting alongside a canonical on parameterized product URLs, which is a dead end for PageRank and doubles the crawl needed to reach a product (Googlebot stops at the parameterized page, reads the canonical, follows it, and crawls the same links again from there).
- Pagination canonicalized back to page one and also marked noindex, nofollow, so nothing past the first page of any category existed as far as search engines were concerned.
The pages that mattered were in no better shape.
- Brand pages inherited
/shopmetadata, so they competed with the main shop page for terms like “online dispensary” while their own branded rankings fell out of the index. - Subcategory pages soft-404ed, because Googlebot browsed the site as Ottawa and frequently saw an empty product grid.
- Structured data was patchy. Around 8.2% of product pages were missing Product markup. Forty-five per cent had no image, 22% had no price, 43% had no details.
- Store pages had never been added to a sitemap, the one tier with the clearest local intent behind it.
And revenue was already falling when the engagement started, which meant the first job was to stop the decline, not to chase growth.
02 — The strategy
Shrink the crawl space first, then build the tier that converts.
Sequencing was the whole argument. There is no point enriching thin product pages on a site where Google is crawling four million URLs, because the work lands on pages the crawler reaches once a quarter.
The first two quarters went on making the site smaller, and only then on making it better.
The directive work came first because it was the cheapest.
- Infinite duplication was closed with a canonical rule keyed to the product ID.
- Parameterized product URLs moved to noindex, follow, which keeps them out of the index while letting PageRank reach the canonical product pages and cutting the crawl cost of getting there. Out-of-stock category URLs got the same treatment so hidden inventory stayed discoverable.
- Unfiltered pagination was changed to self-canonicalize with robots all, and
page=1was collapsed to the root so the fix did not introduce a new duplicate. - Filter restrictions moved into robots.txt when Google sunset the URL Parameters tool partway through.
By February 2023 the site had enough indexation discipline to drop the conflicting robots tags entirely and rely on canonicals alone.
Then the catalogue. Working from the revenue data rather than the sitemap, 3,571 low-value SKUs were switched off, almost all of them imageless, description-less products that were not in stock anywhere. Before they went, I checked which of those URLs had organic traffic or inbound links. Thirty did, plus another thirteen with referring links, and those went into a redirect map instead of being dropped.
Impressions rose about 10% against the previous period and non-branded clicks about 6%, with most of the effect landing in October. A separate pass recovered 2,080 clicks and 117,923 impressions a month from brand shortcut URLs like /solei and /tweed that had started returning non-200 status codes.
With the crawl space under control, the local tier got built.
- Store pages went into a dedicated sitemap, so their indexing rate could actually be measured, then launched in October with local business schema, contextual FAQs, store hours markup and a nearby-stores internal linking module.
- Meta titles moved to a
[City] Dispensary - [Region] Cannabis Storeconvention managed through Yext. - Brand pages got dynamically generated titles, so they stopped cannibalizing
/shop. - The member deals page was released, having been canonicalized to
/shopsince launch and therefore never indexed, to target discount and deals queries.
Where the impact of a change was arguable, it got tested rather than asserted, on staggered A/B and serial tests across store pages.
None of this shipped on its own. The work ran as roughly sixty tickets through the client’s own development queue, which meant every recommendation had to carry its implementation logic, its acceptance criteria and its priority relative to commercial roadmap work. The retainer also covered the wider portfolio (Firebird Delivery, WikiLeaf, PotGuide, Hotbox, Friendly Stranger and Happy Dayz) with monthly reporting across all of them, but the retail site is where the architecture work sat.
- Crawl-space reduction ahead of content work. Indexed URLs fell from roughly four million to twelve thousand money pages, with 3,571 dead SKUs retired and the thirty that still earned something redirected rather than dropped.
- Directive repair so PageRank could actually move. Infinite duplication closed, noindex and nofollow separated, pagination self-canonicalizing, and eventually canonicals alone doing the work.
- A store-page tier built to be found. Its own sitemap, local schema, contextual FAQs and internal linking, which is where the majority of organic revenue ended up.

03 — The results
Revenue up 48%, and the store pages finished as the majority of it.
+47.97%
organic revenue per month (6-figures)
+70.23%
organic transactions
+29.27%
new users from organic
+22.44%
organic sessions
The mix moved as much as the total. Store pages grew 78% year over year and went from 44% of organic revenue to 53%, so the local tier that had never been in a sitemap finished as the largest single source of online revenue. Product and shop pages grew 48%. The homepage grew 19% on 17% fewer sessions, which is what it looks like when a site stops leaning on brand and homepage traffic and starts earning non-branded visits against the architecture underneath.
"Marc combines deep technical SEO expertise with a real talent for making complex topics clear and actionable. He quickly felt like part of our team, understood our constraints, and tailored his recommendations to what would make the biggest difference. He moves fast without cutting corners, and his consulting helped us drive tangible increases in organic traffic and revenue. Marc was easy to work with, and is someone I would partner with again in the future."
Alex VerdurmenCo-Founder, Hover Group (formerly VP Technology & Operations, Fire & Flower/Hifyre)
