1. The Month The Ad Account Went Dark
In February a lighting retailer I work with had their Meta ad account suspended. Not permanently — a policy review over a batch of creative that referenced a discount incorrectly — but it took eleven days to resolve. During those eleven days their paid social spend went to zero.
Revenue fell 34%.
That number is the entire argument of this article, and it cuts both ways. Thirty-four per cent is a catastrophe if you are the finance director watching it happen in real time. It is also, if you turn it around, the observation that 66% of the revenue kept arriving with nobody paying for it that week. Organic search was about two-thirds of that remainder. Nine days into the outage the managing director asked me the question that started this piece: "how long would it take to make the organic half bigger, and what would it cost?"
I gave him a bad answer at first. I said "six months and about the cost of one month's ad spend", which was the sort of thing people say. Then I went and did the arithmetic properly against their actual catalogue, their actual margins and their actual competitive position, and the honest answer turned out to be fourteen months, roughly two and a half months of ad spend, and a meaningful chance of it not working at all in three of their five product categories.
That is the conversation this article is trying to have. Not "SEO is good, do SEO" — I have no interest in that argument and neither should you. The question worth answering is: given a fixed amount of money and a fixed amount of engineering attention, when does organic search beat the alternatives, when does it not, how would you know, and how do you avoid paying somebody a retainer for eighteen months in exchange for a monthly PDF?
This is deliberately not a tactics article. If you want the mechanics of finding what to target, that is in the piece on keyword research that survives contact with a real catalogue, and the implementation side lives in technical SEO and structured data. What follows is the case for spending the money in the first place, and the case against, which I think gets made far too rarely by people who sell the service.
2. Rented Traffic And Owned Traffic Are Different Assets
The framing I keep coming back to is one a CFO gave me, not a marketer. She said paid advertising is an operating expense and SEO is a capital expenditure that HMRC will not let you capitalise. That is imprecise as accounting but it is exactly right as intuition.
Paid media is a transaction. You put in money, you get out clicks, the relationship ends. Stop paying and the clicks stop the same afternoon — not gradually, not with a tail, immediately. There is no residual. Every visitor next month costs full price again, and the price is set by whoever else is bidding, which means your cost of acquisition is partly determined by how much venture capital your competitors raised.
Organic search is closer to building a warehouse. Expensive up front, slow to come online, and then it sits there producing until something changes. The maintenance is real but it is a fraction of the build cost. And critically the asset is yours in a way that an ad account never is — nobody can suspend your category page over a creative review.
I want to be careful not to overstate this, because the "owned" framing gets abused. You do not own your search rankings. You own the pages and the links and the accumulated topical position; the rankings sit on top of that and Google can move them. What you own is a durable input into a process you do not control. That is a materially better position than owning nothing, and materially worse than owning a mailing list.
Here is the practical test I use to work out which asset class a channel belongs to. Ask: if I stop spending today, what does the traffic look like in ninety days? Paid: zero, by tomorrow. Affiliate: near zero within a fortnight. Email: intact but decaying, maybe 70%. Organic: 90-95% intact, and the decay from there is measured in quarters, not weeks.
That ninety-day question is also the one to ask about any agency's work. If their contribution disappears when you stop paying them, you were renting.
3. What A Click Actually Costs, Fully Loaded
Most comparisons between paid and organic are dishonest in the same direction: they compare the CPC of a paid click against zero for an organic click. Organic clicks are not free. They cost whatever you spent to get the page ranking, amortised over the traffic it produces, plus the ongoing cost of keeping it there.
The right unit is fully-loaded cost per incremental session over the asset's useful life. That is harder to compute and it is the only comparison that means anything.
| Input | Paid search | Organic search |
|---|---|---|
| Marginal cost of the next click | Full CPC, every time | Approximately zero |
| Cost trajectory | Rises with competition | Falls as traffic grows |
| Time from spend to first click | Hours | 3–9 months typically |
| Predictability of volume | High, within a day | Low for 2 quarters, then decent |
| Residual after stopping spend | None | Most of it, for quarters |
| Who sets your price | Competitors' bids | Your own execution |
| Attribution difficulty | Moderate | Genuinely hard |
| Fails catastrophically when | Account suspended, CPCs spike | Core update, migration botched |
To put numbers on it, here is the model I actually build for clients. It is not clever. It is a discounted cash flow on a traffic asset, and its value is that it forces everybody to write down their assumptions where they can be argued with.
#!/usr/bin/env python3
"""Fully-loaded cost per organic session over a 36-month horizon.
The point of this is not the output number. It is that every assumption
below is a line someone has to defend in a meeting.
"""
BUILD_COST = 46_000 # agency + internal eng + content, one-off
MONTHLY_UPKEEP = 2_400 # retainer, refreshes, new pages, link work
HORIZON_MONTHS = 36
DISCOUNT_ANNUAL = 0.12 # your actual cost of capital, not zero
# Traffic ramp: sessions per month. Front-loaded zeros are the honest bit —
# months 1-4 produce nothing at all and people forget to model that.
RAMP = [0, 0, 0, 200, 900, 2_100, 3_600, 5_200, 6_800, 8_100, 9_200, 10_000]
STEADY_STATE = 11_500 # months 13-36, assuming upkeep continues
def monthly_sessions(m):
return RAMP[m] if m < len(RAMP) else STEADY_STATE
r = (1 + DISCOUNT_ANNUAL) ** (1 / 12) - 1
pv_cost = BUILD_COST
pv_sessions = 0.0
for m in range(HORIZON_MONTHS):
discount = (1 + r) ** m
pv_cost += MONTHLY_UPKEEP / discount
pv_sessions += monthly_sessions(m) / discount # discount the traffic too
print(f"PV of cost: £{pv_cost:,.0f}")
print(f"PV of sessions: {pv_sessions:,.0f}")
print(f"Cost per session: £{pv_cost / pv_sessions:.2f}")
For that homeware retailer the answer came out at £0.61 per organic session against a blended £1.94 CPC on the paid side. Three-to-one in favour of organic — but only from month fourteen onward, and only if the ramp assumption held.
Discounting the sessions as well as the costs is the line people push back on. Do it anyway. A session in month 30 is worth less than a session next week for the same reason a pound is, and skipping it flatters the organic case by about 15%.
4. Compounding Is Real, And It Is Not What You Think
"SEO compounds" gets said so often it has stopped meaning anything. There are three genuinely distinct mechanisms behind the phrase and they behave very differently.
Topical accumulation
The tenth good article you publish on a subject ranks faster than the first, because the domain has demonstrated it covers that subject and the internal links from nine existing pages give the new one a running start. This is real and I have measured it: on a garden furniture client, time-to-first-page for a new buying guide fell from about 19 weeks for the first three guides to about 5 weeks by the twelfth. Same author, same template, same promotion effort.
Link acquisition as a function of traffic
Pages that rank get linked to, because the people who write articles find sources by searching. So rankings cause links which cause rankings. This is the loop that produces the hockey-stick charts in agency case studies and it is genuine, but it is much stronger for informational content than for commercial category pages. Nobody has ever linked to a filtered product listing.
Brand search as the terminal output
The most valuable thing organic search produces, eventually, is people typing your name. Branded queries convert at three to six times the rate of non-branded ones in every dataset I have looked at, they cost nothing, and they are almost immune to ranking volatility. When I model the long-run value of a content programme, the branded search uplift is usually a bigger line than the non-branded traffic it came from.
Now the honest counterweight. Compounding also means the gap between you and an incumbent widens by default. If you are entering a category where somebody has been publishing consistently for nine years, you are not starting from zero, you are starting from behind, and the same mechanism that will eventually help you is currently helping them more. In two of that homeware client's five categories I recommended against organic investment entirely for exactly this reason. Paid was the better buy there and probably always will be.
5. Time To Results, With The Awkward Parts Included
The number you will be quoted is "three to six months". It is not a lie exactly, it is the answer to a different question: how long until you see the first movement in a rank tracker. How long until revenue moves enough to notice is a different curve.
What I actually observe, across storefronts between roughly £2m and £40m of annual revenue:
Weeks 0–8. Nothing visible. Technical fixes ship, content gets written, pages get indexed. If your site had a genuine technical blocker — pagination that was uncrawlable, a JavaScript-rendered category page, an accidental noindex — you can see a fast jump here, and this is where a good audit earns its fee. Otherwise, flat.
Months 2–5. Impressions rise before clicks do. Search Console shows you ranking at position 30 for things you did not rank for at all, which produces approximately no traffic and a great deal of premature celebration. Watch the impression curve, not the click curve, because impressions lead clicks by about two months and are far less noisy.
Months 5–10. The first real revenue. Usually from long-tail commercial queries rather than the head terms in the proposal. This is also when the programme is most likely to be cancelled, because the spend has been going out for the better part of a year and the return so far does not cover it.
Months 10–18. Where the return actually is, if it is anywhere.
Two things distort this. Site age and existing authority compress it — an established retailer adding content sees results at roughly half these timescales, and a brand-new domain should add three to six months to everything. And a migration, replatform or URL structure change resets a meaningful chunk of it, which is why I get very tense when a client mentions replatforming in month seven of a content programme.
The awkward part I make people confront up front: you will be asked to renew or cancel the budget at exactly the point in that curve where the evidence is weakest. Decide now, in writing, what evidence at month six would justify continuing. Impressions and ranking distribution, not revenue. If you wait until revenue is convincing you will have cancelled it three months earlier.
6. The Payback Question A Finance Director Will Actually Ask
Marketing people present SEO as traffic growth. Finance people want to know when the money comes back and what the alternative use of the cash was. Those are the same question asked in two languages, and the second one is more useful.
# payback.py — month at which cumulative gross profit from organic
# exceeds cumulative spend. Run it with your own numbers before the meeting.
BUILD, UPKEEP = 46_000, 2_400
AOV, GROSS_MARGIN = 78.0, 0.42
CVR = 0.021 # organic session -> order. Use YOUR number.
RAMP = [0, 0, 0, 200, 900, 2_100, 3_600, 5_200, 6_800, 8_100, 9_200, 10_000]
STEADY = 11_500
cum_spend, cum_profit, payback = BUILD, 0.0, None
for m in range(48):
sessions = RAMP[m] if m < len(RAMP) else STEADY
cum_spend += UPKEEP
cum_profit += sessions * CVR * AOV * GROSS_MARGIN
if payback is None and cum_profit >= cum_spend:
payback = m + 1
if m % 6 == 5:
print(f"month {m+1:2d} spend £{cum_spend:8,.0f} profit £{cum_profit:9,.0f}")
print(f"\nPayback: month {payback}" if payback else "\nNever pays back in 48 months")
Run the same model with the build cost doubled and the conversion rate cut by a third. If it still pays back inside two years, the decision is not close and you should stop deliberating. If it only works on the optimistic case, you are about to spend money on a coin flip and you should say so out loud rather than presenting the base case as a forecast.
One correction that matters more than any of the inputs: use incremental sessions, not total organic sessions. A large share of the organic traffic in your analytics is people searching your brand name who were going to buy anyway. Counting them as a return on SEO investment is the single most common way these business cases get inflated, often by a factor of two.
7. Where I Would Spend On Paid Instead, Without Hesitation
I am not neutral — I build organic infrastructure for a living — so it is worth being explicit about the cases where I tell people not to.
You need revenue this quarter. If the business does not survive fourteen months, the fourteen-month asset is worthless. Buy the traffic. This is not a compromise, it is the correct decision.
You are testing whether anyone wants the product. Paid gives you a demand signal in a fortnight for a few thousand pounds. Do not build a content programme around a proposition you have not validated. I have watched that happen twice and both times the content was fine and the product was the problem.
Your category has no search volume. Genuinely novel products have this problem: nobody searches for a thing they cannot name. You have to create the demand somewhere else and capture it later. Organic search is a demand-capture channel, not a demand-creation one, and no amount of content strategy changes that.
Sharp seasonal peaks. If 60% of your revenue happens in six weeks, paid lets you concentrate spend into the window. Organic delivers evenly all year, which is a mismatch — although the honest version is that you want organic to carry the baseline and paid to carry the peak.
Retargeting and existing customers. Nothing about organic search competes with retargeting warm traffic. Different job.
The pattern underneath all five: paid buys speed and control, organic buys margin and durability. A business that needs speed should buy speed. The mistake is buying speed for nine consecutive years and then wondering why the customer acquisition cost tripled.
8. How I Would Split A Budget, And Why
The split I default to for an established storefront with, say, £30,000 a month of acquisition budget:
Roughly 60% paid, 25% organic, 15% owned channels — email, SMS, retention — in year one of a programme, shifting toward 40/35/25 by year three as the organic asset carries more of the baseline. The direction of travel matters more than the specific numbers.
Two rules I would defend against most objections. First, the organic allocation should be a floor, not a residual. The failure mode is treating SEO as the budget line that absorbs every shortfall, which produces four consecutive quarters of a programme that never reaches the point where it returns anything. Half-funding a fourteen-month asset for seven months buys you nothing at all — it is strictly worse than not starting.
Second, protect the engineering time separately from the marketing money. Most organic programmes die because the content got written and the technical work never shipped, since the technical work competes with the product roadmap rather than with other marketing. Book the sprint capacity up front or accept that you have bought a content programme rather than an SEO programme.
I would also carve out a small explicit budget — 5% or so — for measurement you would otherwise skip: holdout tests, log file analysis, a proper rank tracking setup with the right locations. It feels like overhead. It is what stops you spending three years on something that was not working.
9. The Things SEO Cannot Fix
Every one of these has been presented to me as an SEO problem by someone who badly wanted it to be one.
A product nobody wants. Traffic to a page that does not convert is a more expensive way to learn what a survey would have told you.
Margins that do not support the acquisition cost. If you make £4 on an order, no channel works. Organic makes the arithmetic less bad, not good.
Prices 20% above the market on a commodity item. Search intent for a specific SKU is a price comparison. You will get the click and lose the sale, repeatedly, and your click-through rate will decay until the ranking follows it down.
Being out of stock. Ranking a page for a product you cannot ship converts browsers into people who now know a competitor stocks it.
A checkout that loses people. I have seen a programme deliver a 40% traffic increase and a 2% revenue increase because the mobile checkout had a broken address lookup. The traffic was real. The funnel was not.
No brand. Two results, one from a name the customer recognises, one from a name they do not. Position two with recognition outperforms position one without it. This is why the branded search flywheel matters and why pure-play SEO with no brand investment plateaus.
A site that is genuinely slow for users. The direct ranking effect of Core Web Vitals is real but modest; the conversion effect is not modest at all. Fix it for the revenue and take the ranking as change. There is a full treatment of the measurement side in the piece on tracking Core Web Vitals in CI.
The uncomfortable version of this list: if three or more apply to you, an SEO investment will fail and the agency will not be at fault. Fix the funnel first. A leaky bucket does not need more water.
10. The Risk Nobody Puts In The Proposal
Organic search has a specific risk profile that paid does not, and proposals never mention it because it does not help close the deal.
Core algorithm updates land several times a year and can move a site 30% in either direction over a fortnight, with no ticket to raise and no account manager to call. I have had a client lose 40% of organic revenue in the August 2023 update and recover it in November without changing anything meaningful. That is not a story you want to tell a board.
The concentration risk is worse than most people model. Pull your top pages by revenue and work out what share comes from the top ten URLs. If it is above 50% you have a portfolio problem — one page's ranking is now a material business risk. On one client, 61% of organic revenue came from four buying guides. We diversified deliberately over the following year, and it cost more than it would have to keep writing about the topics that were already working.
-- Organic revenue concentration. Anything above ~40% in the top 10
-- URLs is a risk you should be pricing, not a success you should be
-- celebrating.
WITH organic AS (
SELECT landing_page, SUM(revenue) AS rev
FROM sessions
WHERE channel = 'organic_search'
AND session_date >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY landing_page
), ranked AS (
SELECT landing_page, rev,
SUM(rev) OVER (ORDER BY rev DESC) AS running,
SUM(rev) OVER () AS total,
ROW_NUMBER() OVER (ORDER BY rev DESC) AS rn
FROM organic
)
SELECT rn, landing_page,
ROUND(100.0 * rev / total, 1) AS pct_of_organic,
ROUND(100.0 * running / total, 1) AS cumulative_pct
FROM ranked
WHERE rn <= 20
ORDER BY rn;
Then there is the AI answer question, which everybody wants an opinion on. Mine: informational queries that can be answered in a paragraph are losing clicks and will continue to. Transactional queries where someone wants to compare, see stock, check a price and buy are holding up, because an answer engine cannot ship you a sofa. If your organic strategy is built entirely on top-of-funnel explainer content, the ground is moving under you. If it is built on category and product pages plus buying guides that end in a purchase decision, much less so. I would not bet a business on that distinction persisting for a decade, but it is the best read of the current evidence and I would rather say that than pretend to certainty.
11. Measuring It Without Fooling Yourself
Attribution for organic search is genuinely hard and most of what gets reported is close to useless. Three specific failures.
Branded traffic counted as a win. Split branded from non-branded in every report or the number means nothing. A brand campaign on television will show up as an SEO success.
Last-click undercounting. Organic often does the discovery and paid takes the credit on the final click. Both errors exist and they do not cancel out reliably.
Rank tracking as the primary metric. Rankings are personalised, localised and volatile. A rank tracker measures a hypothetical search by a person who does not exist.
What I actually report: non-branded organic clicks and impressions from Search Console, indexed page count against published page count, revenue from organic landing pages excluding brand terms, and share of category — how many of your target queries you appear for at all, regardless of position.
"""Pull branded vs non-branded splits from the Search Console API.
The regex is the whole point; get it wrong and every number downstream
is wrong in the flattering direction."""
from googleapiclient.discovery import build
from google.oauth2 import service_account
import re
SITE = "sc-domain:example.com"
BRAND = re.compile(r"exampl|exmaple|example\s*co", re.I) # include misspellings
creds = service_account.Credentials.from_service_account_file(
"sa.json", scopes=["https://www.googleapis.com/auth/webmasters.readonly"])
sc = build("searchconsole", "v1", credentials=creds)
resp = sc.searchanalytics().query(siteUrl=SITE, body={
"startDate": "2026-05-01", "endDate": "2026-07-31",
"dimensions": ["query"],
"rowLimit": 25000,
}).execute()
buckets = {"branded": [0, 0], "non_branded": [0, 0]}
for row in resp.get("rows", []):
key = "branded" if BRAND.search(row["keys"][0]) else "non_branded"
buckets[key][0] += row["clicks"]
buckets[key][1] += row["impressions"]
for k, (clicks, imps) in buckets.items():
ctr = 100 * clicks / imps if imps else 0
print(f"{k:12s} clicks={clicks:8,.0f} impressions={imps:10,.0f} ctr={ctr:.2f}%")
If you want a real answer rather than a directional one, run a holdout. Pick two matched groups of category pages, invest in one, leave the other alone for a quarter, and compare. It is unglamorous, some stakeholders will hate deliberately not improving half the site, and it is the only method I know that survives a sceptical CFO.
12. A Worked Example, Including The Part That Failed
An industrial fastenings distributor, roughly £11m in revenue, 34,000 SKUs, selling mostly to trade buyers who knew exactly what they wanted. They came to me spending £41,000 a month on Google Ads at a blended cost per acquisition of £68 against an average order value of £340 with 31% gross margin. The paid channel worked. It was not broken. It was just the only thing they had.
What we found in the audit: 34,000 products, 8,900 indexed. The rest were behind a faceted navigation that generated a URL for every filter combination, Google had crawled about 400,000 of those, and the actual product pages were being starved of crawl budget. No product had a unique description; they all used the manufacturer's copy verbatim, which put them in a duplicate content bucket with forty other distributors.
The programme, over eleven months: fixed the faceted navigation with a proper crawl policy, rebuilt the sitemap generation, wrote genuinely original specification content for the top 1,200 SKUs by margin, built 26 technical guides aimed at the questions trade buyers ask before specifying a part, and cleaned up an internal linking structure that had every product three clicks from anywhere useful.
Cost: £58,000 external, plus about 40 days of internal engineering time which nobody counted properly and which I would estimate at another £22,000.
| Metric | Baseline | Month 11 |
|---|---|---|
| Indexed product pages | 8,900 | 31,400 |
| Non-branded organic sessions / month | 14,200 | 52,700 |
| Organic revenue / month | £96,000 | £331,000 |
| Paid spend / month | £41,000 | £29,500 |
| Blended CAC | £68 | £41 |
Now the parts that did not work, which are the parts worth reading.
The 26 technical guides produced 71,000 sessions over the period and 14 orders. Fourteen. They were read by engineers doing research, not by the people who place orders, and the two are different humans at the same company. They did generate 31 backlinks which helped the product pages rank, so the spend was not wasted — but the business case I had written for them was wrong, and I had written it confidently. If I were doing it again I would build half as many and spend the difference on the product page content, which returned about eleven times better.
Second failure: we cut paid spend in month six because organic was working, and revenue dipped 4% for two months before recovering. The channels were not as independent as the dashboards suggested; a chunk of the organic conversions had a paid touch earlier in the journey. Cutting paid removed the top of a funnel that organic was closing. We put £9,000 a month back and the dip closed. I now advise against reducing paid until organic has been stable for two full quarters, and even then to do it in increments with a holdout region.
Third, and this one is embarrassing: the faceted navigation fix shipped with a rule that accidentally blocked a legitimate parameter used by their trade portal, and for nine days a section of the site that logged-in customers used was returning a noindex to everything including their own internal search. No revenue impact, but it was found by a customer rather than by us, and it is why I now insist on a staged rollout for crawl directives with a diff of the robots and meta output on a sample of 500 URLs before and after.
13. Reading An Agency Proposal
I have been on both sides of these documents. Here is what I look for now, in order.
Do they say no to anything? A proposal that agrees your entire catalogue is an opportunity has not been thought about. I want to see "we would not target these three categories, here is why" — that is the single strongest signal of competence in the whole document.
Is there a technical audit before the content plan? Content on a site with a crawl problem is money into a hole. If the proposal goes straight to a publishing calendar, they have not looked at the site.
Who does the engineering? Most SEO recommendations require a developer. If the answer is "we'll provide recommendations to your team", price your team's time and add it to their fee, because it is often the larger number.
What are the deliverables in months one to three? Should be specific artefacts: a crawl audit, a keyword-to-URL map, a technical backlog with priorities, an internal linking plan. "Ongoing optimisation" is not a deliverable.
How do they talk about links? "We have relationships with publishers in your sector" is fine. "We have a network of sites" means a private blog network and it is a liability you are buying. Ask to see three links they built last quarter, with the URLs. Reputable agencies will show you; the reaction to the question tells you as much as the answer.
What happens to the work if we leave? Content and technical fixes stay with you. Rented links stop pointing at you. Ask directly.
14. Signals That Should End The Meeting
These are not rules of thumb, they are things I have seen sold.
Guaranteed rankings. Nobody controls the algorithm. A guarantee means either meaningless long-tail terms nobody searches, or a contract with an exit clause you will not enjoy reading.
Charging by number of keywords. This has no relationship to the work. A single well-built category page can rank for four hundred variations; a package of "50 keywords" is a pricing fiction.
A monthly report with no method attached. If the deliverable is a PDF of rankings and a traffic chart, you are paying for reporting. Ask what changed on the site this month, and if nobody can name three specific things, nothing did.
Refusing to name the sites where links will be placed. There is no legitimate confidentiality reason for this.
Content produced at a volume that implies no research. Forty articles a month for £2,000 is thin content with a delivery schedule, and the current algorithms are unusually good at recognising it.
Immediate promises of results. Anyone who says three weeks is either describing a technical fix — which is fair enough, and they should say so — or is not being straight with you.
Conversely, the signals I take as positive: they ask about your margins by category before proposing anything, they want access to your analytics before quoting, they ask who owns the site's deployment pipeline, and they push back on at least one thing you said you wanted.
15. In-House, Agency, Or Neither
The default assumption is agency, and it is often right, but the decision has a shape worth thinking about.
Agency makes sense when you need a range of skills you cannot justify hiring — technical audit, content strategy, digital PR, and someone who has seen forty other sites make the same mistake. It also makes sense when the work is front-loaded, which most first-year programmes are.
In-house makes sense when the bottleneck is engineering rather than knowledge. If your problem is a platform that renders category pages in JavaScript and nobody has capacity to change it, hiring a technical SEO who can open pull requests beats a retainer with an agency who will send tickets into the same backlog.
The hybrid I recommend most often: agency for the first six to nine months to build the map and do the heavy technical diagnosis, with an explicit knowledge transfer, then one internal person to run the programme with occasional specialist help. It costs less in year two and the institutional knowledge stays.
What I would avoid: a junior in-house hire with no senior support, expected to fix a technical problem they have not got the authority or the experience to diagnose. That arrangement fails and the person gets blamed for it.
16. What Good Looks Like Three Months In
Because the revenue signal will not have arrived yet, you need leading indicators, and you need to agree them before anyone starts work.
Indexation should have moved. If you had a coverage problem, indexed pages should be climbing and you should be able to see it in Search Console. Crawl requests to product URLs should be up as a share of total crawl.
Impressions for non-branded queries should be up meaningfully — I would want 25% or more — even if clicks are barely moving. Impressions arriving without clicks means you are ranking on page three, which is exactly where you should be at month three.
The number of distinct queries you appear for at all should be growing. This is my favourite early metric because it is hard to game and it moves before anything else does.
There should be a technical backlog with items shipped, not just written. Count merged pull requests, not recommendations delivered.
#!/usr/bin/env bash
# monthly-organic-health.sh — three checks that catch most disasters
# before they become quarterly reports. Run on the 1st.
set -euo pipefail
SITE="https://example.com"
# 1. Anything accidentally noindexed? The single most expensive one-line bug.
curl -s "$SITE/sitemap.xml" \
| grep -oE 'https://[^<]+' | shuf -n 200 \
| while read -r url; do
if curl -sI "$url" | grep -qi 'x-robots-tag:.*noindex'; then
echo "NOINDEX HEADER: $url"
fi
done
# 2. Is the sitemap still the size we expect? A sudden drop means a
# generation bug and it will cost you a fortnight if nobody notices.
COUNT=$(curl -s "$SITE/sitemap.xml" | grep -c '<loc>')
echo "sitemap URLs: $COUNT"
[ "$COUNT" -lt 20000 ] && echo "WARNING: sitemap smaller than expected"
# 3. Did robots.txt change without a pull request? It happens more
# often than anyone admits, usually during a deploy rollback.
curl -s "$SITE/robots.txt" > /tmp/robots.now
diff -u baseline/robots.txt /tmp/robots.now || echo "ROBOTS.TXT CHANGED"
17. Questions Merchants Ask Me
"Can we just do SEO instead of ads?" Eventually, partly, and not for at least a year. The transition works when organic grows into the gap rather than when paid is switched off and organic is asked to catch up. Overlap the channels and reduce paid in increments you can reverse.
"How much should we spend?" Enough to reach the point where it returns something, or nothing. For a mid-size storefront that is realistically £3,000 to £8,000 a month sustained for at least a year, plus engineering capacity. Below that threshold you are buying a report.
"Our competitor ranks first and their site is terrible. How?" Almost always links and age, occasionally a brand signal you cannot see in a crawl. Their site being unpleasant does not undo nine years of accumulated authority. It does mean that if you match them on authority you will beat them, which is a long game but a winnable one.
"Does AI-written content work?" It ranks, sometimes, for a while, on topics where nobody has written anything better. It does not build the thing you are actually buying, which is a reason for a person to link to you or trust you. I use models for research, outlining and first-draft structure and would not publish generated prose on a commercial page. The economics of doing so are also self-defeating: if the cost of production goes to zero for everyone, the content has no value as a differentiator.
"We're replatforming. Should we pause SEO?" The opposite. A migration is the highest-risk moment your organic traffic will ever face, and the difference between a well-planned one and a careless one is routinely 30% of traffic for six months. Get the redirect map, the URL structure and the crawl plan right before anything else. The headless commerce piece covers the specific failure modes when the front end moves to a framework.
"Is SEO dead because of AI answers?" The informational top of the funnel is contracting. Commercial and transactional search is not, because it ends in a transaction that has to happen on somebody's site. Where I would genuinely change strategy: stop building content whose entire value is answering a question, and start building content whose value is helping someone choose between things you sell.
"How do we know the agency is doing anything?" Ask for the list of URLs changed this month and diff two of them yourself. It is a thirty-second check and it ends the ambiguity permanently.
18. What I Would Do First
In this order, and the order is the advice.
Work out what percentage of your revenue would survive ninety days without paid media. That number is your dependence, and it is the only figure from this article your board needs.
Split your organic traffic into branded and non-branded and look at the non-branded number honestly. If it is tiny, you do not currently have an SEO channel, whatever the dashboard says.
Crawl your own site and compare the count of crawlable product URLs against the count in your database. A gap here is the cheapest win available and it does not need an agency.
Model the payback with your real margins, then rerun it with the build cost doubled and the conversion rate cut by a third. Make the decision on the pessimistic case.
Check the concentration of your existing organic revenue. If four pages carry it, fixing that is more urgent than growing the total.
Only then decide who does the work — and whatever you decide, agree in advance what evidence at month six justifies continuing, because the month-six conversation is where these programmes actually get decided.
The framing I would leave with a merchant deciding where to put the money: paid media buys you customers, organic search buys you a lower price for customers later. Both are legitimate purchases. The failure I see repeatedly is not choosing wrongly between them — it is never making the choice at all, letting the paid budget absorb everything because it is the one with a dashboard that updates hourly, and then discovering in year four that the cost of acquisition has doubled and there is no asset on the balance sheet to show for any of it.
Suggested & Related Reading
Explore related engineering guides from Kenneth D'Silva:
-
Technical SEO & Structured Data
Implementation for E-Commerce
Deep dive into JSON-LD schema graphs, variant product modeling, and rich snippets.
-
Headless Architecture: Why Decoupling
Front-End & Back-End Unlocks Speed & SEO
Learn how Next.js, GraphQL, and Vercel Edge networks create sub-100ms LCP storefronts.
-
Performance Optimization for Magento &
Shopify Stores
A pragmatic guide on Varnish VCL, Redis clustering, and image CDN compression.
-
Securing Your Ecommerce Store: A
Pragmatic Hardening Checklist
Protect search engine trust signals with CSP nonces, WAF implementation, and PCI compliance.
-
CDN Architectures for E-Commerce SEO
Understanding edge caching, image optimization, and routing strategies for massive product catalogs.
-
Core Web Vitals Remediation Guide
A comprehensive technical deep dive into diagnosing and fixing LCP, INP, and CLS bottlenecks in modern SPAs.