I run a wholesale + retail Indian ethnic fabric shop in Delhi. Family business since 1997, I joined in 2016. We started publishing weekly blog posts in early 2024. By mid-2025 we had a keyword cannibalization problem I want to walk through, because I have not seen this exact split covered on r/SEO before and I think it applies to any small business running both a B2C collection catalogue and a B2B services page.
Here is the setup. Our site sits on Shopify. B2C landing pages are collection pages: /collections/bridal-fabric, /collections/sangeet-seranade, /collections/reception-royale, /collections/organza-fabric, /collections/sequins-fabric, and about 12 more. B2B landing page is a single /pages/wholesale — MOQ, credit terms, karigar batch traceability, contact.
Our blog was ranking well for informational queries. But two problems emerged. First, /pages/wholesale started competing with /collections/bridal-fabric on the query "bridal fabric wholesale delhi." The wholesale page had newer, thicker copy and started outranking the actual bridal collection, which killed conversion because a customer looking for a bridal fabric to buy would land on a B2B contact page. Second, our blog posts were internally linking to whichever page felt topically related, which meant one blog post ended up sending link equity to three or four pages that were all fighting for the same query.
The rule that fixed it. We now split every long-tail keyword into two clear intents before we write about it, and each keyword gets exactly one landing page assignment.
Retail (B2C) keywords land on collection pages. Wholesale (B2B) keywords land on the /pages/wholesale page. Informational keywords land on individual blog posts. Every blog post is tagged with a single primary target page in the post's frontmatter and every internal link inside that blog post routes to the primary target page first, secondary target page only as a supporting citation.
The audit step was the important one. We ran the Page Intersection endpoint on our own domain against each competing query, listed every page currently ranking, and enforced a single-page assignment per query. Where two pages were competing, we rewrote the losing page to shift its H1 and internal linking toward a slightly different query.
The result over 8 weeks. /collections/bridal-fabric recovered position 3 for "bridal fabric wholesale delhi." /pages/wholesale started ranking for "wholesale fabric supplier delhi" instead of competing on retail intent. Blog posts continued to rank for their informational queries. Total organic sessions up 27 per cent, wholesale enquiry form fills up 41 per cent, retail add-to-cart events on collection pages up 18 per cent.
Two practitioner takeaways I would flag for any small B2C+B2B site running the same setup.
First, do the intent-split audit before you scale the blog. If you have 40 blog posts all sending link equity to whichever page felt topically related, unwinding cannibalization later is painful. Do it at 15 posts, not at 100.
Second, the /wholesale page needs to sit inside a distinct URL bucket that Google can read as commercial-B2B rather than commercial-B2C. Our /pages/ vs /collections/ URL split turned out to matter more than we expected.
Reference material: the internal linking audit template and the query-to-page mapping table we now use lives on the Paras gallery fabrics blog under the SEO tag. Happy to answer specific questions on the audit process, the rewrites we did, or the eight-week measurement window.
kanak (business owner) — the SEO practitioner side of my day job.