The month your CAC doubled was not the month something broke
Every D2C founder describes the same shape. Year one, Meta was cheap and the unit economics worked. Then the auction filled with brands doing exactly the same thing, attribution got worse, and CAC drifted up quarter after quarter until contribution margin went negative on half the catalogue.
Nothing broke. The channel simply got priced correctly. Paid social is an auction, and an auction reprices every time a competitor raises their hand. You never owned that demand — you rented it, monthly, at whatever the market cleared at.
The uncomfortable version: if 90% of revenue comes from paid, you don't have a brand yet, you have a media buying operation with a logo on it. The fix isn't a better creative testing cadence. It's owning a slice of demand nobody can outbid you for.
The blended CAC arithmetic, done honestly
Here's the maths with round numbers so you can substitute your own. These figures are illustrative arithmetic, not a case study — the only real number in the table is our retainer.
- The retainer is a fixed cost against a growing order count. At 333 organic orders a month, ₹75,000 works out to about ₹225 per organic order, and that figure keeps falling while your paid CAC keeps climbing.
- The fourth row is the real prize. Cutting media 20% while total orders still grow is the outcome that changes a P&L. Most founders model the first three rows and never model that one.
- Attribution will understate it. Organic discovery frequently ends in a branded search or a direct visit weeks later, and last-click will file that under 'direct'. Track branded search volume in Search Console as a demand signal, or you'll under-credit the channel and cut it early.
| Scenario | Monthly orders | Monthly acquisition cost | Blended CAC |
|---|---|---|---|
| All paid | 1,000 paid | ₹9,00,000 media | ₹900 |
| Organic at 10% | 1,000 paid + 111 organic | ₹9,00,000 media + ₹75,000 retainer | ₹878 |
| Organic at 25% | 1,000 paid + 333 organic | ₹9,00,000 media + ₹75,000 retainer | ₹731 |
| Organic at 25%, paid cut 20% | 800 paid + 333 organic | ₹7,20,000 media + ₹75,000 retainer | ₹702 |
Four quarters, and what actually ships in each
This is a plan, not a promise. The ranges are wide because a three-year-old store with 400 referring domains and a six-month-old one behave nothing alike, and no honest agency can collapse that into a single number before seeing your data.
| Quarter | What ships | What you should see |
|---|---|---|
| Q1 | Technical fixes, collection architecture, brand SERP defence, 8–12 problem-first articles, review markup | Impressions climbing, brand SERP cleaned up, very few organic orders |
| Q2 | Category and comparison pages, ingredient and concern clusters, internal link build, first digital PR | Non-branded terms reaching page one or two, first organic orders arriving |
| Q3 | Refresh cycle on Q1 content, buying-guide layer, links compounding, CRO on organic landing pages | Organic order share into double digits for most catalogues |
| Q4 | Scale what ranked, kill what didn't, gifting and seasonal pages, widen the link surface | 20–30% organic order share is a reasonable target — not a certainty |
Problem-first content, because nobody searches for your product
Your customer does not search 'buy cold-pressed coconut hair oil'. They search why their hair falls out every monsoon, whether niacinamide suits oily skin, what to do about a toddler who won't eat, which protein powder doesn't taste like chalk. The product is the answer. The problem is the query.
This is where D2C SEO diverges from generic ecommerce SEO. A catalogue site optimises for people who already know what they want. A D2C brand has to create the want, and search is the cheapest place to meet somebody at the exact moment the problem becomes urgent enough to type.
- Concern and symptom queries — the season, the symptom, the situation. Highest volume, slowest to convert, best for links and email capture.
- Ingredient and material queries — 'is X safe', 'X vs Y', 'how much X per day'. Mid-funnel, enormous trust value, and the place buyers decide whether you're honest or just loud.
- Comparison and best-for queries — the ones that turn into orders. Write them even when you can't honestly rank yourself first in every segment.
- Usage and post-purchase queries — how to use, how long it lasts, how to store. Retention content that happens to rank, and it reduces support tickets while it does.
Your brand SERP currently belongs to Amazon
Search your own brand name. Then search it with 'buy', 'review', 'price' and 'coupon'. On most Indian D2C brands page one is Amazon, Flipkart, Nykaa, a coupon aggregator with a dead code, and a review site nobody has heard of.
Every one of those results is a customer you paid Meta to create, handed to somebody who takes a margin. This is the fastest-paying work in D2C SEO and it usually takes weeks, not quarters.
- Rank first for your own name, with sitelinks. Normally an internal-linking and
Organizationschema fix rather than a content one. - Own 'brand + reviews'. Publish a reviews page with real verified reviews and correct markup. If you don't, a site that monetises your traffic will.
- Own 'brand + coupon' and 'brand + discount code'. The least glamorous page you will ever build, and it typically pays for itself inside a month by intercepting the coupon aggregators.
- Own 'brand + vs' and 'brand + alternatives'. Somebody is writing those pages. Better that it's you, written fairly.
- Fix the Knowledge Panel —
Organizationschema, consistent name and address everywhere, a Google Business Profile if you have any physical presence. Founders underrate how much a clean brand SERP does for paid conversion rates too. We've written more on why Indian D2C brands overspend on ads.
Shopify architecture that doesn't fight you
Shopify is perfectly good for SEO and badly configured by default. Four decisions need making on day one, because unpicking them at 40,000 URLs is a migration.
- The `/collections/x/products/y` duplication. Shopify can serve the same product under every collection path it belongs to. Canonical everything to
/products/handleand make sure the theme's links point there too, or you're splitting signals across a dozen URLs per SKU. - Tag-generated collection URLs multiply the same way facets do on a custom build. Decide which tag pages deserve to be real, hand-built collections with their own copy, and block the rest.
- One blog handle, not five. Shopify's
/blogs/[handle]/[post]structure buries content by default, and brands routinely end up with 'news', 'blog', 'journal' and 'stories' all half-populated. - Check what schema your theme actually outputs. The built-in
Productmarkup in most themes is incomplete — missing availability, missing currency, sometimes missing offers entirely. Verify it in the Rich Results Test before assuming rich results are coming.
Reviews and UGC are ranking assets, when the markup is honest
Customer reviews do three jobs at once: they add the long-tail phrasing your copywriter would never write, they make aggregateRating rich results possible, and they're the strongest trust signal on a product page for a brand nobody has heard of yet.
- Mark up only reviews collected on your own site. Importing Amazon ratings into your schema violates Google's structured data policies, and the resulting manual action removes rich results across the whole domain.
- Render reviews in HTML. Plenty of review apps inject everything client-side into a widget, which means none of that language is reliably available to the crawler. Check the rendered source, not the browser view.
- Ask for photo and video reviews in the post-purchase flow, not in a quarterly campaign. They earn dwell time, they show up in image results, and they're the closest thing to proof a first-time buyer will accept.
- Add a Q&A block on product pages. It's user-generated content that lands exactly on the questions pre-purchase buyers type, and it fills the content gap on SKUs nobody has written 500 words about.